• 面试题整理


    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)。
    

      

      

  • 相关阅读:
    TCP和UDP知识总结
    使用 DataX 增量同步数据(转)
    python对象类型
    Asp.net mvc使用SignaIR
    数据库分库分表思路 [转]
    Linux基本操作 [转]
    RabbitMQ入门教程 [转]
    设计模式
    设计模式六大原则
    Javascript实现数组去重 [转]
  • 原文地址:https://www.cnblogs.com/strive-man/p/8598539.html
Copyright © 2020-2023  润新知