小编Ray*_*ger的帖子

namedtuple和可选关键字参数的默认值

我正在尝试将一个冗长的空洞"数据"类转换为一个命名元组.我的班级目前看起来像这样:

class Node(object):
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
Run Code Online (Sandbox Code Playgroud)

转换为namedtuple它后看起来像:

from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Run Code Online (Sandbox Code Playgroud)

但这里有一个问题.我的原始类允许我传入一个值,并使用命名/关键字参数的默认值来处理默认值.就像是:

class BinaryTree(object):
    def __init__(self, val):
        self.root = Node(val)
Run Code Online (Sandbox Code Playgroud)

但是这对我重构的名为元组的情况不起作用,因为它希望我传递所有字段.当然,我可以代替的出现Node(val)Node(val, None, None),但它不是我的胃口.

所以确实存在着一个很好的技巧,它可以使我重新写成功无需添加大量的代码复杂度(元编程),或者我应该只吞下药丸,并与"查找和替换"继续前进?:)

python default-value optional-arguments namedtuple

265
推荐指数
11
解决办法
9万
查看次数

为什么引入无用的MOV指令会加速x86_64汇编中的紧凑循环?

背景:

在使用嵌入式汇编语言优化某些Pascal代码时,我注意到了一条不必要的MOV指令,并将其删除.

令我惊讶的是,删除不必要的指令会导致我的程序变慢.

我发现添加任意无用的MOV指令可以进一步提高性能.

效果不稳定,并且基于执行顺序进行更改:相同的垃圾指令向上或向下移动一行会产生减速.

我知道CPU会进行各种优化和精简,但这看起来更像是黑魔法.

数据:

我的代码版本有条件地在运行时间的循环中编译三个垃圾操作2**20==1048576.(周围的程序只计算SHA-256哈希值).

在我相当老的机器(英特尔(R)Core(TM)2 CPU 6400 @ 2.13 GHz)上的结果:

avg time (ms) with -dJUNKOPS: 1822.84 ms
avg time (ms) without:        1836.44 ms
Run Code Online (Sandbox Code Playgroud)

程序在循环中运行25次,每次运行顺序随机变化.

摘抄:

{$asmmode intel}
procedure example_junkop_in_sha256;
  var s1, t2 : uint32;
  begin
    // Here are parts of the SHA-256 algorithm, in Pascal:
    // s0 {r10d} := ror(a, 2) xor ror(a, 13) xor …
Run Code Online (Sandbox Code Playgroud)

optimization performance assembly freepascal x86-64

217
推荐指数
3
解决办法
3万
查看次数

元组比Python中的列表更有效吗?

在实例化和检索元素时,元组和列表之间是否存在性能差异?

python performance tuples list python-internals

201
推荐指数
7
解决办法
7万
查看次数

从文件中删除以#开头的所有行

文件中带有注释的所有行都以#.如何删除以#?开头的所有行(以及只有那些行)?#应忽略包含但不在行开头的其他行.

bash sed

164
推荐指数
6
解决办法
17万
查看次数

在Python中拆分空字符串时,为什么split()返回空列表而split('\n')返回['']?

split('\n')用来获取一个字符串中的行,并发现''.split()返回一个空列表[],同时''.split('\n')返回[''].有这种差异的具体原因吗?

有没有更方便的方法来计算字符串中的行?

python string algorithm parsing split

134
推荐指数
4
解决办法
5万
查看次数

如何在Python中有效地比较两个无序列表(不是集合)?

a = [1, 2, 3, 1, 2, 3]
b = [3, 2, 1, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

a&b应该被认为是相同的,因为它们具有完全相同的元素,只是顺序不同.

问题是,我的实际列表将包含对象(我的类实例),而不是整数.

python algorithm comparison list

123
推荐指数
6
解决办法
6万
查看次数

2套联盟不包含所有物品

为什么当我改变下面工会中两套的顺序时,我会得到不同的结果?

set1 = {1, 2, 3}
set2 = {True, False}

print(set1 | set2)
# {False, 1, 2, 3}

print(set2 | set1)
#{False, True, 2, 3}
Run Code Online (Sandbox Code Playgroud)

python set equivalence-classes python-3.x

94
推荐指数
3
解决办法
5161
查看次数

如何在Python中将布尔值连接到字符串?

我想完成以下任务

answer = True
myvar = "the answer is " + answer
Run Code Online (Sandbox Code Playgroud)

并且myvar的值是"答案是真的".我很确定你可以用Java做到这一点.

python string casting boolean concatenation

68
推荐指数
3
解决办法
10万
查看次数

pickle文件的首选(或最常见)文件扩展名?

这是一个学生的问题,我没有得到一个好的答案.有时,我见过.pickle,.pck,.pcl,和.db对于包含Python的泡菜,但我不能确定什么是最常见的或最佳实践文件.我知道后三个扩展也用于其他事情.

相关问题是在使用REST API的系统之间发送pickle的首选MIME类型是什么?

python rest filenames pickle mime-types

57
推荐指数
1
解决办法
2万
查看次数

如何制作一个python字典,返回字典中缺少键的键,而不是引发KeyError?

我想创建一个python字典,它返回字典中缺少键的键值.

用法示例:

dic = smart_dict()
dic['a'] = 'one a'
print(dic['a'])
# >>> one a
print(dic['b'])
# >>> b
Run Code Online (Sandbox Code Playgroud)

python dictionary data-structures dictionary-missing

54
推荐指数
5
解决办法
2万
查看次数