本文的主要内容是向大家分享几个Python面试中的T题目,同时给出了答案并对其进行分析,具体如下。

本文的原文是5 Great Python Interview Questions,同时谢谢 @非乌龟 指出我的疏漏,没有来源标记,也赞其细心,希望看文章的同时大家都能看下原文,因为每个人的理解不一致,原汁原味的最有帮助,我翻译很多文章的目的一是为了自己以后找资料方便;二是作为一个索引,以后再看原文的时候,能更加快捷。其目的还是希望大家能看原文的。

问题一:以下的代码的输出将是什么? 说出你的答案并解释。

答案

以上代码的输出是:

使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1。为什么改变了 Parent.x 的值还会改变 Child2.x的值,但是同时 Child1.x 值却没有改变?

这个答案的关键是,在 Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个 AttributeError 异常 )。

因此,在父类中设置 x = 1 会使得类变量 X 在引用该类和其任何子类中的值为 1。这就是因为第一个 print 语句的输出是1 1 1。

随后,如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2),然后,该值仅仅在子类中被改变。这就是为什么第二个 print 语句的输出是 1 2 1。

最后,如果该值在父类中被改变(例如,我们执行语句 Parent.x = 3),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是 Child2)。这就是为什么第三个 print 输出是 3 2 3。

问题二:以下的代码的输出将是什么? 说出你的答案并解释?

答案

这个答案实际依赖于你使用的是 Python 2 还是 Python 3。

在 Python 3 中,期望的输出是:

在 Python 2 中,尽管如此,以上代码的输出将是:

默认,如果两个操作数都是整数,Python 2 自动执行整型计算。结果,5/2 值为 2,然而 5./2 值为 ```2.5``。

注意,尽管如此,你可以在 Python 2 中重载这一行为(比如达到你想在 Python 3 中的同样结果),通过添加以下导入:

也需要注意的是“双划线”(//)操作符将一直执行整除,而不管操作数的类型,这就是为什么 5.0//2.0 值为 2.0。

注: 在 Python 3 中,/ 操作符是做浮点除法,而 // 是做整除(即商没有余数,比如 10 // 3 其结果就为 3,余数会被截除掉,而 (-7) // 3 的结果却是 -3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一样,)

问题三:以下代码将输出什么?

答案

以上代码将输出 [],并且不会导致一个 IndexError。

正如人们所期望的,试图访问一个超过列表索引值的成员将导致 IndexError(比如访问以上列表的 list[10])。尽管如此,试图访问一个列表的以超出列表成员数作为开始索引的切片将不会导致 IndexError,并且将仅仅返回一个空列表。

一个讨厌的小问题是它会导致出现 bug ,并且这个问题是难以追踪的,因为它在运行时不会引发错误。

问题四:以下的代码的输出将是什么? 说出你的答案并解释?

你将如何修改 multipliers 的定义来产生期望的结果

答案

以上代码的输出是 [6, 6, 6, 6] (而不是 [0, 2, 4, 6])。

这个的原因是 Python 的闭包的后期绑定导致的 late binding,这意味着在闭包中的变量是在内部函数被调用的时候被查找。所以结果是,当任何 multipliers() 返回的函数被调用,在那时,i 的值是在它被调用时的周围作用域中查找,到那时,无论哪个返回的函数被调用,for 循环都已经完成了,i 最后的值是 3,因此,每个返回的函数 multiplies 的值都是 3。因此一个等于 2 的值被传递进以上代码,它们将返回一个值 6 (比如: 3 x 2)。

(顺便说下,正如在 The Hitchhiker's Guide to Python 中指出的,这里有一点普遍的误解,是关于 lambda 表达式的一些东西。一个 lambda 表达式创建的函数不是特殊的,和使用一个普通的 def 创建的函数展示的表现是一样的。)

这里有两种方法解决这个问题。

最普遍的解决方案是创建一个闭包,通过使用默认参数立即绑定它的参数。例如:

另外一个选择是,你可以使用 functools.partial 函数:

问题五:以下的代码的输出将是什么? 说出你的答案并解释?

你将如何修改 extendList 的定义来产生期望的结果

以上代码的输出为:

许多人会错误的认为 list1 应该等于 [10] 以及 list3 应该等于 ['a']。认为 list 的参数会在 extendList 每次被调用的时候会被设置成它的默认值 []。

尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。

因此,list1 和 list3 是操作的相同的列表。而 ````list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list``` 参数的值)。

extendList 函数的定义可以做如下修改,但,当没有新的 list 参数被指定的时候,会总是开始一个新列表,这更加可能是一直期望的行为。

使用这个改进的实现,输出将是:

总结

关于面试,怎么能给面试官一个好的印象?比方说人家考你这段程序输出结果是什么,你不仅能答上来,如果再能指出这段代码在实现功能不变的情况下,有什么可以优化的地方,一定会让考官眼前一亮的吧。不管怎么样,都需要扎实的基础知识。

以上就是本文关于5个很好的Python面试题问题答案及分析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/bytxl/article/details/47301319

python改错题重要的事情说三遍_5个很好的Python面试题问题答案及分析相关推荐

  1. 引导魔女之力,征服星辰大海 主线篇: 重要事情说三遍: 推主线!推主线!!推主线!!! 简述: 1.本篇仅主线,涉及到的技巧全职业都可以参考; 2.考虑到萌新刚玩没有护卫者系统,故禁护

    引导魔女之力,征服星辰大海 主线篇: 重要事情说三遍: 推主线!推主线!!推主线!!! 简述: 1.本篇仅主线,涉及到的技巧全职业都可以参考: 2.考虑到萌新刚玩没有护卫者系统,故禁护卫者以及不使用卡 ...

  2. 引导魔女之力,征服星辰大海 升级篇: 重要事情说三遍: 升级!升级!!升满级!!! 简述: 1.本篇仅升级,涉及到的技巧全职业都可以参考; 2.考虑到萌新刚玩通关护卫者系统等级不高,故

    引导魔女之力,征服星辰大海 升级篇: 重要事情说三遍: 升级!升级!!升满级!!! 简述: 1.本篇仅升级,涉及到的技巧全职业都可以参考: 2.考虑到萌新刚玩通关护卫者系统等级不高,故禁护卫者以及不使 ...

  3. 《惢客创业日记》2018.12.27(周四)重要的事情说三遍 上篇

    重要的事情说三遍,今天,再分享一遍<惢客初心论>. 惢客到底是谁的惢客?这个问题需要反复思考,而且需要时时刻刻思考.一提到阿里巴巴,大家会想到马云:一提到腾讯,大家会想到马化腾:一提到小米 ...

  4. python面试题及答案-5个很好的Python面试题问题答案及分析

    本文的主要内容是向大家分享几个Python面试中的T题目,同时给出了答案并对其进行分析,具体如下. 本文的原文是5 Great Python Interview Questions,同时谢谢 @非乌龟 ...

  5. 送书!送书!送书!重要的事情说三遍

    前言 为了回馈粉丝的持续关注和支持,「视学算法」联合「Python专栏」开启了送书活动!本次活动「视学算法」和「Python专栏」均送出5本书,一共10本书. 本次活动采取锦鲤形式,即如果中奖,即获得 ...

  6. 用来表示python代码块的是什么_三分钟带你用简单的Python代码深入理解Python中的元类...

    互联网的数据爆炸式的增长,而利用 Python 爬虫我们可以获取大量有价值的数据 类也是对象 在理解元类前,需要先掌握Python中的类.在大多数编程语言中,类就是一组描述如何生成对象的代码段.在Py ...

  7. python拥有庞大的计算生态_Python稳定基础训练中的易出错概念问题1(包括答案和分析),稳基,修炼,之,计算机,等级,考试,易错,含答案,与,解析...

    文章目录 1.下列关于Python的描述正确的是___. A.代码的缩进错误导致的是逻辑错误 B.跳跃结构是Python的流程结构之一 C.Python支持的数据类型包括char.int和float等 ...

  8. 计算机网络基础与应用配伍题,国家开放大学电大《计算机组网技术》机考第九套标准试题及答案.doc...

    PAGE1 / NUMPAGES5 国家开放大学电大<计算机组网技术>机考第九套标准试题及答案 盗传必究 试卷总分:100 答题时间:60分钟 客观题 一.单项选择题(共20题,共40分) ...

  9. Python编程题:用户登录,三次机会后锁定

    题目要求: 给用户三次输入用户名和密码的机会,要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬ ...

  10. python 自动补全函数括号_三分钟,让你弄清楚Python中函数的括号使用

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大困惑. ...

最新文章

  1. python科学计算整理
  2. python简单代码画图-Python竟能画这么漂亮的花,帅呆了(代码分享)
  3. java string 转化为date
  4. aaynctask控制多个下载进度_C# 多线程方法 控制两个进度条
  5. 分享一下vue ui的分页的用法
  6. R3 data related to category and hierarchy mapping logic in CRM
  7. JavaScript操作表格进行拖拽排序
  8. libev源码分析--常用的watcher
  9. pythoncsv文件的操作_python操作CSV文件
  10. python链表怎么定义_Python数据结构之双向链表的定义与使用方法示例
  11. vscode web版搭建_VS Code 1.39 发布!Web 版 VS Code 是否离我们越来越近了?(文末彩蛋)...
  12. JSP + AjaxAnywhere页面开发规范
  13. 电子产品--耐久性试验--可靠性试验--热测试试验--老化试验
  14. QDockWidget标题栏
  15. LINUX IIO子系统分析之四 IIO EVENT介绍
  16. spring boot项目报错:Validation failed for query for method public abstract...
  17. 如何快速干净的卸载mysql数据库,不影响下次安装
  18. 实现抓娃娃游戏功能关键算法。Java使用数组、循环结构语句实现输入十个数字判断最大值,Java判断最大值。
  19. 我的病毒代码之bat文件 win10系统版
  20. 计算机软考中级哪个最容易过?

热门文章

  1. matlab讨厌python_MATLAB在逐渐被Python淘汰吗?
  2. 阿里云云计算 46 阿里云DDoS防护
  3. 算法:24.两两交换链表中的节点
  4. 算法:回溯解决电话拨号中的字母组合Letter Combinations of a Phone Number
  5. Google Code Review 如何编写代码评论
  6. 如何在Swift中掌握协议
  7. Operation和OperationQueue详解
  8. 2021-09-02Hive
  9. 3.1 广义线性模型 And XGBoost
  10. python中如何导入图片_python如何导入图片