动态地将不同参数传递给预定义函数。

10 浏览
0 Comments

动态地将不同参数传递给预定义函数。

这个问题已经有了答案:

在Python里,**(双星号/星号)和*(星号)参数有什么用?

在Python中,**kwargs有什么用途?

我知道你可以在一个表上执行objects.filter 并传递 **kwargs 参数。

我也可以用它来指定时间差,例如timedelta(hours = time1)

它到底是如何工作的? 它被归类为“拆包”吗? 像a,b = 1,2

admin 更改状态以发布 2023年5月23日
0
0 Comments

解包字典

**解包字典。

This

func(a=1, b=2, c=3)

args = {'a': 1, 'b': 2, 'c':3}
func(**args)

是一样的。

如果需要构建参数,这很有用:

args = {'name': person.name}
if hasattr(person, "address"):
    args["address"] = person.address
func(**args)  # either expanded to func(name=person.name) or
              #                    func(name=person.name, address=person.address)


打包函数参数

  • 在Python 3中,使用.items()代替.iteritems()

def setstyle(**styles):
    for key, value in styles.iteritems():      # styles is a regular dictionary
        setattr(someobject, key, value)

这让你可以像这样使用函数:

setstyle(color="red", bold=False)


注意事项

  • 在关键字参数中,kwargs是变量名,也可以使用其他变量名。重要的是它是一个字典,可以使用双星号运算符**进行解包。
  • 其他可迭代对象则使用单星号运算符*进行解包。
  • 为了避免混淆,最好使用标准的变量名kwargsargs来分别表示字典和其他可迭代对象。

资源

0
0 Comments

你可以使用 **kwargs 让你的函数接受任意数量的关键字参数("kwargs" 的意思是 "keyword arguments"):

>>> def print_keyword_args(**kwargs):
...     # kwargs is a dict of the keyword args passed to the function
...     for key, value in kwargs.iteritems():
...         print "%s = %s" % (key, value)
... 
>>> print_keyword_args(first_name="John", last_name="Doe")
first_name = John
last_name = Doe

你也可以使用 **kwargs语法在调用函数时构建一个关键字参数的字典,并将其传递给你的函数:

>>> kwargs = {'first_name': 'Bobby', 'last_name': 'Smith'}
>>> print_keyword_args(**kwargs)
first_name = Bobby
last_name = Smith

Python 教程中有关于它是如何工作的很好的解释,以及一些不错的例子。

Python 3 更新

对于 Python 3,使用 items() 代替 iteritems()

0