溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python自動化運維開發----基礎(十二)函數

發布時間:2020-07-13 14:58:43 來源:網絡 閱讀:379 作者:Demon寬 欄目:編程語言

1.函數的定義

函數是對代碼塊起了一個名字,在需要執行代碼塊的時候,直接調用函數

>>>?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之后的函數是不會在做執行代碼的

如圖:當return后的

>>>?def?test():?
...?????return?1
...?????print(2)
...?
>>>?test()
1

3.函數參數

(1)第一種無默認值

>>>?def?test(a):
...?????print(a)
...?
>>>?test(1)
1

(2)有默認值的參數,默認值參數必須在函數參數之后

如果在調用的時候不寫默認值就不會傳遞默認值,如果傳遞值的話就會覆蓋原來的默認值

>>>?def?test(a,b=1):
...?????print(a,b)
...?
>>>?test(1)
1?1
>>>?test(1,2)
1?2

(3).忽略返回值(解包)

只接收前兩個參數

>>>?a,b,*c?=?range(10)
>>>?a
0
>>>?b
1
>>>?c
[2,?3,?4,?5,?6,?7,?8,?9]

只接收后兩個參數

>>>?*a,b,c?=?range(10)
>>>?a
[0,?1,?2,?3,?4,?5,?6,?7]
>>>?b
8
>>>?c
9

只接收前兩個參數和后兩個參數

>>>?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

列表解包(把一個列表的參數全部全部傳遞給函數循環打印出每一個元素)

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

字典解包

字典解包 前邊加兩個 *

In?[15]:?def?test(p1,p2):?
????...:?????print(p1,p2)?
????...:???????????????????????????????????????????????????????????????????????????????????

In?[16]:?nums?=?{"p1":100,"p2":200}????????????????????????????????????????????????????????

In?[17]:?test(**nums)??????????????????????????????????????????????????????????????????????
100?200

(4).函數的關鍵字參數調用

關鍵字參數調用和參數的位置沒有關系

>>>?def?default(a,b,c):
...?????print(a,b,c)
...?
>>>?default(c=1,b=2,a=3)
3?2?1

字符串中的關鍵字參數調用

>>>?'{name}?is?{age}'.format(name='likuan',age=25)
'likuan?is?25'

(5).實參強制關鍵字參數

在函數定義參數的時候,第一個參數是 * 表示后邊的參數必須要用 key value的形式表示出來

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.函數的作用域

遵循LGB原則(先從L找再從G找最后在B中找)

L? local 函數體 和函數參數

G gloabal 模塊內

B python內置的參數

5.值傳遞和地址傳遞

(1)基本數據類型在函數傳遞時,直接傳遞值,在函數內修改值不影響函數體外的值

(2)引用類型在函數傳遞時,傳遞數據的地址,在函數內修改會影響函數體外的值(在內存中的地址一致所以函數體內的值修改都會修改)

地址傳遞

>>>?a?=?[]
>>>?def?test(p1):
...?????p1.append(1)
...?
>>>?test(a)
>>>?a
[1]

6.函數的可變參數

(1)列表可變參數(是一個元組)

>>>?def?test(a,b,*arg):
...?????print(a,b,arg)
...?
>>>?test(1,2,3,4)
1?2?(3,?4)

(2)關鍵字可變參數(字典需要用賦值的方式)

>>>?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)混用(列表可變參數,關鍵字可變參數,默認參數,常規參數)

>>>?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.函數也是變量

函數放在列表中

>>>?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>

函數在字典中

>>>?fd?=?{'test1':test1,'test2':test2,'test3':test3}
>>>?fd['test1']
<function?test1?at?0x7f4bce855598>

在函數中定義函數

>>>?def?ceshi():
...?????def?ceshi2():
...?????????print(1)
...?????ceshi2()
...?
>>>?ceshi()?
1

8.匿名函數 lambda?

lamdba 函數只有一個函數體

>>>?add?=?lambda?a,b,c:?a?+?b?+?c
>>>?add(1,2,3)
6

9.sort 函數 和? sorted 函數

sort 函數,排序以第一個值排序

>>>?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 函數,排序以第二個排序

>>>?l.sort(key=lambda?x:?x[1])
>>>?l
[(3,?1),?(1,?2),?(2,?3),?(2,?3),?(4,?5)]

sort() 函數 和 sorted() 函數的區別:

(1)sort() 函數只能對 list 進行排序, 對原數據進行修改

(2)sorted() 函數對任何可迭代的進行排序,不會對原來的 進行修改,返回一個新的列表

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

小練習 根據 字符串中字母的個數取出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腳本)

導入方式

import?文件名

?

導入包(文件夾里必須要有__init__.py文件)

import?文件夾

?

mod.py?文件內容

#!/usr/bin/python

name?=?'likuan'

?

#!/usr/bin/python

import?mod

print(mod.name)

?

另一種帶入方式

from?mod?import?name

print(name)

?

導入函數與現在函數中有函數名沖突可以用as去起一個別名

?

from?mod?import?name?as?name_test

name?=?'lizhi'

print(name,name_test)

?

以腳本運行的時候?__name__ == main

以模塊導入的方式 __name__ == 腳本名

?

name?=?'likuan'

if?__name__?==?'__main__':

????print(name)

elif?__name__?==?'mod':

print('test')

11,json字符串

格式化json

json.dumps()

還原之前的 json 字符串

json.loads()


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女