Python:定义相同类型的多个变量?

时间:2010-12-10 17:55:36

标签: python

可能是重复的,但至少通过搜索这些术语我找不到答案。

在Python中有更快的方法吗?

level1 = {}
level2 = {}
level3 = {}

我试过

level1 = level2 = level3 = {}

但这似乎创建了对象的副本,这不是我想要的。和

level1, level2, level3 = {}

抛出错误。

8 个答案:

答案 0 :(得分:16)

level1 = level2 = level3 = {}

不创建副本。它允许引用级别{1-3}到相同的对象。您可以改为使用列表理解:

level1, level2, level3 = [{} for dummy in range(3)]

或更具可读性:

level1, level2, level3 = {}, {}, {}

答案 1 :(得分:14)

您的变量命名可能是您的设计可以改进的标志。使用列表而不是三个单独的变量可能更好:

levels = [{}, {}, {}]

答案 2 :(得分:11)

你可以做到

level1, level2, level3 = {}, {}, {}

答案 3 :(得分:3)

level1, level2, level3, = {}, {}, {}

答案 4 :(得分:1)

我个人从不更改代码以在一行中挤出更多内容。我有三种不同的任务,每行一次。

但是,如果通过进行此类更改来记录性能改进,则这是另一回事。我只是不知道这些变化有任何性能改进。只是混淆。

答案 5 :(得分:0)

Python被解释为允许在运行时创建事物的定义。

def prefixed_range(prefix, start, stop=None, step=1):
    " Like xrange() but results are prefixed numeric strings. """
    prefix = str(prefix)
    if stop is None:
        start, stop = 0, start
    for i in xrange(start, stop, step):
        yield prefix + str(i)

def define_vars(names, value=None, namespace=None):
    namespace = globals() if not namespace else namespace
    factory = (lambda: value) if not callable(value) else value
    for name in names:
        namespace[name] = factory()

define_vars(prefixed_range('level', 1, 4), dict)

print 'level1: {}, level2: {}, level3: {}'.format(level1, level2, level3)
# level1: {}, level2: {}, level3: {}

答案 6 :(得分:0)

人们已经回答了你问题的意图,但是......

  

在Python中有更快的方法吗?

你的意思是什么?

我认为你真正的问题应该是“这样做的pythonic方式是什么?”

  

level1,level2,level3 = {}

来自Python documentation

  

元组由逗号运算符构造(不在方括号内),带或不带括号,但空元组必须有括号括起来,例如a,b,c或() 。单个项元组必须有一个尾随逗号,例如(d,)。

a,b,c隐含地(a,b,c)。这就是为什么你需要在右侧有一个3元组,正如其他海报(nils,sdolan,gunner)所建议的那样。

明确地显示他们暗示:

(level1, level2, level3) = ({}, {}, {},)

答案 7 :(得分:-1)

试试这个: 1级,级别2,级别3 = [{}] * 3