dan*_*007 12 python parameter-passing kwargs
在python中,我写了这个函数来教自己如何**kwargs在Python中工作:
def fxn(a1, **kwargs):
print a1
for k in kwargs:
print k, " : ", kwargs[k]
Run Code Online (Sandbox Code Playgroud)
然后我调用了这个函数
fxn(3, a2=2, a3=3, a4=4)
Run Code Online (Sandbox Code Playgroud)
这是我的Python解释器打印的输出:
3
a3 : 3
a2 : 2
a4 : 4
Run Code Online (Sandbox Code Playgroud)
为什么for循环在a2的值之前打印a3的值,即使我先将a2输入到我的函数中?
Tad*_*eck 11
这是一本字典.并且,如文档中所述,字典没有顺序(来自http://docs.python.org/tutorial/datastructures.html#dictionaries):
最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中).
但你可以按照某种顺序进行处理,例如:
使用sorted():
def fxn(a1, **kwargs):
print a1
for k in sorted(kwargs): # notice "kwargs" replaced by "sorted(kwargs)"
print k, " : ", kwargs[k]
Run Code Online (Sandbox Code Playgroud)或者使用OrderedDict类型(您可以将OrderedDict对象作为包含所有键值对的参数传递):
from collections import OrderedDict
def fxn(a1, ordkwargs):
print a1
for k in ordkwargs:
print k, " : ", ordkwargs[k]
fxn(3, OrderedDict((('a2',2), ('a3',3), ('a4',4))))
Run Code Online (Sandbox Code Playgroud)终于在3.6版本中引入了此功能:dict现在对进行了排序,因此保留了关键字参数顺序。
Python 3.6.0 (default, Jan 13 2017, 13:27:48)
>>> def print_args(**kwargs):
... print(kwargs.keys())
...
>>> print_args(first=1, second=2, third=3)
dict_keys(['first', 'second', 'third'])
Run Code Online (Sandbox Code Playgroud)
不幸的讽刺是,**kwargs的统一意味着以下方法不起作用(至少不是人们所期望的方式):
od = OrderedDict(a=1, b=2, c=3)
Run Code Online (Sandbox Code Playgroud)
由于keyworded args首先构建在无序的dict中,因此您不能依赖它们按照列出的顺序插入到OrderedDict中.:(
| 归档时间: |
|
| 查看次数: |
5536 次 |
| 最近记录: |