美文网首页
python高级之路

python高级之路

作者: Dalvik_ | 来源:发表于2019-01-10 14:20 被阅读0次

    == 和 is 的区别

    ==比较的是值是否相等 is 比较的是id是否相等


    两者的比较.png

    深拷贝 浅拷贝

    浅拷贝:只是单纯的拷贝地址(指向数据的引用)
    深拷贝:新开辟内存地址存放数据


    深拷贝的实现.png

    使用copy模块的copy功能的时候,会根据拷贝的内容是可变类型或者不可变类型拷贝的内容不一样

    进制之间的转换

    十进制转化二 八 十六进制.png

    私有化

    • xx: 公有变量
    • _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
    • __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
    • xx:双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字
    • xx_:单后置下划线,用于避免与Python关键词的冲突
      通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object)机制就可以访问private了。

    生成器(需要时生成数据,不需要占用大量内存空间)

    列表生成式

    a  = [x*2 for x in range(10)]
    

    生成器实现方式
    第一种方式

    b = (x*2 for x in range(10))
    

    第二种方式

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

    生成器生成元素

    next(b)
    

    生成器可以用for循环

    for a in fib(5):
        print(a)
    

    迭代器

    1.可迭代对象
    以直接作用于 for 循环的数据类型有以下几种:
    一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
    一类是 generator ,包括生成器和带 yield 的generator function。
    这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

    1. 判断是否可以迭代
    from collections import Iterable
    
    isinstance([], Iterable)
    True
    

    3.迭代器
    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    注:生成器肯定是迭代器 迭代器不一定是生成器
    4.iter()函数
    生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator。
    把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数

    isinstance(iter([]), Iterator)
    
    True
    

    闭包

    在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包

    def test(number):
        def test_in(number_in):
            print("in test_in 函数, number_in is %d"%number_in)
            return number+number_in
        #其实这里返回的就是闭包的结果
        return test_in
    
    

    装饰器

    def w1(func):
        def inner():
            print("正在验证...")
            func()
        return inner
    
    @w1  # @w1 == f1= w1(f1)
    def f1():
        print("-------f1------")
    def f2():
        print("-------f2-------")
    # f1= w1(f1)
    f1()
    

    通用的装饰器

    def func(function_name):
        def func_inner(*args, **kwargs):
            ret = function_name(*args, **kwargs)
            return ret
    
        return func_inner
    

    可是实现对有返回值 无返回值 不定常参数的函数进行装饰

    相关文章

      网友评论

          本文标题:python高级之路

          本文链接:https://www.haomeiwen.com/subject/tzgvrqtx.html