在Python中,assert是一个语句,而不是一个函数.这是一个刻意的决定吗?assert成为一个声明(和保留字)而不是一个函数有什么好处吗?
根据该 文件,assert expression1, expression2扩大到
if __debug__:
if not expression1: raise AssertionError(expression2)
Run Code Online (Sandbox Code Playgroud)
文档还说"当编译时请求优化时,当前代码生成器不会为assert语句发出代码." 在不知道细节的情况下,似乎需要一个特殊情况才能实现这一目标.但是,一个特殊情况也可用于优化对assert()函数的调用.
如果assert是一个函数,你可以写:
assert(some_long_condition,
"explanation")
Run Code Online (Sandbox Code Playgroud)
但因为assert是一个声明,元组总是评估True,你得到
SyntaxWarning: assertion is always true, perhaps remove parentheses?
Run Code Online (Sandbox Code Playgroud)
写它的正确方法是
assert some_long_condition, \
"explanation"
Run Code Online (Sandbox Code Playgroud)
这可能不那么漂亮了.
假设我有一个模型,Box一个GenericForeignKey指向任何一个Apple实例或Chocolate实例.Apple而Chocolate反过来,有ForeignKeys来Farm和Factory,分别.我想显示一个Boxes 列表,我需要访问Farm它Factory.如何在尽可能少的数据库查询中执行此操作?
最小的说明性示例:
class Farm(Model):
...
class Apple(Model):
farm = ForeignKey(Farm)
...
class Factory(Model):
...
class Chocolate(Model):
factory = ForeignKey(Factory)
...
class Box(Model)
content_type = ForeignKey(ContentType)
object_id = PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
...
def __unicode__(self):
if self.content_type == ContentType.objects.get_for_model(Apple):
apple = self.content_object
return "Apple {} from Farm {}".format(apple, apple.farm)
elif self.content_type == ContentType.objects.get_for_model(Chocolate):
chocolate = self.content_object
return …Run Code Online (Sandbox Code Playgroud) 我有一个N 64位整数列表,其位代表小集.每个整数最多有k位设置为1.给定位掩码,我想找到列表中与掩码匹配的第一个元素,即element & mask == element.
例:
如果我的列表是:
index abcdef
0 001100
1 001010
2 001000
3 000100
4 000010
5 000001
6 010000
7 100000
8 000000
Run Code Online (Sandbox Code Playgroud)
而我的掩码是111000,与掩码匹配的第一个元素是索引2.
方法1:
线性搜索整个列表.这需要O(N)时间和O(1)空间.
方法2:
预先计算所有可能掩码的树,并在每个节点保留该掩码的答案.这需要O(1)时间进行查询,但需要O(2 ^ 64)空间.
题:
如何在比O(N)更快的时间内找到与掩模匹配的第一个元素,同时仍然使用合理的空间量?我可以在预计算中花费多项式时间,因为会有很多查询.关键是k很小.在我的应用程序中,k <= 5且N为数千.面具有很多1; 你可以假设它是从64位整数的空间中均匀绘制的.
更新:
这是一个示例数据集和一个在Linux上运行的简单基准程序:http://up.thirld.com/binmask.tar.gz.对于large.in,N = 3779且k = 3.第一行是N,后跟N个无符号的64位整数,表示元素.编译make.运行./benchmark.e >large.out以创建真正的输出,然后您可以对其进行区分.(掩码是随机生成的,但随机种子是固定的.)然后find_first() …
我有一个保存在本地文件中的证书(例如这个).openssl从命令行使用,如何显示从此证书到根CA的整个链?我试过了:
openssl verify -verbose -purpose sslserver -CApath /etc/ssl/certs InCommonServerCA.txt
Run Code Online (Sandbox Code Playgroud)
得到这个令人困惑的输出,似乎只显示叶证书:
InCommonServerCA.txt: C = US, O = Internet2, OU = InCommon, CN = InCommon Server CA
error 26 at 0 depth lookup:unsupported certificate purpose
OK
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试优化Django应用程序的数据库查询.这是一个简化的例子:
class Label(models.Model):
name = models.CharField(max_length=200)
# ... many other fields ...
class Thing(models.Model):
name = models.CharField(max_length=200)
labels = models.ManyToManyField(Label)
Run Code Online (Sandbox Code Playgroud)
我有一个函数可以获取所有Labels和Things并将它们放入JSON数据结构中,其中s使用s(主键)Thing引用Labels id.像这样的东西:
{
'labels': [
{ 'id': 123, 'name': 'label foo' },
...
],
'things': [
{ 'id': 45, 'name': 'thing bar', 'labels': [ 123, ... ] },
...
]
}
Run Code Online (Sandbox Code Playgroud)
使用Django获得这种数据结构的最有效方法是什么?假设我有L Label s和T Thing s,平均值Thing为x Label s.
方法1:
data = {}
data['labels'] = [model_to_dict(label) for …Run Code Online (Sandbox Code Playgroud) 我有一个任意的NxM矩阵,例如:
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 0 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
我想得到这个矩阵中所有3x3子矩阵的列表:
1 2 3 2 3 4 0 1 2
7 8 9 ; 8 9 0 ; ... ; 6 7 8
3 4 5 4 5 6 2 3 4
Run Code Online (Sandbox Code Playgroud)
我可以用两个嵌套循环来做到这一点:
rows, cols = input_matrix.shape
patches = []
for row in np.arange(0, rows - 3):
for col in np.arange(0, cols - 3):
patches.append(input_matrix[row:row+3, …Run Code Online (Sandbox Code Playgroud) optimization ×3
python ×3
django ×2
algorithm ×1
assert ×1
bitmask ×1
certificate ×1
database ×1
foreign-keys ×1
matrix ×1
numpy ×1
openssl ×1
search ×1
ssl ×1