当前位置: 首页 > 科技观察

盘点一个有“坑”的Python基础话题(附源码)

时间:2023-03-21 00:00:15 科技观察

大家好,我是Python进阶。前言昨天在小编的Python交流群里,有个叫[A?]的粉丝在群里问了一个关于Python基础知识的问题。乍一看觉得很简单,其实是有坑的。这里有一篇文章,分享给大家。题目如下图所示:看题目,觉得很简单。操作凶猛如虎,诸神各显神通,只是大家一开始还真是轻敌了。以下是答案列表:我发现不是那么简单,再给它一个打击:1.思路问题看似简单,其实有潜在的隐患。详情见下图红框。关于这个想法,有两个。一种是【盘西鸟】提供的思路,检测首尾是否为[](),并进行类型转换,可以解决list和tuple,其他数据类型,无法处理,这个想法还是有缺点的。第二种是使用eval()函数。对于这个正解,详见下一节。2、解法1)代码1这里先给出[A?]老板自己的代码,如下图。#coding:utf-8a=(input('Pleaseenteradata:'))b=eval(a)print(a,type(b))乍一看这段代码确实可以实现,但是细心的话[??(Thisisthebackofthemoon)],你会发现这里会隐藏一个小bug,就是作者在input()函数外面加了一个括号,也就是说输入的是突然变成一维的。群强行转移。如果你输入元组或字典,你将被推翻。说实话,一开始看到这里有些圈圈,后来就明白了。看下图【盼夕鸟】给出的一个反例测试结果:乍一看,你不敢相信,会报错,你会很吃惊,问题出在哪里?其实问题出在input函数外层的括号把input用括号包裹起来,那么就是一个元组,里面的元素是字符串,evaleval只能解析字符串,不能解析元组,所以会报错报道。2)代码2经过上面的分析,相信大家应该知道问题出在哪里了。只需要去掉输入函数外层的括号即可。#coding:utf-8a=input('Pleaseenteradata:')b=eval(a)print(a,type(b))下图是【攀西鸟】给出的测试结果,大家可以看他还多加了一层异常函数处理,更加完善和健壮:3)彩蛋之后,老大也给出了更详细的测试结果。一起来看看吧。测试结果表明:基本数据类型的输出都没有问题。bool值,复数也是可以的。检测函数时,是调用函数,而不是显示函数的类型:3.总结我是一个进阶的Python。这篇文章是根据爱好者对Python基础问题的提问整理而来的。在大家的共同努力下,给出了一个完整的解决方案,满足了粉丝们的要求。这道题,考点是eval。灵活运用确实可以达到事半功倍的效果。添加异常处理使程序更加健壮。本文转载自微信公众号《Python爬虫与数据挖掘》,可通过以下二维码关注。转载本文请联系Python爬虫与数据挖掘公众号。