小编Don*_*ion的帖子

python:dict作为另一个dict的原型/模板 - std.lib解决这个问题的方法?

我正在寻找一种方法来创建一个字典的多个临时副本来保存一些"进化状态",只有轻微的世代偏差,并发现这个小原型字典:

class ptdict(dict):
    def asprototype(self, arg=None, **kwargs):
        clone = self.__class__(self.copy())
        if isinstance(arg, (dict, ptdict)):
            clone.update(arg)
        clone.update(self.__class__(kwargs))        
        return clone
Run Code Online (Sandbox Code Playgroud)

基本上我想要smth.喜欢:

generation0 = dict(propertyA="X", propertyB="Y")
generations = [generation0]

while not endofevolution():
    # prev. generation = template for next generation:
    nextgen = generations[-1].mutate(propertyB="Z", propertyC="NEW")  
    generations.append(nextgen)
Run Code Online (Sandbox Code Playgroud)

等等.

我想知道,如果这个班级的作者和我错过了什么,因为我无法想象,没有标准库方法.但是收藏品和itertools似乎都没有提供类似的简单方法.

可以用itertools.tee完成这样的事情吗?

更新:这不是复制和更新的问题,因为,这正是这个ptdict正在做的事情.但是使用update不会返回dtd,ptdict会这样做,所以我可以举例说明链式结果或进行就地测试,这样可以提高可读性.(我提供的例子可能有点微不足道,但我不想与大矩阵混淆.)

我为不够精确而道歉.也许下面的例子澄清了为什么我有兴趣获得一个单一副本/更新步骤的字典:

nextgen = nextgen.mutate(inject_mutagen("A")) if nextgen.mutate(inject_mutagen("A")).get("alive") else nextgen.mutate(inject_mutagen("C"))
Run Code Online (Sandbox Code Playgroud)

python

1
推荐指数
1
解决办法
548
查看次数

当使用"pyfile s:pyscript"时,似乎vim不会将"s:pyscript"解释为变量

vim脚本文件通过以下方式调用python脚本:

let s:pyscript = resolve(expand('<sfile>:p:h:h')) . '/pyscript/deploy.py'

echom "sourcing " . s:pyscript
pyfile s:pyscript
Run Code Online (Sandbox Code Playgroud)

echom-command向我显示正确文件的扩展点,但以下pyfile s:pyscript结果是错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
IOError: [Errno 2] file or directory not found: '&s:pyscript' 
Run Code Online (Sandbox Code Playgroud)

让我得出结论,pyfile之后的所有内容都被立即视为"python",而vim不会评估s:pyscript变量.

它的方法是什么?无论是在python脚本还是vim-"master"脚本都可以.

python vim

1
推荐指数
1
解决办法
491
查看次数

使用字符串列表映射`string.join`会返回未检测到的字符串列表

我尝试了以下说明:

>>> values ['9', '31', '32']
>>> map('abc'.join, values)
and got:
['9', '3abc1', '3abc2']
Run Code Online (Sandbox Code Playgroud)

但我希望:

['abc9', 'abc31', 'abc32']
Run Code Online (Sandbox Code Playgroud)

为什么我弄错了?

只是为了记录我绕过它:

>>> map(lambda x: 'abc%s' % x, values)
Run Code Online (Sandbox Code Playgroud)

但我仍然对第一个地图构造的行为感到困惑!

感谢所有有见地的答案.他们都是正确和有帮助的,所以我不得不扔骰子选择接受哪个 - 我会接受他们中的任何一个;-)

python string list python-2.6

0
推荐指数
1
解决办法
88
查看次数

Python使用列表会对性能产生影响吗?

这可能看起来像一个愚蠢的问题,但我有一个400,000个项目的列表,其性能似乎与列表中的100个项目相同.在我看来,你只限于你可能拥有的RAM量,以及列表的最大大小?

再具体一点:

  1. 如果我要搜索此列表(item in bigList)是否有性能影响?
  2. 如果我在这400,000个项目列表中附加说200,000个项目,会不会有性能影响?
  3. 如果我遍历列表中的每个项目,是否只有性能损失?
  4. 如果使用列表中有性能命中,那么典型的最大大小是多少?

python performance list

-2
推荐指数
1
解决办法
156
查看次数

标签 统计

python ×4

list ×2

performance ×1

python-2.6 ×1

string ×1

vim ×1