python实例100例pdf题

5个很好的Python面试题问题答案及分析
转载 &更新时间:日 13:57:35 & 作者:bytxl
这篇文章主要介绍了5个很好的Python面试题问题答案及分析,具有一定借鉴价值,需要的朋友可以参考下
本文的主要内容是向大家分享几个Python面试中的T题目,同时给出了答案并对其进行分析,具体如下。
本文的原文是,同时谢谢 @非乌龟 指出我的疏漏,没有来源标记,也赞其细心,希望看文章的同时大家都能看下原文,因为每个人的理解不一致,原汁原味的最有帮助,我翻译很多文章的目的一是为了自己以后找资料方便;二是作为一个索引,以后再看原文的时候,能更加快捷。其目的还是希望大家能看原文的。
问题一:以下的代码的输出将是什么? 说出你的答案并解释。
class Parent(object):
class Child1(Parent):
class Child2(Parent):
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
以上代码的输出是:
使你困惑或是惊奇的是关于最后一行的输出是 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。
问题二:以下的代码的输出将是什么? 说出你的答案并解释?
def div1(x,y):
print("%s/%s = %s" % (x, y, x/y))
def div2(x,y):
print("%s//%s = %s" % (x, y, x//y))
div1(5.,2)
div2(5.,2.)
这个答案实际依赖于你使用的是 Python 2 还是 Python 3。
在 Python 3 中,期望的输出是:
5.0/2 = 2.5
5.0//2.0 = 2.0
在 Python 2 中,尽管如此,以上代码的输出将是:
5.0/2 = 2.5
5.0//2.0 = 2.0
默认,如果两个操作数都是整数,Python 2 自动执行整型计算。结果,5/2 值为 2,然而 5./2 值为 ```2.5``。
注意,尽管如此,你可以在 Python 2 中重载这一行为(比如达到你想在 Python 3 中的同样结果),通过添加以下导入:
from __future__ import division
也需要注意的是“双划线”(//)操作符将一直执行整除,而不管操作数的类型,这就是为什么 5.0//2.0 值为 2.0。
注: 在 Python 3 中,/ 操作符是做浮点除法,而 // 是做整除(即商没有余数,比如 10 // 3 其结果就为 3,余数会被截除掉,而 (-7) // 3 的结果却是 -3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一样,)
问题三:以下代码将输出什么?
list = ['a', 'b', 'c', 'd', 'e']
print list[10:]
以上代码将输出 [],并且不会导致一个 IndexError。
正如人们所期望的,试图访问一个超过列表索引值的成员将导致 IndexError(比如访问以上列表的 list[10])。尽管如此,试图访问一个列表的以超出列表成员数作为开始索引的切片将不会导致 IndexError,并且将仅仅返回一个空列表。
一个讨厌的小问题是它会导致出现 bug ,并且这个问题是难以追踪的,因为它在运行时不会引发错误。
问题四:以下的代码的输出将是什么? 说出你的答案并解释?
def multipliers():
return [lambda x : i * x for i in range(4)]
print [m(2) for m in multipliers()]
你将如何修改 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 创建的函数展示的表现是一样的。)
这里有两种方法解决这个问题。
最普遍的解决方案是创建一个闭包,通过使用默认参数立即绑定它的参数。例如:
def multipliers():
return [lambda x, i=i : i * x for i in range(4)]
另外一个选择是,你可以使用 functools.partial 函数:
from functools import partial
from operator import mul
def multipliers():
return [partial(mul, i) for i in range(4)]
问题五:以下的代码的输出将是什么? 说出你的答案并解释?
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3
你将如何修改 extendList 的定义来产生期望的结果
以上代码的输出为:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
许多人会错误的认为 list1 应该等于 [10] 以及 list3 应该等于 ['a']。认为 list 的参数会在 extendList 每次被调用的时候会被设置成它的默认值 []。
尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。
因此,list1 和 list3 是操作的相同的列表。而 ````list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list``` 参数的值)。
extendList 函数的定义可以做如下修改,但,当没有新的 list 参数被指定的时候,会总是开始一个新列表,这更加可能是一直期望的行为。
def extendList(val, list=None):
if list is None:
list.append(val)
return list
使用这个改进的实现,输出将是:
list1 = [10]
list2 = [123]
list3 = ['a']
关于面试,怎么能给面试官一个好的印象?比方说人家考你这段程序输出结果是什么,你不仅能答上来,如果再能指出这段代码在实现功能不变的情况下,有什么可以优化的地方,一定会让考官眼前一亮的吧。不管怎么样,都需要扎实的基础知识。
以上就是本文关于5个很好的Python面试题问题答案及分析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具一道Python面试题:给出d = [True, False, True, False, True],请利用列表d,只用一句话返回列表[0,2,4]
时间: 21:29:56
&&&& 阅读:178
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&  前言:还是我,一个不知死活的小白,冒着生命危险去了一家有逼格的公司面试,去面试的路上就经历了一番波折,公交车死等不来,最后差点误了面试时间,这都不算什么了,虽然对面试不抱什么希望,但在技术面被虐成了渣渣也确实打击了我的自信心,最后被面试官像看一个智障一样的看着(心疼自己半分钟)。
  看题:给出d = [True, False, True, False, True],请利用列表d,只用一句话返回列表[0,2,4]
  这道题的关键是拿到True的索引值,最初我是用list的index方法搭配高阶函数filter来解的,但是我忽略了index只能拿到第一个True的索引(也就是0)。这道题在网上还没有答案,于是我去搜如何拿到如何拿到相同值得索引并受到启发,于是想到了下面三个方法。如果大家有不同的解法,也请在留言中回复,大家一起交流,共同进步。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:https://www.cnblogs.com/jiaxiaoxin/p/8443072.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!Python 基础教程
Python 100例
以下实例在Python2.7下测试通过:
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
记住登录状态
重复输入密码51CTO旗下网站
百度大牛总结十条Python面试题检验你的真实水平
Python 是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展, Python 的职位需求越来越高。下面我收集了 10 个 Python 面试官经常问的问题,供大家参考学习。
作者:xiaochao来源:| 16:00
Python 是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展, Python 的职位需求越来越高。下面我收集了 10 个 Python 面试官经常问的问题,供大家参考学习。
一、类继承
问题:有如下的一段代码:
如何调用类 A 的 show 方法?
答案:方法如下:
__class__ 方法指向了类对象,只用给他赋值类型 A ,然后调用方法 show ,但是用完了记得修改回来。
二、方法对象
问题:为了让下面这段代码运行,需要增加哪些代码?
答案:为了能让对象实例能被直接调用,需要实现 __call__ 方法
三、 new 和 init
问题:下面这段代码输入什么?
使用 __new__ 方法,可以决定返回那个对象,也就是创建对象之前,这个可以用于设计模式的单例、工厂模式。__init__ 是创建对象是调用的。
四、Python list 和 dict 生成
问题:下面这段代码输出什么?
五、全局和局部变量
问题:下面这段代码输出什么?
num 不是个全局变量,所以每个函数都得到了自己的 num 拷贝,如果你想修改 num ,则必须用 global 关键字声明。比如下面这样
六、交换两个变量的值
问题:一行代码交换两个变量值
七、默认方法
问题:如下的代码
方法 fn1/fn2/fn3 都没有定义,添加代码,使没有定义的方法都调用 mydefault 函数,上面的代码应该输出
方法 __getattr__ 只有当没有定义的方法调用时,才是调用他。当 fn1 方法传入参数时,我们可以给 mydefault 方法增加一个 *args 不定参数来兼容。
八、包管理
问题:一个包里有三个模块,mod1.py , &mod2.py , &mod3.py ,但使用 from demopack import * 导入模块时,如何保证只有 mod1 、 mod3 被导入了。
答案:增加 __init__.py 文件,并在文件中增加:
问题:写一个函数,接收整数参数 n ,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。
问题:解析下面的代码慢在哪
答案:python的str是个不可变对象,每次迭代,都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。
原文来源:https://segmentfault.com/a/7531
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条热点头条关注热点
24H热文一周话题本月最赞
讲师:110775人学习过
讲师:28859人学习过
讲师:185532人学习过
CTO专属活动
精选博文论坛热帖下载排行
本书内容包括:
● 框架的总览:SQL Server 2005的功能是如何集成在一起的,以及这些功能对于用户的意义。
● 安全性管理、策略...
订阅51CTO邮刊拒绝访问 | www.colabug.com | 百度云加速
请打开cookies.
此网站 (www.colabug.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(c7243e9-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 python基础题 的文章

 

随机推荐