- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这些函数定义中的*args
和**kwargs
是什么意思?
def foo(x, y, *args):
pass
def bar(x, y, **kwargs):
pass
<小时/>
参见What do ** (double star/asterisk) and * (star/asterisk) mean in a function call?关于参数的补充问题。
最佳答案
*args
和 **kwargs
是一种常见的习惯用法,允许函数使用任意数量的参数,如 more on defining functions 部分所述。在 Python 文档中。
*args
将为您提供所有函数参数 as a tuple :
def foo(*args):
for a in args:
print(a)
foo(1)
# 1
foo(1,2,3)
# 1
# 2
# 3
**kwargs
将为您提供一切关键字参数,除了那些对应于作为字典的形式参数的参数。
def bar(**kwargs):
for a in kwargs:
print(a, kwargs[a])
bar(name='one', age=27)
# name one
# age 27
这两种习惯用法都可以与普通参数混合,以允许一组固定参数和一些可变参数:
def foo(kind, *args, **kwargs):
pass
也可以反过来使用:
def foo(a, b, c):
print(a, b, c)
obj = {'b':10, 'c':'lee'}
foo(100,**obj)
# 100 10 lee
*l
习语的另一种用法是在调用函数时解压参数列表。
def foo(bar, lee):
print(bar, lee)
l = [1,2]
foo(*l)
# 1 2
在 Python 3 中,可以在赋值的左侧使用 *l
( Extended Iterable Unpacking ),尽管在这种情况下它给出的是列表而不是元组:
first, *rest = [1,2,3,4]
first, *l, last = [1,2,3,4]
Python 3 还添加了新的语义(请参阅 PEP 3102 ):
def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
pass
例如,以下内容在 python 3 中有效,但在 python 2 中无效:
>>> x = [1, 2]
>>> [*x]
[1, 2]
>>> [*x, 3, 4]
[1, 2, 3, 4]
>>> x = {1:1, 2:2}
>>> x
{1: 1, 2: 2}
>>> {**x, 3:3, 4:4}
{1: 1, 2: 2, 3: 3, 4: 4}
此类函数仅接受 3 个位置参数,并且 *
之后的所有内容只能作为关键字参数传递。
dict
,语义上用于关键字参数传递,是任意排序的。但是,在 Python 3.6 中,保证关键字参数记住插入顺序。**kwargs
中的元素顺序现在对应于关键字参数传递给函数的顺序。” -What’s New In Python 3.6 关于python - **(双星/星号)和*(星/星号)对参数有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383803/
我正在尝试找到一种方法,从字符串中生成匹配模式的数组。我将用一个例子来解释自己。 来自类似的字符串 Lorem ipsum dolor **sit** amet, consectetur adipis
在下面创建 NotebookPage 对象时,如何传递一个额外的参数“page_name”?我收到以下错误: class NotebookPage(wx.Panel): def __init_
这些函数定义中的*args和**kwargs是什么意思? def foo(x, y, *args): pass def bar(x, y, **kwargs): pass 参见Wha
这些函数定义中的*args和**kwargs是什么意思? def foo(x, y, *args): pass def bar(x, y, **kwargs): pass 参见Wha
*args 和 **kwargs 是什么意思? def foo(x, y, *args): def bar(x, y, **kwargs): 最佳答案 *args 和 **kwargs 是一个常见的惯
*args 和 **kwargs 是什么意思? def foo(x, y, *args): def bar(x, y, **kwargs): 最佳答案 *args 和 **kwargs 是一个常见的惯
直接来自 this Java Oracle 教程: Two asterisks, **, works like * but crosses directory boundaries. This syn
*args 和 **kwargs 是什么意思? def foo(x, y, *args):def bar(x, y, **kwargs): 最佳答案
我是一名优秀的程序员,十分优秀!