我在函数调用后输入逗号,在我的脚本中引入了一个错误。在这里,我将用一个愚蠢的例子说明:
def uppered(my_string):
return my_string.upper()
foo = uppered("foo")
print(foo)
按预期返回一个字符串:
FOO
但是,如果我更改脚本以便在函数调用后使用逗号追加函数,如下所示:
foo = uppered("foo"),
然后我得到一个元组(!):
('FOO',)
这对我来说似乎很奇怪 - 我本来希望解释器返回一个SyntaxError(就像我有两个逗号而不是一个逗号一样)。有人可以告诉我这里的逻辑是什么,以及在哪里可以找到有关此行为的更多信息。我的google-fu让我了解这个非常具体的细节。
答案 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'