>>?def?test(): ...?????print(test) ...? >>>?test() >>>?def?test(a,b):..."/>
您好,登錄后才能下訂單哦!
1.函數(shù)的定義
函數(shù)是對(duì)代碼塊起了一個(gè)名字,在需要執(zhí)行代碼塊的時(shí)候,直接調(diào)用函數(shù)
>>>?def?test(): ...?????print(test) ...? >>>?test() <function?test?at?0x7ff784f51e18>
>>>?def?test(a,b):?????????????????????????? ...?????print("{0}+{1}={2}".format(a,b,a+b)) ...? >>>?test(1,2) 1+2=3
2.return之后的函數(shù)是不會(huì)在做執(zhí)行代碼的
如圖:當(dāng)return后的
>>>?def?test():? ...?????return?1 ...?????print(2) ...? >>>?test() 1
3.函數(shù)參數(shù)
(1)第一種無(wú)默認(rèn)值
>>>?def?test(a): ...?????print(a) ...? >>>?test(1) 1
(2)有默認(rèn)值的參數(shù),默認(rèn)值參數(shù)必須在函數(shù)參數(shù)之后
如果在調(diào)用的時(shí)候不寫默認(rèn)值就不會(huì)傳遞默認(rèn)值,如果傳遞值的話就會(huì)覆蓋原來(lái)的默認(rèn)值
>>>?def?test(a,b=1): ...?????print(a,b) ...? >>>?test(1) 1?1 >>>?test(1,2) 1?2
(3).忽略返回值(解包)
只接收前兩個(gè)參數(shù)
>>>?a,b,*c?=?range(10) >>>?a 0 >>>?b 1 >>>?c [2,?3,?4,?5,?6,?7,?8,?9]
只接收后兩個(gè)參數(shù)
>>>?*a,b,c?=?range(10) >>>?a [0,?1,?2,?3,?4,?5,?6,?7] >>>?b 8 >>>?c 9
只接收前兩個(gè)參數(shù)和后兩個(gè)參數(shù)
>>>?a,b,*c,d,e?=?range(10) >>>?a 0 >>>?b 1 >>>?c [2,?3,?4,?5,?6,?7] >>>?d 8 >>>?e 9
列表解包
test(*nums)? ?==》 test(10,20)
In?[9]:?def?test(a,b):? ???...:?????print(a,b)? ???...:???????????????????????????????????????????????????????????????????????????????????? In?[10]:?nums?=?[10,20]???????????????????????????????????????????????????????????????????? In?[11]:?test(*nums)??????????????????????????????????????????????????????????????????????? 10?20
列表解包(把一個(gè)列表的參數(shù)全部全部傳遞給函數(shù)循環(huán)打印出每一個(gè)元素)
In?[12]:?def?test(*args):? ????...:?????for?i?in?args:? ????...:?????????print(i)? ????...:??????????????????????????????????????????????????????????????????????????????????? In?[13]:?nums?=?[1,2,3,4]?????????????????????????????????????????????????????????????????? In?[14]:?test(*nums)??????????????????????????????????????????????????????????????????????? 1 2 3 4
字典解包
字典解包 前邊加兩個(gè) *
In?[15]:?def?test(p1,p2):? ????...:?????print(p1,p2)? ????...:??????????????????????????????????????????????????????????????????????????????????? In?[16]:?nums?=?{"p1":100,"p2":200}???????????????????????????????????????????????????????? In?[17]:?test(**nums)?????????????????????????????????????????????????????????????????????? 100?200
(4).函數(shù)的關(guān)鍵字參數(shù)調(diào)用
關(guān)鍵字參數(shù)調(diào)用和參數(shù)的位置沒(méi)有關(guān)系
>>>?def?default(a,b,c): ...?????print(a,b,c) ...? >>>?default(c=1,b=2,a=3) 3?2?1
字符串中的關(guān)鍵字參數(shù)調(diào)用
>>>?'{name}?is?{age}'.format(name='likuan',age=25) 'likuan?is?25'
(5).實(shí)參強(qiáng)制關(guān)鍵字參數(shù)
在函數(shù)定義參數(shù)的時(shí)候,第一個(gè)參數(shù)是 * 表示后邊的參數(shù)必須要用 key value的形式表示出來(lái)
In?[2]:?def?test(*,a,b):? ???...:?????print(a,b)? ???...:???????????????????????????????????????????????????????????????????????????????????? In?[3]:?test(1,2)?????????????????????????????????????????????????????????????????????????? --------------------------------------------------------------------------- TypeError?????????????????????????????????Traceback?(most?recent?call?last) <ipython-input-3-59e40cf39b25>?in?<module> ---->?1?test(1,2) TypeError:?test()?takes?0?positional?arguments?but?2?were?given In?[4]:?test(a=1,b=2)?????????????????????????????????????????????????????????????????????? 1?2
4.函數(shù)的作用域
遵循LGB原則(先從L找再?gòu)腉找最后在B中找)
L? local 函數(shù)體 和函數(shù)參數(shù)
G gloabal 模塊內(nèi)
B python內(nèi)置的參數(shù)
5.值傳遞和地址傳遞
(1)基本數(shù)據(jù)類型在函數(shù)傳遞時(shí),直接傳遞值,在函數(shù)內(nèi)修改值不影響函數(shù)體外的值
(2)引用類型在函數(shù)傳遞時(shí),傳遞數(shù)據(jù)的地址,在函數(shù)內(nèi)修改會(huì)影響函數(shù)體外的值(在內(nèi)存中的地址一致所以函數(shù)體內(nèi)的值修改都會(huì)修改)
地址傳遞
>>>?a?=?[] >>>?def?test(p1): ...?????p1.append(1) ...? >>>?test(a) >>>?a [1]
6.函數(shù)的可變參數(shù)
(1)列表可變參數(shù)(是一個(gè)元組)
>>>?def?test(a,b,*arg): ...?????print(a,b,arg) ...? >>>?test(1,2,3,4) 1?2?(3,?4)
(2)關(guān)鍵字可變參數(shù)(字典需要用賦值的方式)
>>>?def?test(a,b,*arg,**args): ...?????print(a,b,arg,args) ...? >>>?test(1,2,3,4,c=1) 1?2?(3,?4)?{'c':?1}
(3)混用(列表可變參數(shù),關(guān)鍵字可變參數(shù),默認(rèn)參數(shù),常規(guī)參數(shù))
>>>?def?test(a,b,*arg,c=1,**args): ...?????print(a,b,c,arg,args) ...? >>>?test(1,2,4,5,c=6,d=7)?? 1?2?6?(4,?5)?{'d':?7}
7.函數(shù)也是變量
函數(shù)放在列表中
>>>?def?test1():?print(test1) ...? >>>?def?test2():?print(test2)? ...? >>>?def?test3():?print(test3)? ...? >>>?test?=?[test1,test2,test3] >>>?for?i?in?test: ...?????print(i) ...? <function?test1?at?0x7f4bce855598> <function?test2?at?0x7f4bce855488> <function?test3?at?0x7f4bce855510>
函數(shù)在字典中
>>>?fd?=?{'test1':test1,'test2':test2,'test3':test3} >>>?fd['test1'] <function?test1?at?0x7f4bce855598>
在函數(shù)中定義函數(shù)
>>>?def?ceshi(): ...?????def?ceshi2(): ...?????????print(1) ...?????ceshi2() ...? >>>?ceshi()? 1
8.匿名函數(shù) lambda?
lamdba 函數(shù)只有一個(gè)函數(shù)體
>>>?add?=?lambda?a,b,c:?a?+?b?+?c >>>?add(1,2,3) 6
9.sort 函數(shù) 和? sorted 函數(shù)
sort 函數(shù),排序以第一個(gè)值排序
>>>?l?=?[(1,2),(2,3),(3,1),(4,5),(2,3)] >>>?l.sort() >>>?l [(1,?2),?(2,?3),?(2,?3),?(3,?1),?(4,?5)]
sort 函數(shù),排序以第二個(gè)排序
>>>?l.sort(key=lambda?x:?x[1]) >>>?l [(3,?1),?(1,?2),?(2,?3),?(2,?3),?(4,?5)]
sort() 函數(shù) 和 sorted() 函數(shù)的區(qū)別:
(1)sort() 函數(shù)只能對(duì) list 進(jìn)行排序, 對(duì)原數(shù)據(jù)進(jìn)行修改
(2)sorted() 函數(shù)對(duì)任何可迭代的進(jìn)行排序,不會(huì)對(duì)原來(lái)的 進(jìn)行修改,返回一個(gè)新的列表
>>>?a?=?[1,2,4,3] >>>?a.sort() >>?a [1,?2,?3,?4] >>>?b?=?(1,2,6,5) >>>?c?=?sorted(b) >>>?c [1,?2,?5,?6] >>>?b (1,?2,?6,?5)
小練習(xí) 根據(jù) 字符串中字母的個(gè)數(shù)取出top5
>>>?chars?=?{ ...?????'a'?:?10, ...?????'b'?:?8, ...?????'c'?:?9, ...?????'x'?:?9, ...?????'y'?:?7, ...?????'z'?:?10, ...?????'m'?:?4, ...?????'n'?:?7 ...?} >>>?sorted(chars.items(),key=lambda?x:?x[1],reverse=True) [('a',?10),?('z',?10),?('c',?9),?('x',?9),?('b',?8),?('y',?7),?('n',?7),?('m',?4)] >>>?sorted(chars.items(),key=lambda?x:?x[1],reverse=True)[:5] [('a',?10),?('z',?10),?('c',?9),?('x',?9),?('b',?8)]
10.包
模塊(py腳本)
導(dǎo)入方式
import?文件名
?
導(dǎo)入包(文件夾里必須要有__init__.py文件)
import?文件夾
?
mod.py?文件內(nèi)容
#!/usr/bin/python
name?=?'likuan'
?
#!/usr/bin/python
import?mod
print(mod.name)
?
另一種帶入方式
from?mod?import?name
print(name)
?
導(dǎo)入函數(shù)與現(xiàn)在函數(shù)中有函數(shù)名沖突可以用as去起一個(gè)別名
?
from?mod?import?name?as?name_test
name?=?'lizhi'
print(name,name_test)
?
以腳本運(yùn)行的時(shí)候?__name__ == main
以模塊導(dǎo)入的方式 __name__ == 腳本名
?
name?=?'likuan'
if?__name__?==?'__main__':
????print(name)
elif?__name__?==?'mod':
print('test')
11,json字符串
格式化json
json.dumps()
還原之前的 json 字符串
json.loads()
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。