Python 辩论通过问题

Python 辩论通过问题,python,python-3.x,Python,Python 3.x,下面是我正在执行的函数: def concat(*args, sep='/'): return sep.join(args) 当我尝试传递下面的参数时,它会正确执行 >>> concat('earth', 'mars', 'venus') 输出: “地球/火星/金星” 但当我通过下面的论证时,我在最后得到了一个额外的点为什么 >>> concat('earth', 'mars', 'venus', ".") 输出:“地球/火星/金星/” 是的,我

下面是我正在执行的函数:

def concat(*args, sep='/'):
    return sep.join(args)
当我尝试传递下面的参数时,它会正确执行

>>> concat('earth', 'mars', 'venus')
输出: “地球/火星/金星”

但当我通过下面的论证时,我在最后得到了一个额外的点为什么

>>> concat('earth', 'mars', 'venus', ".")
输出:“地球/火星/金星/”


是的,我知道在*args参数之后,我们必须使用'keyword only'参数,但我的问题是,如果是这种情况,为什么它没有给出任何错误。为什么要在末尾加一个点?

在这种情况下,必须显式地命名要传递的参数

concat('earth', 'mars', 'venus', sep=".")

顺便说一句,这是Python 3的
print()
的工作方式。

因为它将“.”视为要连接的
arg之一,而不是分隔符。如果要更改分隔符,请将
作为
sep=”
而不是:
concat('earth'、'mars'、'venus',sep=”)
您还期望什么?为什么使用3个或4个参数会有什么不同?