在 python 中使用元组关键字与括号进行初始化

问题描述 投票:0回答:1

这个问题是关于设计和可读性的,而不是性能:

使用 tuple 关键字或仅使用括号初始化元组是否更符合 pythonic?两者做同样的事情,但显式键入

tuple
更冗长。

这里有两个不同的元组初始化案例。

  1. 来自现有的可迭代
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)
  1. 从文字创建新元组
# "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。

python syntax tuples standards readability
1个回答
0
投票

除了可能对您的问题给出的主观答案外,您提供的代码中还有一些错误(请参阅此答案的末尾)。

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))

还要注意你的代码中有三行是错误的:

  1. mytuple = (myarg)
    不构造元组,除非
    myarg
    已经是一个元组;这些只是括号
  2. mytuple = tuple(1, 2, 3, 4)
    提出
    TypeError
    .
  3. list[1, 2, 3, 4]
    不是列表,只需使用括号(有趣的是,这是合法的语法,但它是题外话)。
© www.soinside.com 2019 - 2024. All rights reserved.