以星号和双星号开头的 Python 方法/函数参数 [重复]

Posted

技术标签:

【中文标题】以星号和双星号开头的 Python 方法/函数参数 [重复]【英文标题】:Python method/function arguments starting with asterisk and dual asterisk [duplicate] 【发布时间】:2011-05-17 10:25:35 【问题描述】:

我无法理解这些类型的函数在哪里使用,以及这些参数与普通参数的工作方式有何不同。我曾多次遇到它们,但从未有机会正确理解它们。

例如:

def method(self, *links, **locks):
    #some foo
    #some bar
    return

我知道我可以搜索文档,但我不知道要搜索什么。

【问题讨论】:

查看上一个问题:***.com/questions/287085/… 同上——这里有一个有用的链接:saltycrane.com/blog/2008/01/… “我知道我可以搜索文档,但我不知道要搜索什么。”学习时经常发生。这就像在说“东西里有什么东西?”一些所谓的“专家”忘记的是,有时需要最低限度的理解才能知道如何提出问题。 您可能有兴趣阅读What does ** (double star) and * (star) do for Python parameters? 或What does asterisk * mean in Python? 中的一个问题 这么好的问题! 【参考方案1】:

*args**keywordargs 形式分别用于传递参数列表和参数字典。所以如果我有这样的功能:

def printlist(*args):
    for x in args:
        print(x)

我可以这样称呼它:

printlist(1, 2, 3, 4, 5)  # or as many more arguments as I'd like

为此

def printdict(**kwargs):
    print(repr(kwargs))

printdict(john=10, jill=12, david=15)

*args 的行为类似于列表,**keywordargs 的行为类似于字典,但您不必将 listdict 显式传递给函数。

更多示例请参见this。

【讨论】:

但是可以你显式地将列表或字典传递给函数吗? 是的,你可以。如果您“按原样”传递该列表,则该列表将为 args[0]。另一方面,如果你用星号调用函数(不是函数定义中的那个,这是在调用中),那么传递的列表将是实际的 args 元组。 *args 是 tuple,而不是 list >>> def d(*args): ... print(type(args)) >>> d(1, 2, 3)

以上是关于以星号和双星号开头的 Python 方法/函数参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python学习:python的星号(*)和双星号(**)用法

python中单星号(*)和双星号(**)的使用

python中 单星号(*)与双星号(**)的使用

python俩个星号怎么表示根号二

python语法基础

Python 函数参数前面一个星号(*)和两个星号(**)的区别