namedtuple创建通常需要输入两次名称,一次提供包含新类的模块级变量的名称,一次设置__name__新类的属性(用于打印类对象,我认为主要用于调试,日志记录,等等.).
除了稍微出乎意料之外,使用函数(new_namedtuple下面)减少样板代码是否有任何缺点?并使用globals()正确或应该使用exec?当然,它只适用于我们希望类名和变量名相同的情况:
>>> from collections import namedtuple
>>> def new_namedtuple(name, *args, **kwargs):
... globals()[name] = namedtuple(name, *args, **kwargs)
...
>>> new_namedtuple('Point', 'x y')
>>> p = Point(x=1, y=10)
>>> p
Point(x=1, y=10)
Run Code Online (Sandbox Code Playgroud)
编辑:@Moinuddin Quadri指出进口将失败.那不好.所以让我重新解释一下我的问题:最好的方法是什么?还是不值得?
我理解为什么将可变对象放在字典中是危险的.但是,将所有列表/集转换为元组/ frozensets是昂贵的; 对于许多类型,根本没有容易获得的不可变版本.因此,有时可能需要直接对可变对象进行哈希处理,并采取适当的预防措施以确保永远不会修改相关对象.
在我开始为可变对象实现非常复杂的自定义散列函数之前,我想检查使用pickle.dumps散列函数是否有任何缺点- 无论是在性能还是碰撞方面还是其他任何方面.
我知道我可以将postgres图像的默认文件夹更改为指向一个卷 - 在这种情况下,显然该卷将持续存在。但我没有这样做,因为我想了解这个图像的默认行为。
所以我只是跑了:
# in one terminal
docker pull postgres
# as a foreground process:
docker run -P --name dev_db postgres
# in another terminal
docker run --rm -it --link dev_db:dev_db /bin/bash
# in this container, I created some databases and added some data to them
# then:
# docker stop dev_db
# docker commit -m "Add data" dev_db postgres_with_data
Run Code Online (Sandbox Code Playgroud)
我以为结果,新图像postgres_with_data将包含我添加的数据;但事实并非如此。提交容器时不应该保存吗?如果没有,它去了哪里,我该如何保存?
感谢您的回答。因此,如果我理解正确,当我停止容器时,/var/lib/postgresql/data在postgres Dockerfile执行后写入的任何内容都会VOLUME /var/lib/postgresql/data消失?
但似乎VOLUME …
在什么条件下这个代码是正确的:
struct A {
A(B b) : b_(b) {}
private:
const B& b_;
}
B b_permanent;
A a(b_permanent);
Run Code Online (Sandbox Code Playgroud)
IIUC,b将是一个副本b_permanent,并且b_将被绑定到该副本.但是它的寿命是b多少?如果它只是在ctor的持续时间内,则这是错误的,因为b_在ctor完成时将被绑定到超出范围的对象.如果是这样的话,为什么它在C++中甚至是合法的,甚至不会引起lint警告?
OTOH,如果b寿命延长到等于生命周期a,那么你可以将我链接到一条规则吗?
答案取决于B基本类型还是复合类型?
答案取决于C++ 11 vs 14 vs 17?(我对11之前的任何事都不感兴趣.)
我可以将任何列表表示为字典,其键是有效列表索引,其值是列表的项.例如,[5, 6, 'a']将表示为{0:5, 1:6, 2:'a'}.
就渐近时间和记忆复杂度而言,dict表示与...相同list.list通过常数因子使用较少的内存.
如果内存不是问题,我是否总是可以使用dict而不是列表和其他序列(以获得使用任意键的灵活性,并通过减少使用的不同容器的数量来略微标准化代码)?
python ×3
c++ ×2
python-3.x ×2
c++11 ×1
c++14 ×1
containers ×1
docker ×1
hash ×1
namedtuple ×1
reference ×1