一、基本介紹
- 沒有使用函數(shù)式編程之前帶來的問題
- 代碼的組織結(jié)構(gòu)不清晰唾糯,可讀性差
- 實(shí)現(xiàn)重復(fù)的功能時(shí)怠硼,你只能重復(fù)編寫實(shí)現(xiàn)功能的代碼,導(dǎo)致代碼冗余移怯,白白耗費(fèi)精力香璃。假如某一部分功能需要擴(kuò)展或更新時(shí),需要找出所有實(shí)現(xiàn)此功能的地方舟误,一一修改增显,無法統(tǒng)一管理,加大了維護(hù)難度脐帝。
函數(shù)是什么
1同云、函數(shù)是對(duì)實(shí)現(xiàn)某一功能的代碼的封裝
2、函數(shù)可以實(shí)現(xiàn)代碼的復(fù)用堵腹,從而減少代碼的重復(fù)編寫
二炸站、定義函數(shù)
1、函數(shù)分類
函數(shù)分為 內(nèi)置函數(shù) 和 自定義 函數(shù)
1疚顷、置函數(shù)是自帶的旱易,直接可以調(diào)用。比如 : id() type() list()
2腿堤、自定義函數(shù) 是我們自己在代碼中編寫定義的
2阀坏、定義函數(shù)語法
def 函數(shù)名(參數(shù)1.參數(shù)2,......)
'''注釋'''
函數(shù)體
return 返回值
- def 是定義函數(shù)的關(guān)鍵字
- 函數(shù)名和變量名的定義規(guī)則一樣笆檀,要能體現(xiàn)出函數(shù)的功能含有:
1忌堂、()小括號(hào)時(shí)必須的
2、:小括號(hào)后面的英文冒號(hào)是必須的- 參數(shù)不是必須的酗洒,多個(gè)參數(shù)使用英文逗號(hào)士修,隔開枷遂,
- 函數(shù)體可以寫任意合法的python代碼,需要縮進(jìn)4個(gè)空格棋嘲。
- return 是用于返回?cái)?shù)據(jù)的酒唉,這個(gè)是可選的。
- 返回值也是可選的沸移。
定義函數(shù)
def foo():
print("hello jack")
foo() #調(diào)用函數(shù)
****注意:函數(shù)必須先定義痪伦,才能調(diào)用****
三、函數(shù)的參數(shù)
函數(shù)的參數(shù)可以是python 中的任意數(shù)據(jù)類型雹锣,并且參數(shù)的數(shù)量可以是零個(gè)或多個(gè)网沾。
函數(shù)參數(shù)分為:
- 形參:形式上的參數(shù),在定義函數(shù)時(shí)使用笆制,其實(shí)就是一個(gè)變量名
- 實(shí)參:實(shí)際的數(shù)據(jù),實(shí)在調(diào)用函數(shù)時(shí)使用涣达。
1在辆、形參中位置參數(shù)和默認(rèn)參數(shù)
def sys(msg) --sys就是位置參數(shù)--
print(msg)
s = "hello,jack"
#調(diào)用
sys(s)
1、函數(shù)調(diào)用
def func(x,y)
n = x -y
print(n)
func(3,2)
2度苔、傳遞參數(shù)
位置參數(shù)有幾個(gè)匆篓,調(diào)用函數(shù)時(shí)就要傳遞幾個(gè)。并且有位置順序的區(qū)分
1.默認(rèn)參數(shù)寇窑,直接傳遞實(shí)參
def conn_L(ip="192.168.142.99"):
print(ip)
conn_L()
2.也可以傳遞實(shí)參
conn_L("192.168.142.1")
2鸦概、實(shí)參中的位置參數(shù)和關(guān)鍵字參數(shù)
- 實(shí)參:在函數(shù)使用的時(shí)候,給函數(shù)傳遞的參數(shù)甩骏。
- 位置參數(shù):一個(gè)個(gè)數(shù)據(jù)對(duì)象窗市,傳遞的時(shí)候是有位置順序區(qū)分的。如:(18饮笛,'jack')
- 關(guān)鍵字參數(shù):變量名和變量名的組合咨察,傳遞的時(shí)候沒有位置順序之分。如:(name=jack,age=18)
1.位置參數(shù)
def say_me(name,age):
print("昵稱:",name)
print("年齡:",age)
say_me("jack",18)
2.關(guān)鍵字參數(shù)
def say_me(name,age):
print("昵稱:",name)
print("年齡:",age)
say_me(age=18,name="jack")
**關(guān)鍵字參數(shù)的變量名必須 和定義函數(shù)時(shí)的參數(shù)名稱一致**
3福青、實(shí)現(xiàn)接受任意參數(shù)
* 可以接收所有的位置參數(shù)
** 可以接收所有的關(guān)鍵字參數(shù)摄狱。
In [7]: def aa(*args,**kwargs):
...: print(args)
...: print(kwargs)
...: aa(1,3,a=10)
(1, 3)
{'a': 10}
4、返回值強(qiáng)大之處
函數(shù)也可以通過關(guān)鍵字 return 返回任何數(shù)量的 Python 中的任意數(shù)據(jù)類型无午,作為結(jié)果
調(diào)用函數(shù)并且接收返回值
In [9]: def foo():
...: s = 'lenv'
...: li = [1,2,3]
...: return s,li
...: name,l3 = foo()
In [10]: name
Out[10]: 'lenv'
In [11]: l3
Out[11]: [1, 2, 3]
四媒役、函數(shù)的高級(jí)用法
1、作為參數(shù)傳遞
def f1():
n = 1 + 1
return n
def foo():
ret = arg()
print(ret)
foo(f1)
輸出2
----------------------------------------------
注意這里傳遞的是 函數(shù)名宪迟,后面不要加小括號(hào)酣衷。
本質(zhì)上是傳遞了函數(shù)對(duì)象本身
2、作為返回值返回
def f2():
print("hello")
def func():
return f2
f = func()
print(id(f))
print(id(f2))
# f 和 f2 都指向了同一個(gè)函數(shù)對(duì)象