>>> a = 13467498
>>> b = 13467498
>>> id(a) # 以10进制返回a的内存地址
2153635442032
>>> id(b)
2153635442096
>>> a is b
False
>>> a == b
True
>>> a = "flandre" # 所有不可变类型常量内存地址都只有一个
>>> b = "flandre"
>>> a is b
True
>>> a == b
True
不可变类型:整型,长整型,浮点数,复数,布尔值,字符串,元组
可变类型:列表,字典。
>>> import copy
>>> a = [0,1,2,[46,45,56],3,4,5]
>>> b = copy.copy(a)
>>> c = copy.deepcopy(a)
>>> a.append(6)
>>> a
[0, 1, 2, [46, 45, 56], 3, 4, 5, 6]
>>> b
[0, 1, 2, [46, 45, 56], 3, 4, 5]
>>> c
[0, 1, 2, [46, 45, 56], 3, 4, 5]
>>> a[3].append(57)
>>> a
[0, 1, 2, [46, 45, 56, 57], 3, 4, 5, 6]
>>> b
[0, 1, 2, [46, 45, 56, 57], 3, 4, 5]
>>> c
[0, 1, 2, [46, 45, 56, 3, 4, 5]
列表推导式:
[i for i in range(101)]
[i for i in range(101) if i % 2 == 0]
[i*j for i in range(1,10) for j in range(1,10)]
# 当列表元素过多时,会很占用内存
将列表推导式的[]改成()就会产生生成器
>>> a = (i for i in range(101))
>>> type(a)
<class 'generator'>
>>> next(a) # 使用next()函数调用可以得到生成器中的数值
0
>>> next(a)
1
>>> next(a)
2
列表、字典、字符串不是迭代器
from collections import Iterator # 迭代器
from collections import Iterable # 可迭代对象
ls = []
print(isinstance(ls,Iterator))
# False
res = (s for s in range(10))
print(isinstance(res,Iterable))
# True
a = iter(ls) # 将可迭代对象转换为迭代器
print(type(a))
#
print(isinstance(ls,Iterable))
# True
闭包能够读取其他函数内部变量的函数叫闭包
def outer():
print("outer")
a = 20
def inner():
print(a)
return inner
ss = outer()
print(ss) # ss == 函数inner
ss()
# 输出结果
# outer
# .inner at 0x000001FA81BB8160>
# 20
闭包可以使局部变量全局化,但是变量不能释放,占据内存
在不动原有代码的基础上,将新功能添加上去,就是python的装饰器
def record_log(fn):
def inner(): # 如果被装饰的函数存在参数,则需要在装饰器函数的里面的函数进行传递
print("开始记录日志")
fn()o
print("记录日志结束")
return inner
@record_log
def login():
print("xx登录了")
@record_log
def reg():
print("xx注册了")
login()
reg()
# 开始记录日志
# xx登录了
# 记录日志结束
# 开始记录日志
# xx注册了
# 记录日志结束
python是一门
Python作为一种动态语言,具有一定的特性
class CuiHua:
def __init__(self, name, age):
self.name = name
self.age = age
Cui = CuiHua("翠花", 18)
print(Cui.name)
print(Cui.gender) 访问不存在的属性会报错
# 报错
Cui.gender = "男" # Python可以动态在外界设置属性
print(Cui.gender)
# 男
setattr(Cui,"address","China") # 使用setattr设置属性
print(Cui.address)
# China
print(getattr(Cui,"name")) # 使用getattr获取属性
# 翠花
delattr(Cui, "name") # 使用delattr删除属性
print(Cui.name)
# 报错