提问人:Zach Joseph 提问时间:2/22/2023 最后编辑:Zach Joseph 更新时间:2/22/2023 访问量:216
python 中使用元组关键字与括号进行初始化 [已关闭]
Initialization with tuple keyword vs parenthesis in python [closed]
问:
这个问题是关于设计和可读性的,而不是性能的:
使用元组关键字初始化元组还是仅使用括号初始化元组更像 python?两者都做同样的事情,但显式键入更冗长。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)
矛盾的是,我知道在没有显式的情况下初始化列表更为常见;y 类型: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。
答:
2赞
nickie
2/22/2023
#1
除了人们可能对你的问题给出的主观答案之外,你提供的代码中还有一些错误(见本答案的末尾)。
IMO,并且不用于通过枚举元组和列表的元素来构造元组和列表。为此,请分别使用括号和括号:tuple
list
t = (1, 2, 3)
l = [1, 2, 3]
事实上,在定义元组时,括号不是必需的:
t = 1, 2, 3
但我认为如果你使用括号,它会更清楚。
特别要注意的是带有一个元素的元组的情况,其中必须使用尾随逗号(在右括号之前)。
t = (42,)
l = [42]
对列表做同样的事情并没有什么坏处,一般来说,在列表和元组中都有尾随逗号也没有什么坏处;但是对于一个元素的元组,逗号是必需的。
and 的用处是用于从其他可迭代对象(生成器、元组、列表等)构造元组和列表,例如tuple
list
t = tuple(i**2 for i in range(10))
l = list(range(100))
对于列表,在可能的情况下,列表推导式可以说是可取的:
l1 = list(i**2 for i in range(10))
l2 = [i**2 for i in range(10)] # this is preferable
另请注意,代码中有三行是错误的:
mytuple = (myarg)
除非已经是元组,否则不构造元组;这些只是括号。myarg
mytuple = tuple(1, 2, 3, 4)
引发一个 .TypeError
list[1, 2, 3, 4]
不是一个列表,只需使用括号(有趣的是,这是合法的语法,如上面的评论中所述,但这是题外话)。
如果您坚持使用单词并在枚举元素时,这里(一个版本)是正确的语法:tuple
list
t = tuple([1, 2, 3])
l = list([1, 2, 3])
评论
list[1, 2, 3, 4]
Python 语法无效tuple(1, 2, 3, 4)
(1, 2, 3, 4)
(myarg)
根本没有定义元组;它只是一个带括号的表达式,因此首先会分配传递给的任何值:可以是列表、元组、字典、生成器,以及任何被认为是可迭代的。mytuple
myfunc
()
list[1, 2, 3, 4]