Python面试知识点总结2

Python面试知识点总结2

  1. 装饰器
    简单的个人理解就是改变原有函数的指向
    简单的实验如下

    import time
    
    def sum1():
        sum = 1+1
        print (sum)
    
    def timeit(func):
        def test():
            start = time.clock()
            func()
            end =time.clock()
            print("time used:", end - start)
        return test
    
    sum1 = timeit(sum1)
    sum1()
    

    其中 sum1 = timeit(sum1) 这句即起到了装饰器的作用
    改变代码如下

    import time
    
    
    def timeit(func):
        def test():
            start = time.clock()
            func()
            end =time.clock()
            print("time used:", end - start)
        return test
    
    #sum1 = timeit(sum1)
    @timeit
    
    def sum1():
        sum = 1+1
        print (sum)
        
    
    sum1()
    

    运行结果相同,此时要注意要将装饰器先写,sum1函数定义在后,否则报错

  2. 匿名函数
    lambda函数的语法:lambda arg1,arg2,…argn:expression
    lambda 函数参数:返回值

    f = lambda a,b,c:a+b+c
    print(f(1,2,3))
    
  3. 生成器与迭代器
    生成器
      生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。
      生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器。
      python中创建生成器第一种方法是将列表生成式的[ ]换成( )即可。

    #列表生成式
    lis = [x*x for x in range(10)]
    print(lis)
    #生成器
    generator_ex = (x*x for x in range(10))
    print(generator_ex)
     
    结果:
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    <generator object <genexpr> at 0x000002A4CBF9EBA0>
    

    生成器保存的是算法,用next()或者循环取值。循环取值常用

    #生成器
    generator_ex = (x*x for x in range(10))
    print(next(generator_ex))
    
    #生成器
    generator_ex = (x*x for x in range(10))
    for i in generator_ex:
        print(i)
    

    yield

    def fib(max):
        n,a,b =0,0,1
        while n < max:
            yield b
            a,b =b,a+b
            n = n+1
        return 'done'
    

      可以通过next返回值,或者循环,每次执行到yeild时会暂停并返回yeild后面的值,节省内存,类似生成器,保存的是算法

  4. 多态
    方法多态性,体现在方法的重载和重写上
      方法的重载是指同一个方法名称,根据其传入的参数类型、个数和顺序的不同,所调用的方法体也不同,即同一个方法名称在一个类中有不同的功能实现;
      方法的重写是指父类之中的一个方法名称,在不同的子类有不同的功能实现,而后依据实例化子类的不同,同一个方法,可以完成不同的功能。
    对象多态性,体现在父、子对象之间的转型上
      1.向上转型(Upcast)(自动转型):父类 父类对象=子类实例
    将子类对象赋值给父类对象,这样将子类对象自动转换为父类对象。这种转换方式是安全的。
      2.向下转型(Downcast)(强制转型):子类 子类对象=(子类)父类对象。
      将父类对象赋值给子类对象。这种转换方式是非安全的。在特定背景下如果需要父类对象转换为子类对象,就必须使用强制类型转换。

  5. 使用Python发邮件
    用smtplib库

    #创建SMTP对象
    import smtplib
    smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
    '''
    host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。
    port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
    local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。
    '''
    #Python SMTP 对象使用 sendmail 方法发送邮件
    SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
    '''
    from_addr: 邮件发送者地址。
    to_addrs: 字符串列表,邮件发送地址。
    msg: 发送消息
    '''
    

    简单的实例

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
     
    sender = 'from@runoob.com'
    receivers = ['429240967@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
     
    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
    message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
    message['From'] = Header("菜鸟教程", 'utf-8')   # 发送者
    message['To'] =  Header("测试", 'utf-8')        # 接收者
     
    subject = 'Python SMTP 邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
     
     
    try:
        smtpObj = smtplib.SMTP('localhost')
        smtpObj.sendmail(sender, receivers, message.as_string())
        print "邮件发送成功"
    except smtplib.SMTPException:
        print "Error: 无法发送邮件"
    
  6. raise语句自己触发异常
    更多异常相关参考菜鸟教程
    菜鸟教程—异常

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    # 定义函数
    def mye( level ):
        if level < 1:
            raise Exception,"Invalid level!"
            # 触发异常后,后面的代码就不会再执行
    try:
        mye(0)            # 触发异常
    except Exception,err:
        print 1,err
    else:
        print 2
     
     #结果
     $ python test.py 
     1 Invalid level!
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值