为什么执行startwith比切片慢?
In [1]: x = 'foobar'
In [2]: y = 'foo'
In [3]: %timeit x.startswith(y)
1000000 loops, best of 3: 321 ns per loop
In [4]: %timeit x[:3] == y
10000000 loops, best of 3: 164 ns per loop
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,即使包括计算长度,切片仍然显得更快:
In [5]: %timeit x[:len(y)] == y
1000000 loops, best of 3: 251 ns per loop
Run Code Online (Sandbox Code Playgroud)
注意:此行为的第一部分在Python for Data Analysis(第3章)中有说明,但没有提供解释.
.
如果有用:这是C代码startswith ; 这是输出dis.dis:
In [6]: import dis
In [7]: dis_it = lambda …Run Code Online (Sandbox Code Playgroud) 我想为每个模型使用唯一的哈希而不是ID.
我实现了以下功能,可以轻松地全面使用它.
import random,hashlib
from base64 import urlsafe_b64encode
def set_unique_random_value(model_object,field_name='hash_uuid',length=5,use_sha=True,urlencode=False):
while 1:
uuid_number = str(random.random())[2:]
uuid = hashlib.sha256(uuid_number).hexdigest() if use_sha else uuid_number
uuid = uuid[:length]
if urlencode:
uuid = urlsafe_b64encode(uuid)[:-1]
hash_id_dict = {field_name:uuid}
try:
model_object.__class__.objects.get(**hash_id_dict)
except model_object.__class__.DoesNotExist:
setattr(model_object,field_name,uuid)
return
Run Code Online (Sandbox Code Playgroud)
我正在寻求反馈,我怎么能这样做?我怎样才能改进它?有什么好坏和丑陋的?
我想创建一个包含200个不同值的一百万个键的字符串:
N = 1000000
uniques_keys = [pd.core.common.rands(3) for i in range(200)]
keys = [random.choice(uniques_keys) for i in range(N)]
Run Code Online (Sandbox Code Playgroud)
但是,出现以下错误
In [250]:import pandas as pd
In [251]:pd.core.common.rands(3)
Traceback (most recent call last):
File "<ipython-input-251-31d12e0a07e7>", line 1, in <module>
pd.core.common.rands(3)
AttributeError: module 'pandas.core.common' has no attribute 'rands'
Run Code Online (Sandbox Code Playgroud)
我使用的熊猫版本为0.18.0。