首页 存档 技术 查看内容

5 个很好的 Python 面试题

2018-3-30 13:00 |来自: 互联网 387 0

摘要: 英文:toptal 译文:yexiaobai 链接:segmentfault.com/a/1190000000618513 注:本文的原文是 5 Great Python Interview Questions,同时谢谢 @非乌龟 指出我的疏漏,没有来源标记,也赞其细心,希望看文章的同时 ...

英文:toptal

译文:yexiaobai

链接:segmentfault.com/a/1190000000618513


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


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


classParent(object):

x=1

classChild1(Parent):

pass

classChild2(Parent):

pass

printParent.x,Child1.x,Child2.x

Child1.x=2

printParent.x,Child1.x,Child2.x

Parent.x=3

printParent.x,Child1.x,Child2.x


答案


以上代码的输出是:


111

121

323


使你困惑或是惊奇的是关于最后一行的输出是 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)

div1( 声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部