Python边角知识点
1.生成器 (含有yield)
#生成器函数
def func():
print("进来了")
yied 11
print("进来了")
yied 22
print("进来了")
yied 33
#调用生成器函数 ----> 得到一个生成器对象
gen = func()
#必须用next()才能进行执行 #yield相当于冻结
v1=next(gen)
v2=next(gen)
v3=next(gen)
也可以使用循环方法:
for item in gen:
print(item)
示例:生成1~1000000
生成器可以节省内存的开销。
def create_big_num(max_num):
num=0
while True:
yield num
if num == max_num:
return
num= num + 1
obj=create_big_num(1000000)
for item in obj:
print(item)
2.装饰器
def outer(func):
def inner():
print('before')
res=func() #被装饰器的原函数
print('after')
return res
return inner()
@outer
def info():
print("原来的info函数")
@outer
def info1():
print("原来的info函数")
def info2():
return 999
-
装饰器的了解
-
定义装饰器 创建嵌套的函数。
def outer(func): def inner(): print('before') res=func() #被装饰器的原函数 print('after') return res return inner()
-
应用装饰器
@outer def info(): print("原来的info函数")
info()
-
3 .匿名函数(lambda表达式)
def func(a1,a2):
return a1 + a2
v1=func(1,2)
print(v1) #3
func = lambda a1,a2 : a1 + a2
v2=func(1,2)
print(v2) #3
4.md5加密
4.1 hashlib
可以对数据进行加密
import hashlib
def encrypt(data_string):
obj=hashlib.md5()
obj.update(data_string.encode('utf-8'))
result=obj.hexdigest()
return result
用处:用于保存密码
4.2 md5加盐
加密时再加上我们自定义的字符串
import hashlib
data_string='admin'
obj=hashlib.md5('asfsdfdv45cvlfb5'.encode('utf-8')) #随便加入自定义的字符串,同时要加encode
obj.update(data_string.encode('utf-8'))
result=obj.hexdigest()
print(result)
建议:只要用md5加密,就要进行加盐。
5. json模块
json是一种格式,所有编程语言都认识,是以字符串的形式存在
-
反序列化 JSON格式的字符串-——>python对象
import json data_string='{"code":0,'tks':'asd'}' data_dict=json.loads(data_string) #反序列化,将json字符串对象转化为python对象 print(data_string) #{"code":0,'tks':'asd'}
-
序列化 python格式——> JSON格式的字符串
import json data_dict={"k1":123,"k2":456,"k3":True} data_string=json.dumps(data_dict) print(type(data_string)) # <class 'str'>
-
注:
里面的字符串得是双引号
v1 = "{'k1':123,'k2':456}" ->是字符串,不是JSON格式 v2 = '{"k1":123,"k2":456}' ->是字符串,是JSON格式
true、false必须是小写
v3 = '{"k1":123,"k2":456,"k3":True}' ->是字符串,不是JSON格式 v4 = '{"k1":123,"k2":456,"k3":true}' ->是字符串,是JSON格式
对象不能是元组是列表
v5 = '{"k1":123,"k2":456,"k3":(11,22,33)}' ->是字符串,不是JSON格式 v6 = '{"k1":123,"k2":456,"k3":[11,22,33]}' ->是字符串,是JSON格式
json无法序列化所有数据类型
import json
import datetime
ctime=datetime.datetime.now() #是一个时间对象
ctime_string=ctime.strftime('%Y-%m-%d %H:%M:%S') #转化为字符串
data_dict={"k1":123,"k2":ctime_string}
v1=json.dumps(data_dict)
print(v1,type(v1))
#{"k1": 123, "k2": "2023-08-04 10:24:42"} <class 'str'>
6. 面向对象
编程方式:
- 面向过程编程。按照功能从上到下逐一实现。
- 函数式编程,功能拆分。
- 面向对象编程