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

  1. class A():
  2. def show(self):
  3. print("base show")
  4. class B(A):
  5. def show(self):
  6. print("derived show")
  7. obj = B()
  8. obj.show()

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

  1. class A():
  2. def show(self):
  3. print("base show")
  4. class B(A):
  5. def show(self):
  6. print("derived show")
  7. obj = B()
  8. obj.__class__ = A
  9. obj.show()

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

  1. class A():
  2. def __init__(self, a, b):
  3. self.__a = a
  4. self.__b = b
  5. def myprint(self):
  6. print('a =', self.__a, 'b =', self.__b)
  7. a1 = A(10, 20)
  8. a1.myprint()
  9. a1(80)

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

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

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

完整代码如下:

  1. class A():
  2. def __init__(self, a, b):
  3. self.__a = a
  4. self.__b = b
  5. def myprint(self):
  6. print('a =', self.__a, 'b =', self.__b)
  7. def __call__(self, num):
  8. print('call:', num + self.__a)
  9. a1 = A(10, 20)
  10. a1.myprint()
  11. a1(80)

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

  1. class B():
  2. def fn(self):
  3. print('B fn')
  4. def __init__(self):
  5. print('B INIT')
  6. class A():
  7. def fn(self):
  8. print('A fn')
  9. def __new__(cls, a):
  10. print("NEW", a)
  11. if a > 10:
  12. return super(A, cls).__new__(cls)
  13. return B()
  14. def __init__(self, a):
  15. print("INIT", a)
  16. a1 = A(5)
  17. a1.fn()
  18. a2 = A(20)
  19. a2.fn()

答:

输出的结果为

  1. NEW 5
  2. B INIT
  3. B fn
  4. NEW 20
  5. INIT 20
  6. A fn

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

__init__ 是创建对象是调用的。

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

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

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

输出结果为:

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

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

  1. num = 9
  2. def f1():
  3. num = 20
  4. def f2():
  5. print(num)
  6. f2()
  7. f1()
  8. f2()

答:输出的是

  1. 9
  2. 9

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

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

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

  1. num = 9
  2. def f1():
  3. global num
  4. num = 20
  5. def f2():
  6. print(num)
  7. f2()
  8. f1()
  9. f2()

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

例:

  1. a = 8
  2. b = 9

答:

  1. (a, b) = (b, a)

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

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

  1. class A():
  2. def __init__(self, a, b):
  3. self.a1 = a
  4. self.b1 = b
  5. print('init')
  6. def mydefault(self):
  7. print('default')
  8. a1 = A(10, 20)
  9. a1.fn1()
  10. a1.fn2()
  11. a1.fn3()

答:

  1. class A():
  2. def __init__(self, a, b):
  3. self.a1 = a
  4. self.b1 = b
  5. print('init')
  6. def mydefault(self):
  7. print('default')
  8. def __getattr__(self, item):
  9. return self.mydefault
  10. a1 = A(10, 20)
  11. a1.fn1()
  12. a1.fn2()
  13. a1.fn3()

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

才会调用方法 __getattr__。要注意的是该方法需要传入至少两个参数。

而当 fn1 方法需要传入参数时,我们可以给 mydefault 方法增加一个*args不定参数来兼容。

  1. class A():
  2. def __init__(self, a, b):
  3. self.a1 = a
  4. self.b1 = b
  5. print('init')
  6. def mydefault(self, *args):
  7. print('default:' + str(args[0]))
  8. def __getattr__(self, name):
  9. print("other fn:", name)
  10. return self.mydefault
  11. a1 = A(10, 20)
  12. a1.fn1(33)
  13. a1.fn2('hello')
  14. a1.fn3(10)

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

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

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

__all__ = ['mod1', 'mod3']

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

答:

  1. def mulby(num):
  2. def gn(val):
  3. return num * val
  4. return gn
  5. zw = mulby(7)
  6. print(zw(9))

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

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

  1. def strtest1(num):
  2. str = 'first'
  3. for i in range(num):
  4. str += "X"
  5. 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. Java多态的一些陷阱

    Java多态是如何实现的? Java的多态和C++一样,是通过延时绑定(late binding)或者说运行时绑定(runtime binding)来实现的.当调用某一个对象引用的方法时,因为编译器并 ...

  2. Go RabbitMQ (一)

    RabbitMQ 简介 RabbitMQ是一个消息代理,用来负责接收和转发消息. 术语 生产者:生产者是负责发送消息的 队列:队列是RabbitMQ用来存储消息的,受主机内存和磁盘大小的限制,本质上是 ...

  3. [转].Net实现本地化简易教程

    本文转自:https://www.cnblogs.com/csdbfans/archive/2011/10/17/2214048.html 实现多语言版本的支持,就是所谓的国际化,也说是本地化. 今天 ...

  4. npm run build之后生成的dist如何扔到服务器运行(npm run build之后如何本地运行)

    运行npm run build之后,会生成一个dist文件夹,里面的目录结构大概是这样的: 生成完的文件我们怎么来运行呢?直接在本地打开inde.html是无法运行的,打包的时候有提示: 构建文件应该 ...

  5. [android] 手机卫士黑名单功能(ListView优化)

    上一篇记录了使用ListView展示出来了100条数据,当慢慢拖动的时候,不会有问题,但是当拖动很快的时候,应用会报anr错误 查看错误日志,看到报OutOfMemoryError,内存不足 List ...

  6. Android Studio开发笔记

    工欲善其事,必先利其器. 来分享下一些tips吧. android studio优化 我的习惯是从visual studio沿袭过来的,所以快捷键都是参照VS改过来的. 设置调优 不打开上次打开的工程 ...

  7. 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  8. Java8简明学习之接口默认方法

    接口中有默认方法实现Java8允许我们使用default关键字,为接口声明添加非抽象的方法实现. public interface DefaultInterFace { int plus(int x, ...

  9. springMVC 简单应用

    一,controller FileController package com.dkt.controller; import java.io.File; import java.io.FileInpu ...

  10. mybatis作用、基本使用、小结

    1. MyBatis 1.1. 作用 MyBatis是持久层框架,它是支持JDBC的!简化了持久层开发! 使用MyBatis时,只需要通过接口指定数据操作的抽象方法,然后配置与之关联的SQL语句,即可 ...