1、可迭代对象,迭代器
可迭代对象只含有__iter__方法的数据是可迭代对象 迭代器:含有__iter__方法,并且含有__next__方法的数据是迭代器
2、手写装饰器
def wrapper(func): def inner(*args,**kwargs): '''执行函数前进行的操作''' ret = func(*args,**kwargs) '''执行函数后进行的操作''' return ret return inner
3、python函数式编程是什么
#什么是函数式编程? #函数式编程使用一系列的函数解决问题。 #函数仅接受输入并产生输出,不包含任何能影响产生输出的内部状态。任何情况下,使用相同的参数调用函数始终能产生同样的结果。 #在一个函数式的程序中,输入的数据“流过”一系列的函数,每一个函数根据它的输入产生输出。函数式风格避免编写有“边界效应”(side effects)的函数:修改内部状态,或者是其他无法反应在输出上的变化。完全没有边界效应的函数被称为“纯函数式的”(purely functional)。避免边界效应意味着不使用在程序运行时可变的数据结构,输出只依赖于输入。 #可以认为函数式编程刚好站在了面向对象编程的对立面。对象通常包含内部状态(字段),和许多能修改这些状态的函数,程序则由不断修改状态构成;函数式编程则极力避免状态改动,并通过在函数间传递数据流进行工作。但这并不是说无法同时使用函数式编程和面向对象编程,事实上,复杂的系统一般会采用面向对象技术建模,但混合使用函数式风格还能让你额外享受函数式风格的优点。
4、面向对象有哪些内置方法
__str__(self): __del__()析构法 __call__(self,*args,**kwargs) __dict__ 返回属性和方法 __iter__() __new__()构造法 类的实例属性是字典的时候,使用以下三个方法 __getitem__() :返回当前的实例属性的字典值 __setitem__():属性中的key和value重新赋值 __delitem__():删除实例属性中的某个字典key和value值
5、repr和str的区别
Python打印值的时候会保持该值在Python代码中的状态,不是用户所希望看到的状态。而使用print打印值则不一样,print打印出来的值是用户所希望看到的状态。
例如:
>>> "Hello, world!" 'Hello, world!' # Python打印出来的值是给python理解的,这里python理解为字符串,所以带着引号 >>> 1000L # python理解为Long型的数字,所以它打印出来的时候也带着后缀L 1000L >>> print "Hello, world!" # 打印一个字符串,给用户看的,所以不带引号 Hello, world! >>> print 1000L # 用户看到的当然是一个数字1000,而不是字符串1000L 1000
str和repr实际就分别对应上述两种显示方式。
str
把值转换为合理形式的字符串,给用户看的。str实际上类似于int,long,是一种类型。
>>> print str("Hello, world!") Hello, world! >>> print str(1000L) 1000 >>> str("Hello, world!") 'Hello, world!' # 字符串转换之后仍然是字符串 >>> str(1000L) '1000'
repr()
创建一个字符串,以合法python表达式的形式来表示值。repr()是一个函数。
>>> print repr("Hello, world!") 'Hello, world!' >>> print repr(1000L) 1000L >>> repr("Hello, world!") "'Hello, world!'" >>> repr(1000L) '1000L'
总而言之,str出来的值是给人看的字符串,repr出来的值是给机器看的,括号中的任何内容出来后都是在它之上再加上一层引号 如果str和reor只能选择一个的时候要用repr,可以顶替str。
6、手写递归裴波那切数列
#递归函数---裴波那切 def fibo(n,a=0,b=1):#定义一个函数 if n == 1:return b#如果n==1则返回b return fibo(n-1,b,a+b)#位置传参,覆盖默认参数的值 print(fibo(6))
#非递归函数---裴波那切数列 def fib_circle(n):#定义一个函数 a=1#给a和b赋值 b=1 if n<=2:#如果n小于等于2则返回1 return 1 else:#否则 for i in range(2,n):#循环2到n-1之间的所有的数 c=a+b a=b b=c return c#返回一个c print(fib_circle(6))#打印并调用函数
7.递归两个准则是什么
调用自身和结束条件
8、类属性和对象属性
#类属性和对象属性的作用域 #类属性:公有属性,私有属性,内置属性 #对象属性:公有属性,私有属性,内置属性,方法变量,全局变量 #类属性和对象属性定义 #Python一切皆对象(object),每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 #对象的属性可能来自于其类定义,叫做类属性(class attribute)。类属性可能来自类定义自身,也可能根据类定义继承来的。 #一个对象的属性还可能是该对象实例定义的,叫做对象属性(object attribute)。