关于本节for in循环在不使用items()方法时如果使用key,value接收值,会分别获得关键字名的第一个和第二个字符的问题原因记录
来源:8-8 关键字可变参数

不啦啦啦
2019-05-27
个人测试
情况1:
# 直接使用key,value接收
def demo4(**param):
for key,value in param:
print(key,':',value)
# 第一条可以正常执行,分别显示关键字的第一个和第二个字符
demo4(ab=1,cd=2,cd=5)
# 第二条会报错 too many values to unpack (expected 2)
demo4(abc=1,cde=2,cd=5)
继续测试,看使用4个参数接收会出现什么情况
情况2:
def demo5(**param):
for k1,k2,k3,k4 in param:
print(k1,':',k2,":",k3,":",k4)
# 关键字都是4个字符,不报错
demo5(aaaa=1,bbbb=2,cccc:3)
# >>> 执行结果
a : a : a : a
b : b : b : b
c : c : c : c
a : a : a : a
b : b : b : b
# 当关键字不是4位时,会报错
demo5(aaaa=1,bbbb=2,ccc:3)
对demo5做一个小的修改,就可以明白时为什么了
def demo5(**param):
for key in param:
k1,k2,k3,k4 = key
print(k1,':',k2,":",k3,":",k4)
# 关键字都是4个字符,不报错
demo5(aaaa=1,bbbb=2,cccc=3)
# demo5(aaaa=1,bbbb=2,ccc=3)
demo5(aaaa=1,bbbb=2,ccccc=3)
执行结果与未修改前完全一致,可以看到for in
如果不是使用items()
,就直接使用key,value接收, 类似于序列解包操作
下面单独在做一个测试
k1,k2,k3,k4 = "1234"
print("k1",':',k1)
print("k2",':',k2)
print("k3",':',k3)
print("k4",':',k4)
#会输出:
k1 : 1
k2 : 2
k3 : 3
k4 : 4
所以对于字符串也是可以进行序列解包操作的,接收值得变量个数必须等于字符串的长度
问题:请教下老师,对字符串进行序列解包时,程序的操作过程是一个怎么样的过程呢?是先将字符串分割成一个一个字符吗?
写回答
4回答
-
7七月
2019-05-29
for in如果要遍历key:value 需要调用 param.items()
00 -
7七月
2019-05-29
两个同名关键字参数直接是错误语法啊,如何能运行?
012019-05-29 -
7七月
2019-05-29
**param不是 接收一组关键字么?
00 -
7七月
2019-05-29
你第一个情况1,我都没看明白,这两个测试调用,不就是参数名不同吗?为什么第二个会报错吗?
012019-05-29
相似问题