函數(shù)直接調(diào)用方式:函數(shù)名加上小括號(hào)
def log():
'日志功能'
pass
def index():
log()
print(====)
*args 一個(gè)*是列表 非固定長度參數(shù)被冒,可接受列表 **kwargs 兩個(gè)*是字典
線程和進(jìn)程解釋:
- 由于線程操作系統(tǒng)直接支持的執(zhí)行單元,通常高級(jí)語言都內(nèi)置多線程的支持屋群,在python標(biāo)準(zhǔn)庫提供了兩個(gè)模塊:threading和_thread,其中threading是高級(jí)模塊盹愚,_thread是低級(jí)模塊饲握,對(duì)_thread進(jìn)行了封裝,絕大多數(shù)情況下号俐,使用threading模塊泌豆。
- 進(jìn)程之間不能共享數(shù)據(jù),那么線程之間可以共享數(shù)據(jù)吏饿,在一個(gè)進(jìn)程內(nèi)踪危,所有線程共享全局變量。
- 可以理解為進(jìn)程就相當(dāng)于一個(gè)容器猪落,例如大房子贞远,那么線程就相當(dāng)于這個(gè)大房子內(nèi)的一個(gè)人,那么這個(gè)人可以使用多個(gè)房間或者衛(wèi)生間笨忌,一個(gè)人蓝仲,可以理解為單線程,如果是多個(gè)人官疲,可以理解為多線程袱结。
- 但是當(dāng)容器(大房子)里有多個(gè)人時(shí)候,就不能隨意使用房間或者廁所了途凫,不然會(huì)非彻讣校混亂,這個(gè)時(shí)候颖榜,就會(huì)現(xiàn)了‘互斥鎖’棚饵,一個(gè)防止他人隨意進(jìn)入的簡單方法煤裙,就是加上一把鎖掩完,先到人的鎖上,后到的排隊(duì)硼砰,等鎖打開里面的人出來且蓬,后面的人在進(jìn)去。
- 互斥鎖:防止多個(gè)線程同時(shí)讀寫一塊區(qū)域题翰,互斥鎖為資源引入一個(gè)狀態(tài)‘鎖定’和‘非鎖定’恶阴,某個(gè)線程要更改共享數(shù)據(jù)時(shí)诈胜,先將其鎖定,其他線程不能更改冯事,直到該線程釋放資源時(shí)焦匈,狀態(tài)為‘非鎖定’時(shí),其他線程才能再次鎖定該資源昵仅,‘互斥鎖’保證了每次只有一個(gè)線程進(jìn)行寫入操作缓熟,從而保證了多線程情況下數(shù)據(jù)的正確性。
eval
eval內(nèi)置方法可以將一個(gè)字符串轉(zhuǎn)成python對(duì)象摔笤,不過够滑,eval方法是有局限性的,對(duì)于普通的數(shù)據(jù)類型吕世,json.loads和eval都能用彰触,但遇到特殊類型的時(shí)候,eval就不管用了,所以eval的重點(diǎn)還是通常用來執(zhí)行一個(gè)字符串表達(dá)式命辖,并返回表達(dá)式的值况毅。
import json
x="[null,true,false,1]"
print(eval(x))
print(json.loads(x))
while循環(huán)運(yùn)行一段代碼
n = 1
while n < 5:
create_order_mt = meituan_api.meituan_create_order(create_order_param)
print('創(chuàng)建訂單結(jié)果為:', create_order_mt)
if create_order_mt['code'] == 200:
break
n += 1
運(yùn)行結(jié)果如下:
創(chuàng)建訂單結(jié)果為: {'code': 400, 'msg': '創(chuàng)建訂單失敗:未找到訂單信息', 'data': ''}
創(chuàng)建訂單結(jié)果為: {'code': 400, 'msg': '創(chuàng)建訂單失敗:未找到訂單信息', 'data': ''}
創(chuàng)建訂單結(jié)果為: {'code': 400, 'msg': '創(chuàng)建訂單失敗:未找到訂單信息', 'data': ''}
創(chuàng)建訂單結(jié)果為: {'code': 400, 'msg': '創(chuàng)建訂單失敗:未找到訂單信息', 'data': ''}
Process finished with exit code 0