博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python2和python3解包区别(以及eval函数使字符串转列表)
阅读量:3934 次
发布时间:2019-05-23

本文共 1414 字,大约阅读时间需要 4 分钟。

python2和python3解包 & eval函数使字符串转列表

python2和python3解包区别

讲故事~ 讲故事~

今天笔者在测试python2和python3的代码的时候发现了一个很有意思的问题:

python2下:

#python2x , y = input()print "x: ",x,type(x)print "y: ",y,type(y)

输入:7,[[8,9],[9,12]]

发生结果:

x:  7 
y: [[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 
y: [',', '[', '[', '8', ',', '9', ']', ',', '[', '9', ',', '1', '2', ']', ']']

在这里插入图片描述

?what??python3 自动把我的后面的那个二维数组给我打散了?都散架成这个样子了,我还 list 你个大头鬼哦。而且,还有前面的 7 也给我变成了字符串格式,这也太不智能了吧。

不过在抱怨之前我们先再走一步操作,把他们分片一下,这样提取我们所需要的两个部分:

新的代码:

#python3x , y = input().split(',',1)print ("x: ",x,type(x))print ("y: ",y,type(y))

输入:7,[[8,9],[9,12]]

运行结果:

x:  7 
y: [[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/

你可能感兴趣的文章
vue中特殊符号的理解如$
查看>>
部署到aliyun服务器的jar包应用程序自动运行命令
查看>>
maven命令
查看>>
maven的依赖传递
查看>>
Python简单循环代码
查看>>
python简介
查看>>
python变量及字符编码
查看>>
变量拼接的四种方法
查看>>
docker centos7 安装ssh
查看>>
github和gitlab比较
查看>>
sersync实现主机实时双向同步
查看>>
Centos7安装apache2.4.6,Apache调优及设置虚拟机
查看>>
系统调优的4大子系统:
查看>>
nginx与Apache、php的版本信息隐藏
查看>>
iptables学习
查看>>
fsck命令使用详解
查看>>
kvm快速安装部署
查看>>
apache三种工作模式及相关配置
查看>>
Apache与Nginx的优缺点比较
查看>>
select和epoll对比
查看>>