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

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
浅拷贝

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


2018-03-28 python高级编程隔空小结_第1张图片
image.png

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


2018-03-28 python高级编程隔空小结_第2张图片
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方法:
2018-03-28 python高级编程隔空小结_第3张图片
使用property升级getter和setter方法:

2018-03-28 python高级编程隔空小结_第4张图片
image.png

略显粗略!!!详细了解请私信我。
qq: 1335016337
邮箱: [email protected]

你可能感兴趣的:(2018-03-28 python高级编程隔空小结)