面试试题一

 

一、可迭代对象、迭代器、生成器分别是啥?有啥区别?

可迭代对象:可以进行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)。

 

 

posted @ 2018-03-19 14:26  GuoXY  阅读(131)  评论(0)    收藏  举报