== 和 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 。
- 判断是否可以迭代
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
可是实现对有返回值 无返回值 不定常参数的函数进行装饰
网友评论