请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

个人测试

情况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

所以对于字符串也是可以进行序列解包操作的,接收值得变量个数必须等于字符串的长度

问题:请教下老师,对字符串进行序列解包时,程序的操作过程是一个怎么样的过程呢?是先将字符串分割成一个一个字符吗?

正在回答 回答被采纳积分+3

4回答

7七月 2019-05-29 20:21:06

for in如果要遍历key:value 需要调用 param.items()

0 回复 有任何疑惑可以回复我~
7七月 2019-05-29 20:09:54

https://img1.sycdn.imooc.com//szimg/5cee768100018f8411620502.jpg两个同名关键字参数直接是错误语法啊,如何能运行?

0 回复 有任何疑惑可以回复我~
  • 提问者 不啦啦啦 #1
    老师好,这个是编写问题时的手误,第三个的参数名应该是ed
    回复 有任何疑惑可以回复我~ 2019-05-29 20:12:21
7七月 2019-05-29 15:44:32

**param不是 接收一组关键字么?

0 回复 有任何疑惑可以回复我~
7七月 2019-05-29 15:43:41

你第一个情况1,我都没看明白,这两个测试调用,不就是参数名不同吗?为什么第二个会报错吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 不啦啦啦 #1
    是的,参数名的长度不同,只有长度为2的时候不会报错
    回复 有任何疑惑可以回复我~ 2019-05-29 15:53:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信