GVKun编程网logo

Python 的 id() 有多独特?(python的idx)

16

在本文中,我们将为您详细介绍Python的id()有多独特?的相关知识,并且为您解答关于python的idx的疑问,此外,我们还会提供一些关于AnacondaPython3.6–pythonw和pyt

在本文中,我们将为您详细介绍Python 的 id() 有多独特?的相关知识,并且为您解答关于python的idx的疑问,此外,我们还会提供一些关于Anaconda Python 3.6 – pythonw和python应该是等价的吗?、dict独特组合Python列表、MicroPython入坑记(三)板子上的Python到底有多快?、php – Laravel中的会话ID有多独特?的有用信息。

本文目录一览:

Python 的 id() 有多独特?(python的idx)

Python 的 id() 有多独特?(python的idx)

tl; dr Python 是否重用 id?两个生命周期不重叠的对象获得相同 ID 的可能性有多大?

背景: 我一直在做一个复杂的项目,完全用 Python 3 编写。我在测试中看到了一些问题,并花了很多时间寻找根本原因。经过一些分析,我怀疑当测试作为一个整体运行时(它是由专门的调度程序编排并运行的),它是在重用一些模拟方法,而不是用它们的原始方法实例化新对象。要检查解释器是否正在重用,我使用了id().

问题: id()通常可以工作并显示对象标识符,让我知道我的调用何时创建一个新实例而不是重用。但是,如果两个对象相同,则 id 会发生什么?文档说:

返回对象的“身份”。这是一个整数,保证该对象在其生命周期内是唯一且恒定的。具有不重叠生命周期的两个对象可能具有相同的id()值。

问题:

  1. 解释器什么时候可以重用id()值?只是随机选择同一个内存区域吗?如果它只是随机的,它似乎极不可能,但仍然不能保证。
  2. 还有其他方法可以检查我实际引用的对象吗?我遇到了我有对象的情况,它有一个模拟方法。该对象不再使用,垃圾收集器将其销毁。之后,我创建了同一个类的新对象,它得到了一个新对象,id()但该方法得到了与它被模拟时相同的 id,它实际上只是一个模拟。
  3. 有没有办法强制 Python 销毁给定的对象实例?从我所做的阅读看来,没有,当垃圾收集器没有看到对对象的引用时,它是由垃圾收集器决定的,但我认为无论如何都值得一问。

Anaconda Python 3.6 – pythonw和python应该是等价的吗?

Anaconda Python 3.6 – pythonw和python应该是等价的吗?

根据 Python 3文档,python和pythonw应该等同于运行GUI脚本 as of 3.6

With older versions of Python,there is one Mac OS X quirk that you need to be aware of: programs that talk to the Aqua window manager (in other words,anything that has a GUI) need to be run in a special way. Use pythonw instead of python to start such scripts.

With Python 3.6,you can use either python or pythonw.

但是,我刚刚使用Python 3.6安装了Anaconda,如果我尝试使用python而不是pythonw运行我的wxPython GUI,我仍然会得到非框架构建错误:

This program needs access to the screen. Please run with a
Framework build of python,and only when you are logged in
on the main display of your Mac.

这里发生了什么?为什么这个错误仍然存​​在?

我使用的Python版本是:

Python 3.6.0 :: Anaconda 4.3.1 (x86_64)

解决方法

答案可以在这里找到: How to use a framework build of Python with Anaconda

简而言之,使用命令

conda install python.app

和pythonw将被安装.

dict独特组合Python列表

dict独特组合Python列表

我有大数据为了可视化目的,这是dict的示例列表,

输入:

a = [{'e1': 'a','e2': 'b'},{'e1': 'b','e2': 'a'},{'e1': 'a','e2': 'c'} ]

输出:

a = [{'e1': 'a','e2': 'c'}]

详情:
如果{‘e1’:’a’,’e2’:’b’}和{‘e1’:’b’,’e2’:’a’}指向彼此的值,那么我希望这是唯一的{‘ e1’:’a’,’e2’:’b’}.

所以基本上e1是源,e2是目标.如果源和目标之间存在任何连接应该是唯一的.这里已经A连接到B然后它不应该考虑B连接到A.

解决方法

你可以试试这个

from itertools import groupby
[j.next() for i,j in groupby(a,lambda x: sorted(x.values()))

输出:

[{'e1': 'a','e2': 'c'}]

MicroPython入坑记(三)板子上的Python到底有多快?

MicroPython入坑记(三)板子上的Python到底有多快?

前几篇都是直接在命令上操作,然而执行py文件才是王道,其实类似nodemcu的lua固件,MicroPython也提供了一个简单的文件系统用来存代码。并自动在开机时执行:

boot.py

main,py

两个文件

windows用户的话,推荐一个软件:uPyLoader界面如下

可以看到,左边是本地的文件,右边是ESP8266的文件,两边可以互相传输,也可以删除上边的文件,其他功能自行探索,这个软件自带了一个编辑器,不过很弱。

还是推荐用vim或者vscode来写代码,然后用这个软件把代码传进去。

测试代码么,先来个循环:

 

import time
import micropython
def loop1():
    t1=t2=0
    for i in range(5):
        t1=time.ticks_us()
        for i in range(100):
            pass
        t2=time.ticks_us()
        print(t2-t1)
        time.sleep(2) 
loop1()

默认工作在80MHZ下,结果是:

=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
4715
4695
4742
4698
4697
>>>   

 脚本确实不快,100次循环足足用了4.5ms,即使把速度调成160MHZ,也就2.5ms左右也就一次循环25us左右,而ESP32下速度就很赞了:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
346
262
274
267
278
>>>

10多倍的提速2us-3us循环一次,甚至可以写dht11那样的时序驱动了。esp8266就没办法了吗?当然有!

MicroPython官方文档上专门有篇代码提速的文章,其中提到了可以用装饰器micropython.native micropython.viper来给代码打鸡血(编译成机器码)

import time
import micropython

@micropython.native
def loop1():
    t1=t2=0
    for i in range(5):
        t1=time.ticks_us()
        for i in range(100):
            pass
        t2=time.ticks_us()
        print(t2-t1)
        time.sleep(2) 
loop1()

 

加了个@micropython.native装饰器,速度立马鸡血:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
326
320
320
320
320
>>>

 赶上esp32了有木有?那……esp32用这个得多快?不好意思,esp32这功能还没弄好,哈哈

另一个装饰器的例子:

import time
import micropython

@micropython.viper
def loop1():
    t1=0
    t2=0
    for i in range(5):
        t1=int(time.ticks_us())
        for i in range(100):
            pass
        t2=int(time.ticks_us())
        print(t2-t1)
        time.sleep(2) 
loop1()  

结果:

paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== with open("test_loop.py") as f:
===     exec(f.read(), globals())
=== 
51
51
50
51
51
>>>  

这就更碉堡了,又提升了6倍,都快接近100倍了,虽然需要改一点点代码才能过,继续期待esp32的这功能吧

另外还有个插入汇编的功能,就不试了。

 

php – Laravel中的会话ID有多独特?

php – Laravel中的会话ID有多独特?

我通过将每个页面视图与会话ID一起存储在表中来跟踪文章命中,然后我使用会话ID来清除(计数(不同会话))用户会话生存期中的多个命中.

但是Laravel会话ID有多独特?我是否还应考虑其他因素,例如避免错误分组的时间?

更新:我调整了sql以将日期考虑在内:

select count(distinct session,DATE(created_at)) as aggregate from `article_views` where `article_id` = ? and `agent` NOT LIKE '%bot%'

解决方法

会话ID非常独特,可以复制,但概率非常低.如果您的网站流量公平,可能会在您的网站生活中发生一次,并且只会让一个用户厌倦一个会话.除非您希望建立一个非常高流量的网站,否则不值得关注.

今天关于Python 的 id() 有多独特?python的idx的分享就到这里,希望大家有所收获,若想了解更多关于Anaconda Python 3.6 – pythonw和python应该是等价的吗?、dict独特组合Python列表、MicroPython入坑记(三)板子上的Python到底有多快?、php – Laravel中的会话ID有多独特?等相关知识,可以在本站进行查询。

本文标签: