今日学习总结:python
1、while 或 if 与布尔值的假app
x=5 dict = {'name':None,'age':123} #name的值为空 print(dict['name']) while dict.get('name'): # 这时候while后面的 语句是假的 因此没有办法执行 y=x+1 print(y) 结果: None
x = 5
dict = {'name': None, 'age': 123}
print(dict['name'])
if dict.get('name'):
y = x + 1
print(y)
结果:
None
while 与布尔值的真函数
x=5 dict = {'name':None,'age':123} dict['name']='xiaohong' print(dict['name']) while dict.get('name'): # 这时候while后的语句是真 y=x+1 print(y) break #若是没有break则一直输出6 这里是while与break的连用
x=5
dict = {'name':None,'age':123}
dict['name']='xiaohong'
print(dict['name'])
if dict.get('name'): # 这时候if后的语句是真
y=x+1
print(y)
2、叠加装饰器工具
# 可变类型,无需经过global引用,可直接修改。不可变类型,须要在函数内部使用global对其进行修改 user_info = { 'user':None #表示user这个用户名没有 def login username = input('请输入帐号: ').strip() password = input('请输入密码: ').strip() with open(r'user.txt', 'r', encoding='utf-8') as f: for line in f: name, pwd = line.strip('\n').split(':') # [tank, 123] if username == name and password == pwd: print('登陆成功!') user_info['user'] =username #表示将输入的用户名username替换掉user_info字典里的None else: print('登陆失败!') def login_auth(func): # func ---> func1, func2, func3 def inner(*args, **kwargs): if user_info.get('user'): res = func(*args, **kwargs) # func() ---> func1(), func2(), func3() return res else: print('请先登陆...') login() return inner # func1,2,3 都须要先登陆才能够使用,若登陆一次,后续功能无需再次登陆,绕过登陆认证 @login_auth #这是语法糖 def func1(): print('from func1') pass @login_auth def func2(): print('from func2') pass @login_auth def func3(): print('from func3') pass while True: func1() input('延迟操做...') func2() func3()
叠加装饰器例子1:学习
在直接使用装饰器时候,被装饰对象要写在装饰器上面
ps: 再直接使用装饰器时候,被装饰对象要写在装饰器上面
需求: 为被装饰对象,添加统计时间 与 登陆认证功能 import time user_info = { 'user': None } def download_movie(): print('正在下载电影...') time.sleep(2) print('下载电影完成...') return 'GTWZ.mp4' def login(): username = input('请输入帐号: ').strip() password = input('请输入密码: ').strip() with open(r'user.txt', 'r', encoding='utf-8') as f: for line in f: name, pwd = line.strip('\n').split(':') # [tank, 123] if username == name and password == pwd: print('登陆成功!') user_info['user'] = username return True else: print('登陆失败!') return False # 登陆认证装饰器 def login_auth(func): def inner1(*args, **kwargs): if user_info.get('user'): #判断用户是否已经登陆了,若登陆了就 执行func() res = func(*args, **kwargs) return res else: flag = login() if flag: #表示去调用登陆函数login() 判断若是登陆成功,执行func() res = func(*args, **kwargs) return res else: login() return func(*args, **kwargs) return inner1 # 统计时间装饰器 def time_record(func): def inner2(*args, **kwargs): print('开始统计...') start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print(f'消耗时间为: {end_time - start_time}') return res return inner2 t=time_record(download_movie) #给被装饰对象添加time_record功能 t() d=login_auth(download_movie) #给被装饰对象添加登陆功能 d()
ps:用语法糖使用装饰器时,语法糖必定要在被装饰对象之上
需求: 为被装饰对象,添加统计时间 与 登陆认证功能 import time user_info = { 'user': None } def login(): username = input('请输入帐号: ').strip() password = input('请输入密码: ').strip() with open(r'user.txt', 'r', encoding='utf-8') as f: for line in f: name, pwd = line.strip('\n').split(':') # [tank, 123] if username == name and password == pwd: print('登陆成功!') user_info['user'] = username return True else: print('登陆失败!') return False # 登陆认证装饰器 def login_auth(func): def inner1(*args, **kwargs): if user_info.get('user'): res = func(*args, **kwargs) return res else: flag = login() if flag: res = func(*args, **kwargs) return res else: login() return func(*args, **kwargs) return inner1 # 统计时间装饰器 def time_record(func): def inner2(*args, **kwargs): print('开始统计...') start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print(f'消耗时间为: {end_time - start_time}') return res return inner2 @login_auth # inner1 = login_auth(inner2) #先添加登陆功能 @time_record # inner2 = time_record(download_movie) #再添加统计时间功能 def download_movie(): print('正在下载电影...') time.sleep(2) print('下载电影完成...') return 'GTWZ.mp4' download_movie()
有参数装饰器spa
方法一:有参装饰器 def user_auth(user_role): # 'SVIP' def wrapper(func): def inner(*args, **kwargs): if user_role == 'SVIP': # 添加超级用户的功能 res = func(*args, **kwargs) return res elif user_role == '普通用户': print('普通用户') # 添加普通用户的功能 res = func(*args, **kwargs) return res return inner return wrapper @user_auth('普通用户') #在这里wrapper=user_auth('普通用户')
def index():
pass
index()
方法二:有参装饰器
def user_auth(user_role): # 'SVIP'
def wrapper(func):
def inner(*args, **kwargs):
if user_role == 'SVIP':
# 添加超级用户的功能
res = func(*args, **kwargs)
return res
elif user_role == '普通用户':
print('普通用户')
# 添加普通用户的功能
res = func(*args, **kwargs)
return res
return inner
return wrapper
wrapper = user_auth('普通用户')
@wrapper #<--- 返回结果(wrapper) <---- user_auth()
def index():
pass
index()
叠加装饰器code
def say_hi(func): def wrapper(*args, **kwargs): print("HI") ret = func(*args, **kwargs) print return wrapper def say_yo(func): def wrapper(*args, **kwargs): print("YO") return func(*args, **kwargs) @say_hi @say_yo def func(): print("Tank & Jason") func() return wrapper
3、迭代器对象
1.迭代:重复迭代的过程,每一次都是基于上一次结果而来blog
2.迭代器:迭代取值的工具索引
3.可迭代对象:在语法形式上,内置有—iter-()方法的对象。好比:list str tuple dict set f
4.迭代器对象:在语法形式上,内置有-next-()方法的对象
5.如何获取迭代器对象:
可迭代对象._iter_()
6.如何取值
迭代器对象._next_()
7. try:
pass
except:
8.迭代器的优缺点:
优势:不依赖于索引取值,节省内存空间
缺点:取值麻烦,不能取执行的某个值,不能有len() 方法计算长度。