python核心心得笔记

一.模块重新导入
1.当你导入的模块(.py文件)时,系统怎么查找呢?
import sys
sys.path #显示的是你导入模块时,系统查找模块的路径
2.当你导入模块不在系统路径下,怎么办?
import sys
sys.path.append("你模块所在的路径")
3.当你导入A模块后,A模块里面新增功能。你是用不了的,除非是重新导入模块。怎么办?
from imp import *
reload(A) #相当于重新加载这个模块

二. == is
==用于判断数值是否相等
is用于判断是否指向同一个地址

三.深拷贝和浅拷贝
1.深拷贝:拷贝的是所指向内存空间的内容
import copy
copy.deepcopy()
2.浅拷贝:浅拷贝仅仅是拷贝内存空间地址,不拷贝内容(不可变类型)
浅拷贝只会拷贝第一层。如果里面还有引用,它是不会拷贝的(可变类型)
import copy
copy.copy()

四.私有化
1.x_:仅仅是避免和python关键字重复
2._x: 在模块中定义,但是别人导入模块调用不来。除非使用 import 模块名 模块名._x
3.__x__:系统中的方法

五.property属性
property属性会将方法封装。仅仅方便开发者设置数据
第一种: property(getNum,setNum)
class Test(object):
def __init__(self):
self.__num = 100

def setNum(self,num):
self.__num = num

def getNum(self):
return self.__num

num = property(getNum,setNum)


t = Test()

t.num = 200 #t.setNum(200)

print(t.num)


第二种: @property设置在getNum方法上

@num.setter

六.生成器
它就是一个保存特殊数值的算法,什么时候用什么时候执行.

1.第一种方法:
a = (i for i in range(10))

2.第二种方法:
在函数里面加上关键字yield.但是next()函数执行的时候取数值,碰到yield 就停止执行。下一next()函数会从上次停止的地方继续执行

第一种方法要想取里面的数值,需要next(a)一个个去取。取到最后就报错了,所以推荐for循环去取.

注意:next() 等价于 生成器对象.__next__()
def creatNum():
print("---start---")
a,b = 0,1
for i in range(10):
print("---1---")
yield b
print("---2---")
a,b = b,a+b
print("---3---")
print("---end---")

#创建生成器对象
a = creatNum()

for num in a:
print(num)


七.可迭代对象 iterable
1.凡是能用for循环出来的都是可迭代对象 比如:列表,字典,生成器

2.判断是否是可迭代对象Iterable,用isinstance()。前提是 from collections import Iterable

3.如果一个对象实现了__iter__方法,那么这个对象也是可迭代对象

八.迭代器
主要作用是列表占用大量内存,当你想用的时候转化成迭代器。

1.可以被next()函数调用并且不断返回数值 就是迭代器

2.可以用isinstance()判断是否是迭代器Iterator

3.如果不是迭代器对象,可以使用iter()函数转换成迭代器

九.作用域
1.命名空间:在一段生效的范围就是命名空间

2.globals:在当前命名空间查找所有全局变量

3.locals:在当前命名空间查找所有局部变量

4.LEGB原则: python找变量顺序遵循legb原则
l:locals
e:闭包函数
g:global
b:builtin 内嵌。python解释器自带一些常用的东西

十.元类
实例对象是由class创建的,那么创建class的type叫做元类.

1.类也是对象

2.使用type创建类

type(类名,继承的父类名,{属性})

3.如何验证type是元类?
类名.__class__


十一.垃圾回收

1.小整数对象池
小整数在-5到256之间,python已经开辟内存空间进行存储了。不需要在创建对象

2.大整数对象池
不在小整数范围内的,每次使用都要创建对象

3.intern机制
a= "hello"
b= "hello"
那么a,b都指向同一内存地址,共用一份
如果里面包含特殊字符,那么每份地址空间不同

4.gc垃圾回收
引用计数机制为主,隔代回收机制为辅.
1.引用计数机制: python代码执行是由python解释器来完成的.python解释器主要是由c语言来编写的,在编写的代码里有一句语句 int = ob_refcnt 表示计数。如果为0表示生命周期结束了

2.隔代回收主要是解决引用计数解决不了的循环问题。
隔代回收主要由 0 1 2三条链组成

第一条链子主要放刚创建的所有对象。
主要通过减1,如果为0。则去清理。减1的前提是第一条链子有相互引用,那么减1.如果对象之间不存在互相引用,那么扔到第二条链子里去
第二条链子存放第一条清理完毕后剩下的对象.

第三条链子存放第二条清理完毕后剩下的对象.

十二.gc模块

1.引用计数+1的情况
对象被当作参数 func(a)
对象被创建 a = 100
对象被引用 b = a

2.引用计数-1的情况
对象被当作参数传入函数中,函数执行完毕
对象被清空. del a

3.gc.threshold(). 结果是(700,10,10)
700:表示创建对象的数值-回收的对象数>700。那么开始清理第一次链条
10 :如果清理第一次链条的数值达到10次时,那么也要清理第二次链条和第一次链条
10 :如果清理第二次链条数值达到10次,那么清理第一次和第二次和第三次链条

4.gc.get_count() 表示你去不去清理时候的那个数值。 结果是三个数值。第一个数值如果大于700,那么清理第一个链条 第二数字大于10 清理第一和第二个链条

十三.内建属性

1.__getattribute__属性
只要你去调用属性,就会调用getattribute方法! 禁止在getattribute中再次调用self.xxx。 如果你想让属性够到方法,那么直接return object.__getattribute__(self,obj) 就可以了


十四.集合
set 返回值是{}类型。它除了有去重还有其他功能

1.交集
a&b

2.并集
a|b

3.差集
a-b

十五.内建方法
1.range() 在python2中返回时列表 在3中返回迭代值

2.filter() 主要作用对指定序列进行筛选,返回值为true就打印出来

3.map()主要作用是相对映射。给你一个数值,你给我返回一个

4.reduce()用于两个数相加.

5.sort()主要是用于排序。从小到大排序。如果括号里面有reverse = True 则表示按照从大到小排序

6.sorted()主要作用也是按照从小到大排序。如果括号里面reverse = 1 则表示从大到小排序


十六.functools
1.partial函数 是偏函数。 相当于第一次给数值之后一直都存在

2.wraps函数 用于消除闭包副作用

猜你喜欢

转载自www.cnblogs.com/lxyjlt/p/10322141.html
今日推荐