我正在浏览这个代码文件,然后我找到了这个类:
class StreamPlaylistEntry(BasePlaylistEntry):
def __init__(self, playlist, url, title, *, destination=None, **meta):
super().__init__()
我知道参数前面的星号意味着它是任意数量的参数的列表,但是星号本身意味着什么?
这意味着之后的所有参数都是仅关键字的。正如官方术语表中参数一词下所述:
仅关键字:指定只能由 关键词。可以通过包含单个关键字来定义仅关键字参数 var-位置参数或参数列表中的裸
它们之前的函数定义,例如 中的 kw_only1 和 kw_only2 以下:*
def func(arg, *, kw_only1, kw_only2): ...
这允许您强制代码的用户(可能包括您自己)更加明确。比较:
def f(x, y, allow_zero=True, some_other_flag=False, bonus=0): ...
f(2, 0, False, True, 100) # valid
f(2, 0, allow_zero=False, some_other_flag=True, bonus=100) # valid
与
def f(x, y, *, allow_zero=True, some_other_flag=False, bonus=0): ...
f(2, 0, False, True, 100) # TypeError: f() takes 2 positional arguments but 5 were given
f(2, 0, allow_zero=False, some_other_flag=True, bonus=100) # valid