Python为什么认为这是一个元组? [重复]

问题描述 投票:2回答:1
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")
python
1个回答
5
投票

问题

*旁边的*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设置为tuplestr

我希望这可以帮助您学习!

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