Python中*作为参数是什么意思? [重复]

问题描述 投票:0回答:1

我正在浏览这个代码文件,然后我找到了这个类:

class StreamPlaylistEntry(BasePlaylistEntry):
def __init__(self, playlist, url, title, *, destination=None, **meta):
    super().__init__()

我知道参数前面的星号意味着它是任意数量的参数的列表,但是星号本身意味着什么?

python parameters arguments
1个回答
18
投票

这意味着之后的所有参数都是仅关键字的。正如官方术语表中参数一词下所述:

  • 仅关键字:指定只能由 关键词。可以通过包含单个关键字来定义仅关键字参数 var-位置参数或参数列表中的裸

    *
    它们之前的函数定义,例如 中的 kw_only1kw_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
© www.soinside.com 2019 - 2024. All rights reserved.