它可以让您决定要传递的参数,而不管它在函数声明中出现的顺序或有多少其他参数(假设它们具有默认值)。
当你调用一个带有多个参数的函数时,通常情况下,它会按照它们被声明的顺序来接受这些参数。指定您尝试传递的参数允许您忽略该顺序并在任何位置传递任何参数。
例如,假设我们有一个简单的函数,它返回格式化的当前进程 ID,它只需要一个前缀和一个后缀,并将进程 ID 放在中间:
import os
def format_pid(prefix="", sufix=""):
return f"{prefix}{os.getpid()}{sufix}"
现在,如果我这样调用该函数:
print(format_pid(" before ", " after "))
它会像你期望的那样工作并输出:
before 458496 after
但是如果我指定我要使用的参数,我实际上可以让它以相反的顺序获取参数:
print(format_pid(sufix=" before ", prefix=" after "))
输出:
after 458496 before
但是当你有一个可以接受多个参数但你只想传递一个参数的函数时,它的真正用处就来了。例如,如果我这样做:
print(format_pid(" -- "))
它会自动将该参数视为前缀:
-- 458496
但如果我想让它成为后缀,我可以这样做:
print(format_pid(sufix=" -- "))
输出:
458496 --
这可能看起来微不足道,但这实际上是一个救星把一些可选的放在最后(一开始它会迫使用户每次都通过它们)。
一个很好的例子是古老的print 函数。看看它的声明:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
它有四个我们几乎不担心的可选参数,除了我们真正想要更改它们的更具体的情况,在这种情况下,我们在函数调用中指定一个:
print("I am fine", "What about you", sep=". ", end="?\n")
输出:
I am fine. What about you?