Python语法:函数调用后的逗号

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

我通过在函数调用后加逗号来引入我的脚本中的错误。在这里,我将以一个愚蠢的示例进行说明:

def uppered(my_string):
    return my_string.upper()

foo = uppered("foo")
print(foo)

这将按预期返回字符串:

FOO

但是,如果我更改了脚本,以便在函数调用之后以逗号开头时调用函数,如下所示:

foo = uppered("foo"),

然后我得到一个元组(!):

('FOO',)

这对我来说似乎很奇怪-我希望解释器返回SyntaxError(如果我有两个逗号而不是一个逗号,就会这样做)。有人可以告诉我这里的逻辑是什么,以及在哪里可以找到有关此行为的更多信息。我的Google-fu让我失望了,这个非常具体的细节。

python syntax
4个回答
1
投票

因为您创建了一个元组。

foo = uppered("foo"), 

相当于:

foo = (uppered("foo"),)

创建单个元素元组,显然等同于

foo = ('FOO',)

0
投票

Python中的字符串可以写成:

my_tuple = ()

或:

my_tuple = (1, 2)

或:

my_tuple = 1, 2

不相信我吗?好吧:

>>> my_tuple = 1,
>>> my_tuple
(1,)

0
投票

嗯,这就是Python语法的工作方式。值后的单个逗号将创建一个以该值作为第一个也是唯一元素的元组。请参阅this问题的答案以进行更广泛的讨论。

想象有一对省略的括号:

foo = (uppered("foo"),)

为什么?它是这样写的:

stuff = foo(), bar(), baz()
# More code here
for thing in stuff:

您可以使用一对括号(并且您确实需要其他语言的括号),但是Python的美学要求语法要尽可能简短明了。逗号作为分隔符是必需的,但括号实际上不是必需的。表达式开始到行尾之间的所有内容(或:,或者在生成器或理解的情况下,位于圆括号/方括号中)都应作为创建的元组的元素。对于一个元素元组,此语法应理解为“此内容的元组,仅此而已”,因为逗号和行尾之间没有任何内容。


0
投票

您可以使用.join()函数。它返回与元组的元素。

g = tuple('FOO') k = '' K = k.join(g) print(K) print(type(K))

FOO

class'str'

© www.soinside.com 2019 - 2024. All rights reserved.