我通过在函数调用后加逗号来引入我的脚本中的错误。在这里,我将以一个愚蠢的示例进行说明:
def uppered(my_string):
return my_string.upper()
foo = uppered("foo")
print(foo)
这将按预期返回字符串:
FOO
但是,如果我更改了脚本,以便在函数调用之后以逗号开头时调用函数,如下所示:
foo = uppered("foo"),
然后我得到一个元组(!):
('FOO',)
这对我来说似乎很奇怪-我希望解释器返回SyntaxError(如果我有两个逗号而不是一个逗号,就会这样做)。有人可以告诉我这里的逻辑是什么,以及在哪里可以找到有关此行为的更多信息。我的Google-fu让我失望了,这个非常具体的细节。
因为您创建了一个元组。
foo = uppered("foo"),
相当于:
foo = (uppered("foo"),)
创建单个元素元组,显然等同于
foo = ('FOO',)
Python中的字符串可以写成:
my_tuple = ()
或:
my_tuple = (1, 2)
或:
my_tuple = 1, 2
不相信我吗?好吧:
>>> my_tuple = 1,
>>> my_tuple
(1,)
嗯,这就是Python语法的工作方式。值后的单个逗号将创建一个以该值作为第一个也是唯一元素的元组。请参阅this问题的答案以进行更广泛的讨论。
想象有一对省略的括号:
foo = (uppered("foo"),)
为什么?它是这样写的:
stuff = foo(), bar(), baz()
# More code here
for thing in stuff:
您可以使用一对括号(并且您确实需要其他语言的括号),但是Python的美学要求语法要尽可能简短明了。逗号作为分隔符是必需的,但括号实际上不是必需的。表达式开始到行尾之间的所有内容(或:
,或者在生成器或理解的情况下,位于圆括号/方括号中)都应作为创建的元组的元素。对于一个元素元组,此语法应理解为“此内容的元组,仅此而已”,因为逗号和行尾之间没有任何内容。
您可以使用.join()函数。它返回与元组的元素。
g = tuple('FOO')
k = ''
K = k.join(g)
print(K)
print(type(K))
FOO
class'str'