51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2605|回复: 2
打印 上一主题 下一主题

[其他] 5个Python面试常问的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-22 11:38:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

概述


Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了5个Python面试官经常问的问题,供大家参考学习。


1、类继承

有如下的一段代码:

  1. class A(object):
  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()
复制代码

如何调用类A的show方法了。
方法如下:

  1. obj.__class__ = Aobj.show()
复制代码

__class__方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。


2、方法对象

问题:为了让下面这段代码运行,需要增加哪些代码?

  1. class A(object):
  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. class A(object):
  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
复制代码


3、new和init

下面这段代码输出什么?

  1. class B(object):
  2.     def fn(self):
  3.         print 'B fn'
  4.     def __init__(self):
  5.         print "B INIT"


  6. class A(object):
  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__是创建对象是调用的。


4、Python list和dict生成

下面这段代码输出什么?

  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. set(['h', 'r', '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
复制代码





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-21 22:28 , Processed in 0.061879 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表