首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中,什么决定了遍历kwargs时的顺序?

在Python中,什么决定了遍历kwargs时的顺序?
EN

Stack Overflow用户
提问于 2012-01-23 19:42:02
回答 6查看 6.3K关注 0票数 12

在Python语言中,我编写了这个函数来自学**kwargs在Python语言中的工作原理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fxn(a1, **kwargs):
    print a1
    for k in kwargs:
        print k, " : ", kwargs[k]

然后,我使用以下命令调用此函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fxn(3, a2=2, a3=3, a4=4)

下面是我的Python解释器打印的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3
a3  :  3
a2  :  2
a4  :  4

为什么for循环先打印a3的值,然后再打印a2的值,即使我先将a2输入到函数中?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-23 19:43:58

kwargs是一种字典。字典是无序的-简单地说,顺序是未指定的,是一个实现细节。在幕后偷看会发现,根据项目的哈希值、插入顺序等,顺序会有很大的不同,所以你最好不要依赖任何相关的东西。

票数 24
EN

Stack Overflow用户

发布于 2012-01-23 19:44:26

这是一本字典。而且,正如文档中提到的,字典没有顺序(来自http://docs.python.org/tutorial/datastructures.html#dictionaries):

最好将字典视为键:值对的无序集合,要求键是唯一的(在一个字典内)。

但是你可以让它按的顺序处理,就像这样:

使用sorted()

def fxn( a1,**kwargs):打印排序(Kwargs)中k的a1:#请注意"kwargs“替换为"sorted(kwargs)”print k,“:",kwargsk

  • 或使用OrderedDict类型(您可以将OrderedDict对象作为包含所有键值对的参数传递):

从集合导入OrderedDict def fxn( a1,ordkwargs):在ordkwargs中打印k的a1: print k,“:",ordkwargsk fxn(3,OrderedDict(‘a2’,2),('a3',3),(‘a4’,4)

票数 11
EN

Stack Overflow用户

发布于 2017-01-13 11:49:54

最后在3.6 release中引入了这一点:dict现在是有序的,因此关键字参数顺序保持不变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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'])
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8977594

复制
相关文章
Python函数中的*、*args、**kwargs
当函数需要的参数数量不确定的时候,可以使用args 和 kwargs , 所有的位置参数保存在args中,以元组的形式保存,调用时直接用args,不需要带 * 所有的关键参数保存在kwargs中,以字典的形式保存,调用时也直接使用kwargs
神秘的寇先森
2020/02/19
9570
python中*args和**kwargs的区别
*args是函数使用者可以发送任意数量非键值对的参数传给这个函数,*args在接收参数后,将返回值以元组tuple的形式返回。
用户7886150
2020/12/19
4690
Python中 *args 和 **kwargs 的含义?
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
程序员小猿
2021/01/19
7440
Python中*args和**kwargs
在python开发的过程中,经常会遇到了*args和**kwargs这两个魔法变量,那么它们是什么呢?
SEian.G
2021/07/07
1.1K0
Python中 *args 和 **kwargs 的含义?
答:在python中,*args和**kwargs通常使用在函数定义里。*args 和 **kwargs 都允许你给函数传不定数量的参数,即使在定义函数的时候不知道调用者会传递几个参数。ps: *args和**kwargs只是一个大家都遵守的习惯,名字可以任意写的 。
用户1564362
2019/11/12
1.2K0
Python函数中的*args, **kwargs是什么意思?如何使用?
当我们在写程序时,不确定将来要往函数中传入多少个参数,即可使用可变参数(即不定长参数),用*args,**kwargs表示。
用户8639654
2021/07/22
5.1K0
Python中 *args 和 **kwargs的用法
总是会在一些代码中看到*args和**kwargs,一直不知道具体怎么用,今天整理了一下:
BigYoung小站
2020/07/02
5910
Python参数详解:什么是*args和**kwargs?
一颗星号(*)已经两颗星号(**)都表示能够接收可变长度的参数。但是如何区别和理解这里的一颗星和两颗星呢?我们接下来通过例子详细介绍二者的联系和区别。
HuangWeiAI
2020/02/24
5240
HashMap遍历以及遍历顺序[通俗易懂]
(在leetcode12. 整数转罗马数字题目中使用到HashMap遍历,遂做此记录!)
全栈程序员站长
2022/09/30
1.4K0
hashmap顺序遍历_遍历排序
hashmap元素排序 想要hashmap中的元素有序可以使用linkedHashMap。
全栈程序员站长
2022/09/30
1.4K0
python中的参数传递*args与**kwargs
*args与**kwargs可以将任意数目的参数传递给函数,主要用在函数定义中,最常见的是在装饰器中使用。
生信编程日常
2020/05/26
1.8K0
什么是*args和**kwargs?
可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: positional argument follows keyword argument”。
狼啸风云
2020/05/14
1.3K0
Python参数详解:什么是*args和**kwargs?
一颗星号(*)已经两颗星号(**)都表示能够接收可变长度的参数。但是如何区别和理解这里的一颗星和两颗星呢?我们接下来通过例子详细介绍二者的联系和区别。
数据森麟
2020/02/26
7260
Python enumerate函数无法顺序遍历集合
今天使用Python中的enumerate函数,犯了一个很低级的错误,enumerate用于遍历如字符串,列表,元组中的变量,但是并不能顺序遍历字典中的变量,举个例子:
chaibubble
2019/05/26
1K0
Python enumerate函数无法顺序遍历字典
本文介绍了Python中enumerate函数的作用,以及如何使用它来遍历字符串、列表、元组和字典。同时,也举例说明了这些数据类型的区别和用法,并给出了相应的示例代码。
chaibubble
2018/01/02
3.1K2
python函数——形参中的:*args和**kwargs
多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现
菲宇
2019/06/13
1.1K0
python中的*args与**kwargs的含义与作用
一、*args与**kwargs介绍 *args是非关键字参数,用于元组,**kwargs是关键字参数 (字典) 也就是说args表示任何多个无名参数,然而kwags表示一个一个有着对应关系的关键字参数, 在使用的时候需要注意,*args要在**kwags之前,不然会发生语法错误 二、args使用案例和kwargs使用案例 # coding=utf-8 """ @project: panglu_test_59 @Author:gaojs @file: test017.py
懿曲折扇情
2022/08/24
4690
python: *args & **kwargs
Python是支持 可变参数 的,实现手段之一就是使用 *args 和 **kwargs 语法。
JNingWei
2018/09/28
9810
python2中为什么在进行类定义时最好
Person类很明显能够看出区别,不继承object对象,只拥有了doc , module 和 自己定义的name变量, 也就是说这个类的命名空间只有三个对象可以操作. Animal类继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性。
py3study
2020/01/09
1.2K0
点击加载更多

相似问题

在Python中,是什么决定了字典中数据的顺序?

32

是什么决定了Python 3.6中字典的顺序

10

什么决定了字典收藏的顺序?

11

是什么决定了Acumatica中的MoveNext顺序?

14

是什么决定了goroutines的执行顺序?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文