博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面试十题
阅读量:5086 次
发布时间:2019-06-13

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

问题1: 请问如何修改以下python代码,使得下面的代码调用类A的show方法?

class A():    def show(self):        print("base show")class B(A):    def show(self):        print("derived show")obj = B()obj.show()

答:这道题的考点是类继承,只要通过__class__方法指定类对象就可以了。修改如下,其实就是只补充了一行obj.__class__ = A代码:

class A():    def show(self):        print("base show")class B(A):    def show(self):        print("derived show")obj = B()obj.__class__ = Aobj.show()

问题2:请问如何修改以下python代码,使得代码能够运行?

class A():    def __init__(self, a, b):        self.__a = a        self.__b = b    def myprint(self):        print('a =', self.__a, 'b =', self.__b)a1 = A(10, 20)a1.myprint()a1(80)

答:此题考察的是方法对象,为了能让对象实例能被直接调用,需要实现 __call__ 方法,补充代码如下:

def __call__(self, num):        print('call:', num + self.__a)

调用加a的值只是一个示例,也可以加b的值等,题目主要考的是实现call调用。

完整代码如下:

class A():    def __init__(self, a, b):        self.__a = a        self.__b = b    def myprint(self):        print('a =', self.__a, 'b =', self.__b)    def __call__(self, num):        print('call:', num + self.__a)a1 = A(10, 20)a1.myprint()a1(80)

问题3: 下面这段代码的输出是什么?

class B():    def fn(self):        print('B fn')    def __init__(self):        print('B INIT')class A():    def fn(self):        print('A fn')    def __new__(cls, a):        print("NEW", a)        if a > 10:            return super(A, cls).__new__(cls)        return B()    def __init__(self, a):        print("INIT", a)a1 = A(5)a1.fn()a2 = A(20)a2.fn()

答:

输出的结果为

NEW 5B INITB fnNEW 20INIT 20A fn

此题考察的是new和init的用法,使用 __new__方法,可以决定返回那个对象,也就是创建对象之前调用的,这个常见于于设计模式的单例、工厂模式。

__init__是创建对象是调用的。

问题4: 下面这段代码输出什么?

ls = [1, 2, 3, 4]list1 = [i for i in ls if i > 2]print(list1)list2 = [i * 2 for i in ls if i > 2]print(list2)dic1 = {x: x ** 2 for x in (2, 4, 6)}print(dic1)dic2 = {x: 'item' + str(x ** 2) for x in (2, 4, 6)}print(dic2)set1 = {x for x in 'hello world' if x not in 'low level'}print(set1)

答:这题算简单,没有什么陷阱,只是单纯的考察你对列表和字典的生成式的掌握。

输出结果为:

[3, 4][6, 8]{2: 4, 4: 16, 6: 36}{2: 'item4', 4: 'item16', 6: 'item36'}{'r', 'h', 'd'}

问题5: 下面这段代码输出什么?

num = 9def f1():    num = 20def f2():    print(num)f2()f1()f2()

答:输出的是

99

注意中间的f1函数只是单纯的赋值,而没有print打印输出,我看完题第一感觉答的是9,20,9就聪明反被聪明误了。

此题考察全局变量和局部变量。f1函数中的num 不是全局变量,如果你想修改 num ,则必须用 global 关键字声明。

比如修改成下面这样的代码,就会输出的是9和20:

num = 9def f1():    global num    num = 20def f2():    print(num)f2()f1()f2()

问题6: 如何使用一行代码交换两个变量值?

例:

a = 8b = 9

答:

(a, b) = (b, a)

考的就是你代码够不够pythonic。

问题7: 如何添加代码,使得没有定义的方法都调用mydefault方法?

class A():    def __init__(self, a, b):        self.a1 = a        self.b1 = b        print('init')    def mydefault(self):        print('default')a1 = A(10, 20)a1.fn1()a1.fn2()a1.fn3()

答:

class A():    def __init__(self, a, b):        self.a1 = a        self.b1 = b        print('init')    def mydefault(self):        print('default')    def __getattr__(self, item):        return self.mydefaulta1 = A(10, 20)a1.fn1()a1.fn2()a1.fn3()

此题的考的是Python的默认方法, 只有当没有定义的方法调用时,

才会调用方法 __getattr__。要注意的是该方法需要传入至少两个参数。
而当 fn1 方法需要传入参数时,我们可以给 mydefault 方法增加一个*args不定参数来兼容。

class A():    def __init__(self, a, b):        self.a1 = a        self.b1 = b        print('init')    def mydefault(self, *args):        print('default:' + str(args[0]))    def __getattr__(self, name):        print("other fn:", name)        return self.mydefaulta1 = A(10, 20)a1.fn1(33)a1.fn2('hello')a1.fn3(10)

问题8 : 一个包里有三个模块,mod1.py,mod2.py , mod3.py ,

但使用 from demopack import *导入模块时,如何保证只有 mod1 、 mod3 被导入了。

答:在包中增加 __init__.py 文件,并在文件中增加:

__all__ = ['mod1', 'mod3']

问题9: 写一个函数,接收整数参数 n ,返回一个函数,函数返回n和参数的积。

答:

def mulby(num):    def gn(val):        return num * val    return gnzw = mulby(7)print(zw(9))

这一题答案虽然简单,但要读懂题意却颇难,考的是嵌套函数和返回值。

问题10: 请问下面的代码有什么隐患?(Python2中)

def strtest1(num):    str = 'first'    for i in range(num):        str += "X"    return str

答:由于变量str是个不可变对象,每次迭代,python都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。

【end】

转载于:https://www.cnblogs.com/tielemao/p/9210314.html

你可能感兴趣的文章
修复nexus4由于使用完美刷机或者刷机精灵导致的底层文件受损
查看>>
netty的入门
查看>>
监控mysql主从同步状态是否异常
查看>>
Leetcode 675.为高尔夫比赛砍树
查看>>
Java对象
查看>>
2017-2018-1 20155226 《信息安全系统设计基础》课程总结
查看>>
个人工作总结10
查看>>
数组的默认值
查看>>
(二)联动的饼图与柱形图
查看>>
js cookie实例
查看>>
用muduo实现memcached协议的例子
查看>>
数据结构与算法-二叉排序树
查看>>
linux学习第十四天 (Linux就该这么学)找到一本不错的Linux电子书
查看>>
R语言将List转为矩阵do.call
查看>>
AS-PATH(路径属性)路由路径欺骗术
查看>>
linux命令
查看>>
arcmap配置的mxd慢的问题
查看>>
Jenkins的介绍
查看>>
数论中的分块思想
查看>>
14. Longest Common Prefix
查看>>