文章目录

  • Python面试题—Python函数、类与模块(一)
  • 1. 请用一句话解释什么样的程序语言可以使用装饰器。
  • 2. Python的`__init__`是什么?
  • 3. Python的类内的关键词self是什么?
  • 4. 说明封装(encapsulation)。
  • 5. 说明`super()`。
  • 6. 说明多态(polymorphism)。
  • 7. 说明`__iter__()`方法和`__next__()`方法。
  • 8. 说明`map()`函数用法。
  • 9. 说明`filter()`函数用法。
  • 10. 说明`reduce()`函数用法。


Python面试题—Python函数、类与模块(一)

1. 请用一句话解释什么样的程序语言可以使用装饰器。

函数可以当作参数传递的程序语言。

2. Python的__init__是什么?

建立类很重要的一个工作是初始化整个类,所谓的初始化类是在类内建立一个初始化方法(method),这是一个特殊方法。当在程序内宣告这个类的对象时将自动执行这个方法。初始化方法有一个固定名称是__init__(),init也就是initialization的缩写。

3. Python的类内的关键词self是什么?

__init__()初始化函数中,self是必须的,它放在所有参数的最前面(相当于最左边),Python在初始化时会自动传入这个参数self,代表的是类本身的对象,未来在类内想要参照各属性函数执行运算皆要使用self。

4. 说明封装(encapsulation)。

面向对象程序设计时,外部直接引用也代表可以直接修改类内的属性值,这将造成类数据不安全。Python提供了一个私有属性方法的概念,使类外无法直接更改类内的私有属性,类外也无法直接调用私有方法,这个概念又称为封装(encapsulation)。

5. 说明super()

在面向对象的程序设计里,也可以使用Python的super()方法取得基类的属性。

6. 说明多态(polymorphism)。

基类与衍生类有相同方法名称的实例,就是多态,但是在多态的概念中是不局限在必须有父子关系的类。

7. 说明__iter__()方法和__next__()方法。

建立类的时候也可以将类定义成一个迭代对象,类似list或tuple,供for…in循环内使用,这时类需设计next()方法,取得下一个值,直到达到结束条件,可以使用raise StopIteration终止继续。

8. 说明map()函数用法。

内建函数map(),语法格式为map(func,iterable)。上述函数将依次把iterable(可重复执行的字符串string、列表list或元组tuple等)的元素(item)放入func()中,然后将func()函数执行结果回传,上述参数func常常使用lambda表达式。

list1 = [1,2,3]
list2 = list(map(lambda x:x**2,list1))# [1,4,9]

9. 说明filter()函数用法。

内建函数filter()只要用于筛选序列,语法格式为filter(func,iterable)。上述函数将依次把iterable(可重复执行的字符串string、列表list或元组tuple等)的元素(item)放入func()中,然后将func()函数执行结果是True的元素组成新的筛选对象(filter object)回传,上述参数func常常使用lambda表达式。

list1 = [1,2,3,4,5]
list2 = list(filter(lambda x:(x%2==1),list1)) #[1,3,5]

10. 说明reduce()函数用法。

内建函数reduce()的语法格式为reduce(func,iterable)。它会先对可迭代对象的第1和第2个元素操作,得到结果再和第3个元素操作,直到最后一个元素。假设iterable有4个元素,可用下列方式解说:reduce(f,[a,b,c,d])=f(f(f(a,b),c),d)

早期reduce()是内建函数,现在被移至functools模块中。

"""下为字符串转整数的函数"""
from functools import reduce
def strToInt(s):
    def charToNums(s):
        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    return reduce(lambda x,y:10*x+y,map(charToNums,s))

string = '123'
x = strToInt(string) #123