面试试题一
一、可迭代对象、迭代器、生成器分别是啥?有啥区别?
可迭代对象:可以进行for循环都是可迭代对象,原因是其内部实现了一个__iter__方法
迭代器:能够进行next(迭代器对象),都是迭代器对象,其内部实现了__iter__和__next__方法,
迭代器属于可迭代对象
生成器:元祖推导式和函数里使用yield的函数都是生成器,生成器本质上属于迭代器,惰性机制,节省内存
二、手写装饰器
def wrapper(func): def inner(*args,**kwargs): # 执行函数前操作 ret = func(*args,**kwargs) # 执行函数后操作 return ret return inner @wrapper def func(): print(666) func()
三、Python函数式编程是什么?
函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambdacalculus)。
而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
和过程化编程相比,函数式编程里,函数的计算可随时调用。
四、面向对象有哪些内置方法
__str__ __del__ __len__ __hash__ __eq__ __format__ __new__ __getitem__、__setitem__、__delitem__
五、repr'和str的区别
Python打印值的时候会保持该值在Python代码中的状态,不是用户所希望看到的状态。而使用print打印值则不一样,print打印出来的值是用户所希望看到的状态。
str 把值转换为合理形式的字符串,给用户看的。str实际上类似于int,long,是一种类型。
repr() 创建一个字符串,以合法python表达式的形式来表示值。repr()是一个函数。
总而言之,str出来的值是给人看的字符串,repr出来的值是给机器看的,括号中的任何内容出来后都是在它之上再加上一层引号
如果str和reor只能选择一个的时候要用repr,可以顶替str。
六、手写递归斐波那契数列
def f(n): if n==0: return 0 elif n==1: return 1 elif n>1: return f(n-1) + f(n-2)
七、递归的两个准则是什么?
1、调用自身
2、结束条件
八、简述类属性和对象属性
#类属性和对象属性的作用域 #类属性:公有属性,私有属性,内置属性 #对象属性:公有属性,私有属性,内置属性,方法变量,全局变量 #类属性和对象属性定义 #Python一切皆对象(object),每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 #对象的属性可能来自于其类定义,叫做类属性(class attribute)。类属性可能来自类定义自身,也可能根据类定义继承来的。 #一个对象的属性还可能是该对象实例定义的,叫做对象属性(object attribute)。