def my_function(fname):
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
def my_greeting(*fname):
print(fname + " Smith")
my_greeting("Don")
第一部分运行正常,第二部分崩溃。这是结果。
Emil Refsnes
Tobias Refsnes
Linus Refsnes
Traceback (most recent call last):
File "C:/Data/Python/turtleFun/kikiFunction.py", line 19, in <module>
my_greeting("Don")
File "C:/Data/Python/turtleFun/kikiFunction.py", line 17, in my_greeting
print(fname + " Smith")
TypeError: can only concatenate tuple (not "str") to tuple
我还没有创建元组,我不是要串联。结构相同,但一个运行,另一个崩溃。为什么Python 3.8.3认为我有一个元组?我该如何解决?元组将是
myTuple = ("Don", "Fred", "George", "Paul", "John", "Ringo")
*
旁边的*fname
总是使fname
成为一个元组。
让我们看看以*fname
作为参数的函数实际上是做什么的。
>>> def func(*fnames)
... print(fnames)
... print(type(fnames))
>>> func('str 1', 'str 2')
('str 1', 'str 2')
<class 'tuple'>
看看!即使像func
这样的似乎仅接受1个参数(*fnames
),即使使用2个参数('str 1'
和'str 2'
)进行调用,我们也不会出错。这是因为*
中的*fnames
允许将任意数量的参数(包括0!)传递给func
,并且所有这些参数都以1 tuple
]的形式传递。
这就是为什么,即使仅向函数传递1个参数
,fnames
仍采用tuple
的类型。在您的示例中:def my_greeting(*fname): print(fname) # let's not concatenate for now my_greeting('Don') # prints a tuple: ('Don',)
为什么当
*fnames
被赋予2个以上的参数时,Python为什么不只使用元组?
Python总是对*
类型的参数使用元组,以便我们的代码始终可以期望某种类型。否则,my_greeting('Don')
会将fnames
设置为str
,而my_greeting('Don', 'Don2')
会将fnames
设置为tuple
的str
。
我希望这可以帮助您学习!