文章目录
- 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