小编max*_*max的帖子

创建namedtuple时,避免两次输入键入名称

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指出进口将失败.那不好.所以让我重新解释一下我的问题:最好的方法是什么?还是不值得?

python namedtuple

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

我应该在模板函数中按const引用还是按值传递?

当选择按const引用传递还是按值传递时,对于大型类来说,选择似乎很清楚:必须使用constref避免昂贵的副本,因为仅在有限的情况下(如果副本构造函数没有副作用,或者如果副本来自一个右值)。

对于较小的类,按值传递似乎更具吸引力:

  • 就像取消引用一样快
  • 避免混叠(易错且对性能不利,因为它会迫使编译器更加保守)
  • 如果仍然需要复制,它将使复制在编译器可以使用复制省略的范围内

那么编写模板函数时的最佳实践是什么,而参数的类是大还是小并不总是很明显?

c++

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

使用pickle.dumps来散列可变对象

我理解为什么将可变对象放在字典中是危险的.但是,将所有列表/集转换为元组/ frozensets是昂贵的; 对于许多类型,根本没有容易获得的不可变版本.因此,有时可能需要直接对可变对象进行哈希处理,并采取适当的预防措施以确保永远不会修改相关对象.

在我开始为可变对象实现非常复杂的自定义散列函数之前,我想检查使用pickle.dumps散列函数是否有任何缺点- 无论是在性能还是碰撞方面还是其他任何方面.

python hash python-3.x

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

从 library/postgres 保存数据库状态

我知道我可以将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/datapostgres Dockerfile执行后写入的任何内容都会VOLUME /var/lib/postgresql/data消失?

似乎VOLUME …

docker

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

引用成员从按值构造函数参数初始化

在什么条件下这个代码是正确的:

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之前的任何事都不感兴趣.)

c++ initialization reference c++11 c++14

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

当内存不是问题时,可以`dict`替换`list`吗?

我可以将任何列表表示为字典,其键是有效列表索引,其值是列表的项.例如,[5, 6, 'a']将表示为{0:5, 1:6, 2:'a'}.

就渐近时间和记忆复杂度而言,dict表示与...相同list.list通过常数因子使用较少的内存.

如果内存不是问题,我是否总是可以使用dict而不是列表和其他序列(以获得使用任意键的灵活性,并通过减少使用的不同容器的数量来略微标准化代码)?

python containers built-in-types python-3.x

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