微吼云上線多路互動(dòng)直播服務(wù) 加速多場(chǎng)景互動(dòng)直播落地
765
2025-03-31
高階函數(shù):
把函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù),函數(shù)式編程就是指這種高度抽象的編程范式。
r = map(function,Iterator) ?function:方法,Iterator:列表、元組等 ?map():把function作用于Iterator中的每個(gè)元素,并返回一個(gè)新的Iterator
list(r) r轉(zhuǎn)化為list
vl = reduce(function,Iterator) ,有點(diǎn)像遞歸,返回最終的操作結(jié)果
>>> def add(x, y):
... ? ? return str(x) + str(y) x、y 第一次進(jìn)來(lái)是1,2 后面x是前面一次計(jì)算的值,y是list中的下一個(gè)值,直到走完list中的每個(gè)值,方法執(zhí)行完畢
...
>>> reduce(add, [1, 3, 5, 7, 9])
"13579"
filter()的作用是從一個(gè)序列中篩出符合條件的元素。由于filter()使用了惰性計(jì)算,所以只有在取filter()結(jié)果的時(shí)候,才會(huì)真正篩選并每次返回下一個(gè)篩出的元素。
list(filter(function,Iterator)) ?function: 過(guò)濾器,需返回True/False決定元素的去留 Iterator:列表、元組等 ?返回符合要求的元素
sorted() 排序
sorted(list,key=function, reverse=True) list:數(shù)組 key不能變,function為排序規(guī)則,reverse=True,反序/False,正序
一個(gè)函數(shù)可以返回一個(gè)具體值,也可以返回一個(gè)函數(shù)。
返回一個(gè)函數(shù)時(shí),牢記該函數(shù)并未執(zhí)行,返回函數(shù)中不要引用任何可能會(huì)變化的變量。
返回的函數(shù)應(yīng)定義在改函數(shù)內(nèi)部
def f1():
def f2():
return va
return f2
該函數(shù)不會(huì)立即返回va, 會(huì)返回f2整個(gè)方法,等需要用f2返回的va時(shí),才會(huì)具體去執(zhí)行。-----稱之為"閉包"
每次調(diào)用返回的都是一個(gè)新的方法,即使傳入的參數(shù)是一樣的
匿名函數(shù):避免命名沖突
lambda表達(dá)式:
lambda x: x * x ? 冒號(hào)前面為參數(shù),后面為計(jì)算表達(dá)式 ?返回值為表達(dá)式計(jì)算的結(jié)果 (只能有一個(gè)表達(dá)式)
裝飾器:代碼運(yùn)行期間動(dòng)態(tài)增加功能的方式,稱之為“裝飾器”(Decorator)???????????
偏函數(shù):把一個(gè)函數(shù)的某些參數(shù)給固定住(也就是設(shè)置默認(rèn)值),返回一個(gè)新的函數(shù),調(diào)用這個(gè)新函數(shù)會(huì)更簡(jiǎn)單。
>>> import functools
>>> int2 = functools.partial(int, base=2)
IO編程:從內(nèi)存中輸出到硬盤、網(wǎng)絡(luò)(Output)或者從硬盤網(wǎng)絡(luò)輸入到內(nèi)存(Input)
同步IO:
異步IO:
CPU與硬件速度不匹配造成
文件讀寫:
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
f.read()
f.close()
open(文件路徑及文件名和后綴,讀/寫("r:讀/w:寫文本/wb:寫二進(jìn)制"),encoding取讀/寫入文件用的編碼--寫入時(shí)會(huì)自動(dòng)轉(zhuǎn)換,errors='ignore'遇到無(wú)法識(shí)別的忽略)
文件不存在時(shí)會(huì)報(bào)IOError異常
操作完成后,必須關(guān)閉文件流
with open('/path/to/file', 'r') as f:
print(f.read())
with代替try fianlly,并且不用再次調(diào)用close()
read(size):size一次取讀的文件大小,不設(shè)默認(rèn)全部取讀
readlines():一次取讀一行
f.write(寫入內(nèi)容)
os,os.path:模塊封裝了操作系統(tǒng)的目錄和文件操作,要注意這些函數(shù)有的在os模塊中,有的在os.path模塊中。
os.name --獲取操作系統(tǒng)類型
"posix" :Linux、Unix或Mac OS X
"nt" :Windows
os.uname() ?--獲取操作系統(tǒng)類型詳情(Windows下無(wú)此方法)
os.environ --獲取系統(tǒng)中所有的環(huán)境變量
os.environ.get('key') --獲取系統(tǒng)中某個(gè)環(huán)境變量的值
os.path.abspath('.') --查看當(dāng)前目錄的絕對(duì)路徑
os.path.join('絕對(duì)路徑', '新文件夾名稱') ?獲取這個(gè)新文件夾的絕對(duì)路徑 --主要處理不同操作系統(tǒng)的路徑
os.mkdir("絕對(duì)路徑") 創(chuàng)建文件夾
os.rmdir("絕對(duì)路徑") 刪除一個(gè)文件夾
os.path.split("文件絕對(duì)路徑")--("文件的絕對(duì)路徑,到文件夾","文件名稱跟后綴") 一個(gè)元祖
os.path.splitext("文件絕對(duì)路徑") --獲取文件類型 ("文件絕對(duì)路徑,到文件名","文件后綴")
序列化(pickling):
反序列化unpickling:
object寫入文件時(shí),需序列化
pickle.dumps(d):序列化一個(gè)對(duì)象(序列化為bytes)
pickle.dump(obj,文件IO) 直接把對(duì)象序列化后寫入一個(gè)file-like Object
pickle.loads(文件IO) :反序列化文件
(dumps(d)返回值為標(biāo)準(zhǔn)的json字符串)
import json
json.dumps(d) ?把對(duì)象序列化為json
json.dumps(s, default=lambda obj: obj.__dict__)) 直接把一個(gè)class序列化為json(class不能直接序列化為json,需用lambda,調(diào)用obj.__dict__轉(zhuǎn)為dict)
錯(cuò)誤處理:
try:
except:
finally:
Python錯(cuò)誤也是class ?都繼承自BaseException
import logging
記錄錯(cuò)誤信息
調(diào)試:
1、print()
2、斷言(assert)
3、logging ?------王道
4、pdb
5、pdb.set_trace()
6、IDE
import logging
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(filename='my.log', level=logging.DEBUG, format=LOG_FORMAT)
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")
basicConfig()可接收參數(shù)
filename 指定日志輸出目標(biāo)文件的文件名,指定該設(shè)置項(xiàng)后日志信心就不會(huì)被輸出到控制臺(tái)了
filemode 指定日志文件的打開模式,默認(rèn)為'a'。需要注意的是,該選項(xiàng)要在filename指定時(shí)才有效
format 指定日志格式字符串,即指定日志輸出時(shí)所包含的字段信息以及它們的順序。logging模塊定義的格式字段下面會(huì)列出。
datefmt 指定日期/時(shí)間格式。需要注意的是,該選項(xiàng)要在format中包含時(shí)間字段%(asctime)s時(shí)才有效
level 指定日志器的日志級(jí)別
stream 指定日志輸出目標(biāo)stream,如sys.stdout、sys.stderr以及網(wǎng)絡(luò)stream。需要說(shuō)明的是,stream和filename不能同時(shí)提供,否則會(huì)引發(fā)ValueError異常
style Python 3.2中新添加的配置項(xiàng)。指定format格式字符串的風(fēng)格,可取值為'%'、'{'和'$',默認(rèn)為'%'
handlers Python 3.3中新添加的配置項(xiàng)。該選項(xiàng)如果被指定,它應(yīng)該是一個(gè)創(chuàng)建了多個(gè)Handler的可迭代對(duì)象,這些handler將會(huì)被添加到root logger。需要說(shuō)明的是:filename、stream和handlers這三個(gè)配置項(xiàng)只能有一個(gè)存在,不能同時(shí)出現(xiàn)2個(gè)或3個(gè),否則會(huì)引發(fā)ValueError異常。
format可定義參數(shù)
asctime %(asctime)s 日志事件發(fā)生的時(shí)間--人類可讀時(shí)間,如:2003-07-08 16:49:45,896
created %(created)f 日志事件發(fā)生的時(shí)間--時(shí)間戳,就是當(dāng)時(shí)調(diào)用time.time()函數(shù)返回的值
relativeCreated %(relativeCreated)d 日志事件發(fā)生的時(shí)間相對(duì)于logging模塊加載時(shí)間的相對(duì)毫秒數(shù)(目前還不知道干嘛用的)
msecs %(msecs)d 日志事件發(fā)生事件的毫秒部分
levelname %(levelname)s 該日志記錄的文字形式的日志級(jí)別('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
levelno %(levelno)s 該日志記錄的數(shù)字形式的日志級(jí)別(10, 20, 30, 40, 50)
name %(name)s 所使用的日志器名稱,默認(rèn)是'root',因?yàn)槟J(rèn)使用的是 rootLogger
message %(message)s 日志記錄的文本內(nèi)容,通過(guò) msg % args計(jì)算得到的
pathname %(pathname)s 調(diào)用日志記錄函數(shù)的源碼文件的全路徑
filename %(filename)s pathname的文件名部分,包含文件后綴
module %(module)s filename的名稱部分,不包含后綴
lineno %(lineno)d 調(diào)用日志記錄函數(shù)的源代碼所在的行號(hào)
funcName %(funcName)s 調(diào)用日志記錄函數(shù)的函數(shù)名
process %(process)d 進(jìn)程ID
processName %(processName)s 進(jìn)程名稱,Python 3.1新增
thread %(thread)d 線程ID
threadName %(thread)s 線程名稱
Logging python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。