本文共 1414 字,大约阅读时间需要 4 分钟。
讲故事~ 讲故事~
今天笔者在测试python2和python3的代码的时候发现了一个很有意思的问题:
python2下:#python2x , y = input()print "x: ",x,type(x)print "y: ",y,type(y)
输入:7,[[8,9],[9,12]]
发生结果:x: 7y: [[8, 9], [9, 12]]
python2竟然能够自动解包两个部分,并且前面的7自动识别为int型,而后面剩余部分自动识别为list!
什么??你以为这个很自然吗?那是你没有试试python3这样写……
让我们看看python3中这样写会怎么样:
#python3x , y = input()print ("x: ",x,type(x))print ("y: ",y,type(y))
输入:7,[[8,9],[9,12]]
发生结果: 咦?怎么回事?报错说太多的值没有打包,我们来看看哪些值没被打包。 修改代码:#python3x , *y = input()print ("x: ",x,type(x))print ("y: ",y,type(y))
输入:7,[[8,9],[9,12]]
运行结果:x: 7?what??python3 自动把我的后面的那个二维数组给我打散了?都散架成这个样子了,我还 list 你个大头鬼哦。而且,还有前面的 7 也给我变成了字符串格式,这也太不智能了吧。y: [',', '[', '[', '8', ',', '9', ']', ',', '[', '9', ',', '1', '2', ']', ']']
不过在抱怨之前我们先再走一步操作,把他们分片一下,这样提取我们所需要的两个部分:
新的代码:#python3x , y = input().split(',',1)print ("x: ",x,type(x))print ("y: ",y,type(y))
输入:7,[[8,9],[9,12]]
运行结果:x: 7y: [[8,9],[9,12]]
注意注意:这个地方我们并没有完成我们的目的,他们的格式都只是 str ,并不是 int 和 list
解决方案:
好吧,那么我们就来解决问题,假如现在非要让用 python3 完成解包,生成这个二维数组怎么办呢? 哎,聪明的小伙伴们以及举手了,看到这个字符串的形式是不是很容易联想到 python 有一个功能很强大的函数呀~ 对,没错,这个函数就是 eval ,下图摘自百科: 最终版本,不改了!:x , y = input().split(',',1)x = eval(x)y = eval(y)print ("x: ",x,type(x))print ("y: ",y,type(y))
执行结果:
哈哈,所以在知道eval函数之后看 python3 其实也蛮好用的嘛,input 格式的统一也不会造成混乱,更方便理解和记忆。 今天的故事就讲到这里啦,拜~嘿嘿,I am very glateful that 你看到这里了哦~下回再见ヾ(o◕∀◕)ノヾ
Thx转载地址:http://knggn.baihongyu.com/