python面试十题
问题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__ = A
obj.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 5
B INIT
B fn
NEW 20
INIT 20
A 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 = 9
def f1():
num = 20
def f2():
print(num)
f2()
f1()
f2()
答:输出的是
9
9
注意中间的f1函数只是单纯的赋值,而没有print打印输出,我看完题第一感觉答的是9,20,9
就聪明反被聪明误了。
此题考察全局变量和局部变量。f1函数中的num 不是全局变量,如果你想修改 num ,则必须用 global 关键字声明。
比如修改成下面这样的代码,就会输出的是9和20:
num = 9
def f1():
global num
num = 20
def f2():
print(num)
f2()
f1()
f2()
问题6: 如何使用一行代码交换两个变量值?
例:
a = 8
b = 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.mydefault
a1 = 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.mydefault
a1 = 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 gn
zw = 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】
python面试十题的更多相关文章
- Python面试真题答案或案例
Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...
- Python面试315题
感谢老男孩的武沛齐老师辛苦整理和分享,本文是转自他的博客. 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C# ...
- 数百道BAT等大厂最新Python面试真题,学到你手软!
春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法.提升 Python 编程能力,总是大有裨益的.今天,小编发现了一份好资源:Python 实现的面试题集锦! ...
- Python面试真题第四节
81.举例说明SQL注入和解决办法 82.s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', ...
- Python面试真题第三节
51.正则匹配,匹配日期2018-03-20 url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateR ...
- Python面试真题第二节
26.字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳" 27.filter方法求 ...
- Python面试真题第一节
1.一行代码实现1--100之和 2.如何在一个函数内部修改全局变量 3.列出5个python标准库 4.字典如何删除键和合并两个字典 5.谈下python的GIL 6.python实现列表去重的方法 ...
- python面试30-40题
1.简述python引用计数机制 python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题. 引用计数算法 当有1个变量保存了对 ...
- python面试1-30题
1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 s ...
随机推荐
- Spring的@Scheduled任务调度
一. 定时任务实现方式 定时任务实现方式: Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行 ...
- Hive是什么
Hive是什么1)Hive 是建立在Hadoop (HDFS/MR)上的用于管理和查询结果化/非结构化的数据仓库:2)一种可以存储.查询和分析存储在Hadoop 中的大规模数据的机制:3)Hive 定 ...
- 安装ftp服务
1.首先判断你服务器上是否安装了vsftpd 2.安装vsftpd 3.配置文件/etc/vsftpd/vsftpd.conf 禁止匿名用户登录,把YES改为NO,默认为YES 限制ftp用户跳出家目 ...
- 基于Ionic的移动框架搭建
- XP系统运行wpf程序出现透明现象的解决
xp 虚拟机运行WPF程序的时候,有部分控件透明,在这儿有一个可能的解决方案: 关闭系统的硬件加速: 1. 按“WIN” + R 键,在“运行”输入框中输入“dxdiag”: 2. 在“DirectX ...
- MyEclipse中快速查看错误
当代码中有错误的时候,MyEclipse会用红线标示错误.这个时候在错误地方按下F2就会显示错误详情了.
- 四、获取IP地址工具包
由于getHostAddress()方法在Linux下读取hosts文件获取的是127.0.0.1 InetAddress.getLocalHost().getHostAddress() 所以这里采用 ...
- HwUI,CMS管理系统模板,漂亮,简单,兼容好
HwUI兼容目前所有浏览器,IE6+,Opera,Firefox,Chorme,Safari,由于IE6基本已废弃,所以也没有测试IE6的兼容,但做了部分IE6兼容调整.HwUI操作简单,路由导航不需 ...
- php返回数组后处理(开户成功后弹窗提示)
1. 在注册的时候,注册成功后经常会弹窗提示自己注册的信息,这类做法需要返回mysql数据库中获取的数组值,返回给前台页面,赋值给弹窗. 2.做法: 返回数组 打印的数组的值 返回数组处理 赋值给弹窗 ...
- ajax获取富文本数据无法正常渲染到页面问题
有时候富文本渲染到页面的时候 会连带标签一起渲染出来. 解决办法: 首先引用 <script src="https://cdn.jsdelivr.net/npm/fuwenben ...