yieldPython中关键字的用途是什么?它有什么作用?
例如,我试图理解这段代码1:
def _get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
Run Code Online (Sandbox Code Playgroud)
这是来电者:
result, candidates = [], [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)
_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?
1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.
在Python中,生成一些随机文本以预先添加到我保存到服务器的文件(名称)的最佳方法是什么,只是为了确保它不会覆盖.谢谢!
我这样做是为了测试randint的随机性:
>>> from random import randint
>>>
>>> uniques = []
>>> for i in range(4500): # You can see I was optimistic.
... x = randint(500, 5000)
... if x in uniques:
... raise Exception('We duped %d at iteration number %d' % (x, i))
... uniques.append(x)
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
Exception: We duped 887 at iteration number 7
Run Code Online (Sandbox Code Playgroud)
我尝试了大约10倍以上,我得到的最好结果是在转发器之前迭代了121次.这是您从标准库中获得的最佳结果吗?
我正在寻找一种非常快速的方法来为表中的主键生成字母数字唯一ID.
会这样的吗?
def genKey():
hash = hashlib.md5(RANDOM_NUMBER).digest().encode("base64")
alnum_hash = re.sub(r'[^a-zA-Z0-9]', "", hash)
return alnum_hash[:16]
Run Code Online (Sandbox Code Playgroud)
什么是产生随机数的好方法?如果我以microtime为基础,我必须考虑从不同实例同时调用genKey()的几次.
或者有更好的方法来做这一切吗?
例如,它可以用于生成一次性密钥键吗?
此外,它的来源是什么,它如何用于生成x和y之间的随机数?
可能重复:
使用大写字母和数字生成python随机字符串
如何在Python中生成长度为X az的String?
我想要的是为我的网站上的用户生成大小为5的字符串(键).更像是BBM PIN.
密钥将包含数字和大写英文字母:
即使我生成数百万字符串,我怎么能对字符串的唯一性保持静止?
尽可能以最蟒蛇的方式,我该怎么做?
我希望一个模型在我创建一个新的实例时自动生成一个随机的字母数字字符串作为其主键.
例:
from django.db import models
class MyTemporaryObject(models.Model):
id = AutoGenStringField(lenght=16, primary_key=True)
some_filed = ...
some_other_field = ...
Run Code Online (Sandbox Code Playgroud)
在我看来,键应该看起来像这样的"Ay3kJaBdGfcadZdao03293".这是非常临时使用的.如果发生碰撞,我希望Django尝试新密钥.
我想知道是否已经存在某些东西,或者我没有看到的一个非常简单的解决方案(我对python和Django来说相当新).否则我想做我自己的版本models.AutoField,这是正确的方法吗?
我已经找到了如何在这里生成密钥,因此它不是关于字符串生成的.我只想让它与简单的Django服务无缝协作,而不会给代码增加太多的复杂性.
编辑:可能的解决方案?你怎么看?
id = models.CharField(unique=True, primary_key=True, default=StringKeyGenerator(), editable=False)
Run Code Online (Sandbox Code Playgroud)
同
class StringKeyGenerator(object):
def __init__(self, len=16):
self.lenght = len
def __call__(self):
return ''.join(random.choice(string.letters + string.digits) for x in range(self.lenght))
Run Code Online (Sandbox Code Playgroud)
在再次浏览Django文档之后我想出了它.
我正在尝试创建一个pandas系列.
该系列的一列应包含n个连续数字. [1, 2, 3, ..., n]
一列应包含k和之间的随机数k+100.
一列应包含列表中字符串之间的随机选择. ['A', 'B', 'C', ... 'Z']
这可能是一个愚蠢的问题,但我不明白字符串模块中string.uppercase和string.ascii_uppercase之间的区别.打印两个函数的docstring打印相同的东西.甚至输出print string.uppercase和print string.ascii_uppercase相同.
谢谢.