-
Teacher 繼承 Student 時(shí),__init__()括號(hào)中需要寫(xiě)被繼承類的全部參數(shù), super(Teacher, self).__init__(name, gender)報(bào)錯(cuò)是因?yàn)槿鄙倭薙tudent的score參數(shù); t = Teacher('Alice', 'Female', 'English') Teacher繼承Student的三個(gè)參數(shù)后又定義了course參數(shù),共4個(gè)參數(shù),這個(gè)地方少了一個(gè)參數(shù)
查看全部 -
有參數(shù)的decorator
在外面套一層專門(mén)接收參數(shù)的函數(shù)
例:
請(qǐng)給 @performace 增加一個(gè)參數(shù),允許傳入's'
import?time from?functools?import?reduce def?performance(prefix): ????def?performance_decorator(f): ????????def?fn(*args,?**kwargs): ????????????t1?=?time.time() ????????????f(*args,?**kwargs) ????????????t2?=?time.time() ????????????print('函數(shù)f運(yùn)行時(shí)間是{}{}'.format(t2?-?t1,prefix)) ????????return?fn ????return?performance_decorator @performance('s') def?f(list_): ????return?reduce(lambda?x,y:?x*y,?list_) f(list(range(1,10000)))
解釋:
def performance(參數(shù)):
????def performance_decorator(函數(shù)f):
????????...
????return performance_decorator
performance_decorator = performance(參數(shù))
新函數(shù) = performance_decorator(原函數(shù))
查看全部 -
裝飾器的作用:
給原函數(shù)裝飾裝飾變成新函數(shù)
裝飾器的語(yǔ)法:
@+裝飾器函數(shù)名
例:
編寫(xiě)一個(gè)decorator計(jì)算函數(shù)的運(yùn)行時(shí)間
import?time from?functools?import?reduce def?performance(f): ????def?fn(*args,?**kwargs): ????????t1?=?time.time() ????????f(*args,?**kwargs)???#接收函數(shù)用*args,**kwargs;在函數(shù)中用args,kwargs ????????t2?=?time.time() ????????print('函數(shù)f運(yùn)行時(shí)間是{}s'.format(t2?-?t1)) ????return?fn @performance def?f(list_): ????return?reduce(lambda?x,y:?x*y,?list_) f(list(range(1,100000))) ==>函數(shù)f運(yùn)行時(shí)間是2.1856231689453125s
解釋:
將函數(shù)f作為參數(shù)傳給函數(shù)performance
函數(shù)performance接收原函數(shù)f
在函數(shù)performance中定義新函數(shù)fn,新函數(shù)的參數(shù)用來(lái)接收原函數(shù)的參數(shù),一般設(shè)為*args,**kwargs可接收任何形式參數(shù)
裝飾原函數(shù)
返回新函數(shù)fn
查看全部 -
def?calc_sum(list_): ????def?lazy_sum(): ????????return?sum(list_) ????return?lazy_sum f?=?calc_sum([1,?2,?3,?4]) f() ==>10
閉包:
內(nèi)層函數(shù)引用外層函數(shù)的變量(參數(shù)也算是變量),最后外層函數(shù)返回內(nèi)層函數(shù)
那么這個(gè)內(nèi)層函數(shù)就是一個(gè)閉包(類似打包返回)
錯(cuò)誤寫(xiě)法:
#?希望一次返回3個(gè)函數(shù),分別計(jì)算1x1,2x2,3x3: def?count(): ????fs?=?[] ????for?i?in?range(1,?4): ????????def?f(): ?????????????return?i*i ????????fs.append(f) ????return?fs f1,?f2,?f3?=?count()?#內(nèi)層函數(shù)只被定義還沒(méi)運(yùn)行,此時(shí)外層函數(shù)運(yùn)行完畢i=3 f1()==>9???#運(yùn)行內(nèi)層函數(shù) f2()==>9 f3()==>9
正確寫(xiě)法:
def?count(): ????fs=[] ????for?i?in?range(1,4): ????????def?g(j=i):???????#為內(nèi)層函數(shù)設(shè)置形參默認(rèn)值 ????????????return?j*j ????????fs.append(g) ????return?fs f1,f2,f3=count() print(f1(),f2(),f3())
在Python中,函數(shù)形參默認(rèn)值是指在定義函數(shù)時(shí)為形參指定的默認(rèn)值,在調(diào)用函數(shù)時(shí),如果沒(méi)有為該形參提供實(shí)際的參數(shù)值,函數(shù)會(huì)使用默認(rèn)值
查看全部 -
Python在函數(shù)內(nèi)部定義子函數(shù),并把子函數(shù)返回
def?f(): ????def?g(): ????????return?... ????return?g x?=?f() x()
函數(shù)名g就是指向函數(shù)g的變量
不加小括號(hào)就只是一個(gè)變量,加上小括號(hào)才能調(diào)用函數(shù)
查看全部 -
匿名函數(shù)
lambda 參數(shù) : 表達(dá)式
可以有多個(gè)參數(shù),但只能有一個(gè)表達(dá)式,返回值就是表達(dá)式的結(jié)果
例:
map(lambda?x:x*x,[1,2,3,4]) reduce(lambda?x,y:x*y,[1,2,3,4]) sorted(['bob',?'about',?'Zoo',?'Credit'],key=lambda?x:x.lower())
查看全部 -
sorted(list, (key=函數(shù)對(duì)象f, reverse=True)) 默認(rèn)從小到大排序
函數(shù)f的作用:
接受待排序列表的元素作為參數(shù)傳入函數(shù)f,并返回真正需要排序的字段
例1:
(姓名,成績(jī))按成績(jī)進(jìn)行排序
def?f(item): ????return?item[1] print(sorted([('Alice',?72),?('Candy',?90),?('Bob',?62)],key=f)) ==>[('Bob',?62),?('Alice',?72),?('Candy',?90)]
例2:
對(duì)字符串忽略大小寫(xiě)進(jìn)行排序
def?f(item): ????return?item.lower() print(sorted(['bob',?'about',?'Zoo',?'Credit'],key=f)) ==>['about',?'bob',?'Credit',?'Zoo']
查看全部 -
filter(函數(shù)f, list)將函數(shù)f作用到list的每個(gè)元素上,對(duì)元素進(jìn)行判斷,篩選出為T(mén)rue的元素(以迭代器形式)
例1:
利用filter()函數(shù),刪除 None 或者空字符串
def?is_not_empty(s): ????return?s?and?s.strip() for?item?in?filter(is_not_empty,?['test',?None,?'',?'str',?'??',?'END']): ????print(item)
str.strip()刪除字符串str中的空白字符
例2:
利用filter()過(guò)濾出1~100中平方根是整數(shù)的數(shù)
import?math ???? def?sqrt_is_int(n): ????#?解題思路:如果將一個(gè)數(shù)的平方根的整數(shù)部分再平方仍然等于這個(gè)數(shù),則他的平方根一定是整數(shù) ????return?int(math.sqrt(n))*int(math.sqrt(n))?==?n ???? for?item?in?filter(sqrt_is_int,list(range(1,101))): ????print(item) ???? ???? #?math.sqrt()的結(jié)果是float #?float*float結(jié)果可能是int
查看全部 -
reduce(函數(shù)f, list)對(duì)list的元素順序累(積/加...)
函數(shù)f必須接收兩個(gè)參數(shù)
例:
Python內(nèi)置了求和函數(shù)sum(),但沒(méi)有求積的函數(shù),請(qǐng)利用recude()來(lái)求積
from?functools?import?reduce def?f(x,y): ????return?x*y print(reduce(f,[1,3,5,7,9]))????? ==> f(1,3)??f(3,5)??f(15,7)??f(105,9) 945
查看全部 -
map(函數(shù)f, list) 把函數(shù)f作用在list的每一個(gè)元素上
例:
請(qǐng)利用map()函數(shù),把一個(gè)list(包含若干不規(guī)范的英文名字)變成一個(gè)包含規(guī)范英文名字(首字母大寫(xiě),后續(xù)字母小寫(xiě))的list:
輸入:['alice', 'BOB', 'CanDY']
輸出:['Alice', 'Bob', 'Candy']def?f(s): ????return?s[0].upper()?+?s[1:].lower() ???? for?item?in?map(f,['alice',?'BOB',?'CanDY']): ????print(item) ==> Alice Bob Candy
str.lower()將字符串str變成小寫(xiě)
str.upper()將字符串str變成大寫(xiě)
注意:
1. 字符串切片會(huì)得到一個(gè)子字符串
2. 字符串的不可變性,不能在原字符串上修改某個(gè)索引位置
查看全部 -
請(qǐng)從頁(yè)面返回的內(nèi)容中,過(guò)濾出鏈接含有www的內(nèi)容。
import?requests from?bs4?import?BeautifulSoup url?=?"http://idcbgp.cn" response?=?requests.get(url) if?response.status_code?==?200: ????#?使用BeautifulSoup解析頁(yè)面內(nèi)容 ????soup?=?BeautifulSoup(response.text,?'html.parser')?#'html.parser'是HTML解析器 ????#?找到所有的鏈接 ????links?=?soup.find_all('a')?????????#使用find_all()來(lái)查找特定標(biāo)簽find_all() ????#?篩選出包含'www'的鏈接 ????www_links?=?[link['href']?for?link?in?links?if?link.get('href')!=None?and?'www'?in?link['href']]???????#以字典形式傳入屬性得到屬性值 ????for?link?in?www_links: ????????print(link) else: ????print("Failed?to?retrieve?the?webpage")
查看全部 -
網(wǎng)絡(luò)通信
server.py
import?socket server?=?socket.socket()?#創(chuàng)建server server.bind(('127.0.0.1',8999))?#綁定IP和端口?????127.0.0.1是本機(jī)回環(huán)IP server.listen(5)??#監(jiān)聽(tīng)端口(端口的最大連接數(shù)量) s?,?client_info?=?server.accept()??#接受連接,返回一個(gè)新的socket代理這個(gè)連接,和客戶端的信息(IP,端口) data?=?s.recv(1024)???#接收數(shù)據(jù)(最大字節(jié)數(shù)) while?1: ????data_append?=?s.recv(1024) ????if?str(data_append,'utf-8')?==?'end': ????????print(str(data,'utf-8')) ????????data?=?b'' ????else: ????????data?+=?data_append
client.py
import?socket client?=?socket.socket()?#創(chuàng)建client client.connect(('127.0.0.1',8999))?#連接server while?1: ????data?=?input('echo>>>') ????client.send(bytes(data,'utf-8'))?#發(fā)送bytes
查看全部 -
常用模式怎么記?
前操作,后文件格式,默認(rèn)文本格式
r,rb
w,wb
a,ab
查看全部 -
一般使用close()關(guān)閉文件,但如果在close()之前,程序異常退出了,那么文件就得不到正確的關(guān)閉,就會(huì)造成文件損壞,文件內(nèi)容丟失的問(wèn)題
with關(guān)鍵字:
會(huì)確保不管在使用過(guò)程中是否發(fā)生異常,都會(huì)執(zhí)行必要的“清理”的操作,釋放資源,比如文件使用后自動(dòng)關(guān)閉等等。
查看全部 -
seek(index)移動(dòng)文件中的游標(biāo)位置
index:0 文件首部? ?index:2 文件尾部
注意:
往文件中寫(xiě)完內(nèi)容后,游標(biāo)會(huì)在文件尾部,如果之后想讀取文件內(nèi)容,需要把游標(biāo)移動(dòng)到文件首部,否則讀取不到任何內(nèi)容
with?open('requirements.txt','a')?as?f: ????f.write('aaa\n') ????print(f.readlines()) ==>io.UnsupportedOperation:?not?readable
查看全部
舉報(bào)