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

时间:2017-02-15 07:19:33

标签: python syntax

我在函数调用后输入逗号,在我的脚本中引入了一个错误。在这里,我将用一个愚蠢的例子说明:

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

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

按预期返回一个字符串:

FOO

但是,如果我更改脚本以便在函数调用后使用逗号追加函数,如下所示:

foo = uppered("foo"),

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

('FOO',)

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

4 个答案:

答案 0 :(得分:1)

因为你创建了一个元组。

foo = uppered("foo"), 

相当于:

foo = (uppered("foo"),)

这创建了一个单元组元组,显然相当于

foo = ('FOO',)

答案 1 :(得分:0)

Python中的元组可以写成:

my_tuple = ()

或:

my_tuple = (1, 2)

或:

my_tuple = 1, 2

不相信我?良好:

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

答案 2 :(得分:0)

嗯,这就是Python语法的工作原理。值后面的单个逗号将创建一个元组,并将此值作为第一个也是唯一的元素。有关更广泛讨论的问题,请参阅this问题的答案。

想象一下,有一对省略的括号:

foo = (uppered("foo"),)

为什么这样?它写得像这样:

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

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

答案 3 :(得分:0)

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

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

FOO

类'str'