这个问题是关于设计和可读性的,而不是性能:
使用 tuple 关键字或仅使用括号初始化元组是否更符合 pythonic?两者做同样的事情,但显式键入
tuple
更冗长。
这里有两个不同的元组初始化案例。
def myfunc(myarg: Iterable):
# "tuple" is explicitly typed out
mytuple = tuple(myarg)
def myfunc(myarg: Iterable):
# "tuple" is not explicitly typed out; only parenthesis are used
mytuple = (myarg)
# "tuple" is explicitly typed out
mytuple = tuple(1, 2, 3, 4)
# "tuple" is not explicitly typed out; only parenthesis are used
mytuple = (1, 2, 3, 4)
矛盾的是,我知道在没有显式输入的情况下初始化列表更常见
list
:
mylist = [1, 2, 3, 4] # "list" is not explicitly typed out; only brackets are used
# Rather than:
mylist = list[1, 2, 3, 4] # "list" is explicitly typed out
就个人而言,我总是明确地键入元组,以便更容易看到正在初始化的元组。然而,这与我初始化列表的风格(这是更流行的风格)相矛盾(没有明确输入列表。
总而言之,我想知道哪种初始化元组的方式更pythonic。
除了可能对您的问题给出的主观答案外,您提供的代码中还有一些错误(请参阅此答案的末尾)。
IMO、
tuple
和 list
不适用于通过枚举其元素来构造元组和列表。为此,请分别使用圆括号和方括号:
t = (1, 2, 3)
l = [1, 2, 3]
特别注意只有一个元素的元组的情况,需要在右括号前包含一个逗号:
t = (42,)
l = [42]
tuple
和 list
的用处是从可迭代对象、生成器等构造元组和列表,例如
t = tuple(i**2 for i in range(10))
l = list(range(100))
还要注意你的代码中有三行是错误的:
mytuple = (myarg)
不构造元组,除非 myarg
已经是一个元组;这些只是括号mytuple = tuple(1, 2, 3, 4)
提出TypeError
.list[1, 2, 3, 4]
不是列表,只需使用括号(有趣的是,这是合法的语法,但它是题外话)。