美文网首页
2018-03-28 python高级编程隔空小结

2018-03-28 python高级编程隔空小结

作者: 王zhaojun | 来源:发表于2018-03-28 20:33 被阅读0次

    No.1 包(lib)、模块(module)

    1.1 在python中存在包(lib)和模块(module)两个常见概念。

    :用来分门别类存放模块代码的文件夹,【一般存在一个init.py文件】
    模块:编写Python代码的py文件

    什么是包(lib)?
      用来包裹一个或者多个模块(py文件)的目录(文件夹)
      __init__.py 用来申明该文件夹是一个包
      __init__.py文件有个__all__属性,用来描述该包下的所有py文件
      只有被它描述的文件,才可以使用from xxx import *
    
    什么是模块(module)?
    包含大量类或者方法的py文件,模块一般是包含包下面的
    
    模块的几种导入方式:
    __init__.py文件:
    __all__变量的使用:
    __init__.py文件中导入其他模块文件,推荐使用
    
    常见模块或者包的导入方式
    import xxx
    import xxx.xx
    

    注意:

    • 如果是普通文件夹,该文件夹是可以充当包使用的,但是要注意导入模块的问题,导包的时候要对应的模块中;
    • 可以使用as关键字简化的包路径;
    • 注意相对导包和绝对导包的问题;
    • 如果是一个包(存在init.py),all(数组)去申明该包下的模块,导入是也需要导入到对应的模块中,但是可以使用from xxx import *;
    • 如果在init文件中使已经导入了模块(相对导包和绝对导包),此时包会自动的帮助我们导入对应模块;

    No.2 is, == 的使用

    注意:
    小整数常量池(-5~256)和字符串常量池("abc")

    a is b : 判断a和b是否指向同一块内存空间。(返回:boolean值)
    a == b :判断a和b指向的空间里的内容是否一样。(返回:boolean值)

    • is 是比较两个引用是否指向了同一个对象(地址引用比较)。
    • == 是比较两个对象是否相等。(比较的数值)

    No.3 深拷贝和浅拷贝

    将一个变量赋值给另一个变量,这个过程叫做赋值。赋值会导致多个变量同时指向一块内存,所以此时不管是==或者is都返回True
    浅拷贝

    浅拷贝是对于一个对象的顶层拷贝
    通俗的理解是:拷贝了引用,并没有拷贝内容


    image.png

    但是,当a发送变化时,b不会变化:


    image.png

    深拷贝

    深拷贝是对于一个对象所有层次的拷贝(递归)

    注意常量类型的深浅拷贝问题(如字符串、数值型、元组)


    No.4 生成器

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    1、有规律的列表,[] ==> () 生成器
    2、规律很难有一个简单表达式表示出来

    斐波拉契数列(Fibonacci)
    前两个数之和等于3个数
    
    def fib(max):
      first,second,index = 1,1,0
    while index < max:
        first,second = second,first+second
        print(first)
        index += 1
    

    No.5 属性property

    面试题:
    1、 你对面向对象的理解
    2、 面向对象的特征是什么
    3、 对封装的理解?
    封装,类本身就是一个封装,封装了属性和方法。方法也是封装,对一些业务逻辑的封装。私有也是封装,将一些方法和属性私有化,对外提供可访问的接口。
    4、 对继承的理解
    将共性的内容放在父类中,子类只需要关注自己特有的内容,共性的继承过来就行了。
    这样简化开发,符合逻辑习惯,利于扩展。
    5、 多态的理解
    多态,一个对象在不同的情况下显示不同的形态。在python中因为是弱类型语言,对类型没有限定,所有python中不完全支持多态,但是多态的思想呢,python也是能体现的。

    拓展:父类引用指向子类实例,叫做多态
    面向对象三大特性:
    1、封装
    2、继承
    1、新式类
    2、经典类
    3、多态
    1、一个事务的多种状态
    在继承的基础上,说多态
    父类引用指向子类实例

    class Animal:
      pass
    class Cat(Animal):
      pass
    a = Animal()
    c = Cat()
    Animal a = new Animal() 
    Cat c = new Cat()
    c = Cat() # 多态
    

    弱数据类型的语言是天生支持多态

    私有属性添加getter和setter方法:
    使用property升级getter和setter方法:
    image.png
    略显粗略!!!详细了解请私信我。
    qq:1335016337
    邮箱:wzj1335036337@163.com

    相关文章

      网友评论

          本文标题:2018-03-28 python高级编程隔空小结

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