在本文中,我们将为您详细介绍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)
- Anaconda Python 3.6 – pythonw和python应该是等价的吗?
- dict独特组合Python列表
- MicroPython入坑记(三)板子上的Python到底有多快?
- php – Laravel中的会话ID有多独特?
Python 的 id() 有多独特?(python的idx)
tl; dr Python 是否重用 id?两个生命周期不重叠的对象获得相同 ID 的可能性有多大?
背景: 我一直在做一个复杂的项目,完全用 Python 3 编写。我在测试中看到了一些问题,并花了很多时间寻找根本原因。经过一些分析,我怀疑当测试作为一个整体运行时(它是由专门的调度程序编排并运行的),它是在重用一些模拟方法,而不是用它们的原始方法实例化新对象。要检查解释器是否正在重用,我使用了id()
.
问题: id()
通常可以工作并显示对象标识符,让我知道我的调用何时创建一个新实例而不是重用。但是,如果两个对象相同,则 id 会发生什么?文档说:
返回对象的“身份”。这是一个整数,保证该对象在其生命周期内是唯一且恒定的。具有不重叠生命周期的两个对象可能具有相同的
id()
值。
问题:
- 解释器什么时候可以重用
id()
值?只是随机选择同一个内存区域吗?如果它只是随机的,它似乎极不可能,但仍然不能保证。 - 还有其他方法可以检查我实际引用的对象吗?我遇到了我有对象的情况,它有一个模拟方法。该对象不再使用,垃圾收集器将其销毁。之后,我创建了同一个类的新对象,它得到了一个新对象,
id()
但该方法得到了与它被模拟时相同的 id,它实际上只是一个模拟。 - 有没有办法强制 Python 销毁给定的对象实例?从我所做的阅读看来,没有,当垃圾收集器没有看到对对象的引用时,它是由垃圾收集器决定的,但我认为无论如何都值得一问。
Anaconda Python 3.6 – pythonw和python应该是等价的吗?
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)
解决方法
简而言之,使用命令
conda install python.app
和pythonw将被安装.
dict独特组合Python列表
输入:
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到底有多快?
前几篇都是直接在命令上操作,然而执行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有多独特?
但是Laravel会话ID有多独特?我是否还应考虑其他因素,例如避免错误分组的时间?
更新:我调整了sql以将日期考虑在内:
select count(distinct session,DATE(created_at)) as aggregate from `article_views` where `article_id` = ? and `agent` NOT LIKE '%bot%'
解决方法
今天关于Python 的 id() 有多独特?和python的idx的分享就到这里,希望大家有所收获,若想了解更多关于Anaconda Python 3.6 – pythonw和python应该是等价的吗?、dict独特组合Python列表、MicroPython入坑记(三)板子上的Python到底有多快?、php – Laravel中的会话ID有多独特?等相关知识,可以在本站进行查询。
本文标签: