>>?def?test(): ...?????print(test) ...? >>>?test() >>>?def?test(a,b):..."/>
溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python自動(dòng)化運(yùn)維開(kāi)發(fā)----基礎(chǔ)(十二)函數(shù)

發(fā)布時(shí)間:2020-07-13 14:58:43 來(lái)源:網(wǎng)絡(luò) 閱讀:333 作者:Demon寬 欄目:編程語(yǔ)言

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()


向AI問(wèn)一下細(xì)節(jié)
AI