今日學習總結: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() 方法計算長度。