问题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面试十题的更多相关文章

  1. Python面试真题答案或案例

    Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...

  2. Python面试315题

    感谢老男孩的武沛齐老师辛苦整理和分享,本文是转自他的博客. 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C# ...

  3. 数百道BAT等大厂最新Python面试真题,学到你手软!

    春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法.提升 Python 编程能力,总是大有裨益的.今天,小编发现了一份好资源:Python 实现的面试题集锦! ...

  4. Python面试真题第四节

    81.举例说明SQL注入和解决办法 82.s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', ...

  5. Python面试真题第三节

    51.正则匹配,匹配日期2018-03-20 url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateR ...

  6. Python面试真题第二节

    26.字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳" 27.filter方法求 ...

  7. Python面试真题第一节

    1.一行代码实现1--100之和 2.如何在一个函数内部修改全局变量 3.列出5个python标准库 4.字典如何删除键和合并两个字典 5.谈下python的GIL 6.python实现列表去重的方法 ...

  8. python面试30-40题

    1.简述python引用计数机制 python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题.   引用计数算法 当有1个变量保存了对 ...

  9. python面试1-30题

    1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 s ...

随机推荐

  1. 在Ubuntu16.04上使用Open Grok

    Open Grok是一个强大的源代码搜索和对照引擎,是Open Solaris的源文件浏览及搜索工具.虽然Open Solaris已经不复存在,但这个工具仍然处于开发与维护之中. 相信我,绝对值得你拥 ...

  2. nuxt踩过的坑

    nuxt.js 简单介绍 nuxt官网:https://zh.nuxtjs.org/ 1.nuxt.js的原理图: 具体的原理介绍官网有详细的解释,欢迎移步官网,这里不再复述. 2.nuxt.js的优 ...

  3. button按钮被输入法顶起来,遮盖了input输入框

    在做手机端的表单提交的时候,在chrome浏览器调试的时候,忘记输入法会引起布局的问题.在webApp里input输入框,会自动调起输入法,但是输入法会改变浏览器的可视区域的大小.就是会把浏览器可视区 ...

  4. MySQL 继续-- Win7 安装及后续工作

    学MySQL 差不多了,就要实战,实战怎么能少得了软件. 一  : 下载软件 可以到 MySQL 官网直接下载 (社区版) : http://dev.mysql.com/downloads/mysql ...

  5. 阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)

    这个问题花费了我将近两天的时间,经过多次试错和尝试,现在想分享给大家来解决此问题避免大家入坑,以前都是在局域网上搭建的hadoop集群,并且是局域网访问的,没遇见此问题. 因为阿里云上搭建的hadoo ...

  6. java实现黑客帝国数字雨特效(转)

    原文出处https://www.cnblogs.com/x110/p/4239585.html 我在原文的基础上做了优化,使动画看起来更流畅,效果如下 import java.awt.*; impor ...

  7. Job控制台(elastic job lite console)

    elastic job lite console: 设计理念 1.本控制台和Elastic Job并无直接关系,是通过读取Elastic Job的注册中心数据展现作业状态,或更新注册中心数据修改全局配 ...

  8. redis 批量删除key

    redis-cli -h -p keys -p del s

  9. WAI-ARIA无障碍网页应用属性完全展示——张鑫旭

    一.你至少应该知道ARIA是什么东西! WAI-ARIA指无障碍网页应用.主要针对的是视觉缺陷,失聪,行动不便的残疾人以及假装残疾的测试人员.尤其像盲人,眼睛看不到,其浏览网页则需要借助辅助设备,如屏 ...

  10. github上手实践教程

    简介: SSH公私钥的使用 github的使用 git 工具的基本使用 基本步骤: 一.github的使用 1.github账号的创建[官网一步一步创建就行了,这一步骤省略] 2.创建远程仓库: 创建 ...