這里來(lái)給大家演示一下,函數(shù)的定義或構(gòu)造,并調(diào)用函數(shù)來(lái)實(shí)現(xiàn)封裝后的效果。
創(chuàng)新互聯(lián)建站是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、小程序設(shè)計(jì)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開(kāi)發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十載以來(lái),已經(jīng)為上千辦公窗簾各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的上千客戶與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。
首先我們來(lái)看看想實(shí)現(xiàn)下面的這個(gè)效果,如果不使用函數(shù)應(yīng)該怎么實(shí)現(xiàn)。
以上兩種返回結(jié)果都是1-9這幾個(gè)數(shù)字。
以上兩種方法,第一種代碼重復(fù)率太高,代碼美觀效果太差,雖然能實(shí)現(xiàn)效果,但是因?yàn)閿?shù)量比較少,還能手工打出來(lái)這幾行代碼,如果是打印1-100000就很難實(shí)現(xiàn)了。這時(shí)候for循環(huán)還是可以實(shí)現(xiàn)的,但是for循環(huán)只能實(shí)現(xiàn)類似的數(shù)字和變量循環(huán),無(wú)法進(jìn)行復(fù)雜的功能開(kāi)發(fā)。鑒于此,函數(shù)這個(gè)概念就被python引入了,下面先來(lái)看看函數(shù)是怎么實(shí)現(xiàn)上面的效果的,還是兩種方法。
這時(shí)候如果想實(shí)現(xiàn)上面的打印結(jié)果就直接使用函數(shù)名+小括號(hào)調(diào)用函數(shù)就可以了,這種類型的語(yǔ)法,不僅可以反復(fù)使用,而且封裝后的代碼更美觀。
分析如下:
首先調(diào)用deco函數(shù),打印三條語(yǔ)句,就是前三條
因?yàn)閐eco函數(shù)有返回值,返回的是你傳遞的參數(shù),也就是myfunc的引用。
第10行的myfunc為你deco函數(shù)的返回值,也就是myfunc
第11行調(diào)用的myfunc(),其實(shí)調(diào)用的是deco返回值的函數(shù),也就是你傳遞的函數(shù)的引用。
如有不明白的地方,請(qǐng)繼續(xù)追問(wèn)!
# -*- coding: utf-8 -*-
def print_num(max):
for i in range(max):
if i % 7 == 0 and i % 5 != 0:
print(i)
print_num(100)
關(guān)于編程,有三種方式
1、面向?qū)ο缶幊?---類 關(guān)鍵字:class
2、面向過(guò)程編程----過(guò)程 關(guān)鍵字:def
3、函數(shù)式編程------函數(shù) 關(guān)鍵字:def
函數(shù)式編程:函數(shù)是邏輯化結(jié)構(gòu)化和過(guò)程化的一種編程方式,如
def test(x):
"xxxxx"
x+=1
return x
def:定義函數(shù)的關(guān)鍵字
test:函數(shù)名稱
(x):傳入函數(shù)的參數(shù)
x+=1:泛指邏輯處理塊代碼
"xxxx"函數(shù)描述(非必要,但強(qiáng)列建議添加)
定義一個(gè)過(guò)程,過(guò)程無(wú)返回值
def fun1():
"fun1"
print('fun1')
定義一個(gè)函數(shù),函數(shù)有返回值
def fun2():
"fun2"
print('fun2')
return 0
函數(shù)和過(guò)程的調(diào)用是一致的:
fun1
fun2
在python中,過(guò)程就是一個(gè)沒(méi)有返回值的函數(shù),過(guò)程默認(rèn)返因一個(gè)none,當(dāng)函數(shù)有多個(gè)返回值時(shí),將返回元組,這些值將被當(dāng)做一個(gè)元組的元素,即:
返回值個(gè)數(shù)0:返回NONE
返回值個(gè)數(shù)1:返回object
返回值個(gè)數(shù)多個(gè):返回元組
函數(shù)的功能:沒(méi)有函數(shù)的編程只是在寫(xiě)邏輯(功能),脫離函數(shù),重用邏輯(實(shí)現(xiàn)功能),唯一的方式就是復(fù)制粘貼,使用函數(shù)后簡(jiǎn)化代碼,可讀性變高,易擴(kuò)展(保持一致性)
在定義函數(shù)時(shí)的參數(shù),我們稱為行參,如下面的x,y
而調(diào)用函數(shù)時(shí)傳入的參數(shù),我們稱之為實(shí)參,如下面的1、2。
def test(x,y)
print(x)
print(y)
test(1,2)
位置調(diào)用時(shí)行參與實(shí)參的位置關(guān)系是一一對(duì)應(yīng)的
def test(x,y)
print(x)
print(y)
test(1,2)
關(guān)鍵字調(diào)用時(shí),與實(shí)參的位置無(wú)關(guān)如
def test(x,y)
print(x)
print(y)
test(y=2,x=3)
當(dāng)位置調(diào)用與關(guān)鍵字調(diào)用混用時(shí),按照位置調(diào)用方式執(zhí)行,但要記位一句話,關(guān)鍵字參數(shù)不能寫(xiě)在位置參數(shù)前面,即test(3,y=2,6)此種方式將會(huì)報(bào)錯(cuò),應(yīng)寫(xiě)成test(3,2,z=6)或test(3,z=2,y=6)
當(dāng)函數(shù)中有默認(rèn)的參數(shù)值時(shí)如
def test(x,y=1)
.....
return 0
當(dāng)調(diào)用這個(gè)函數(shù)時(shí),如果不傳入y的值時(shí),y的值將采用默認(rèn)值,如果傳入新的y的值時(shí),默認(rèn)y的值將被覆蓋。
默認(rèn)值使用的場(chǎng)合:
1、軟件安裝的時(shí)候
2、連接數(shù)據(jù)庫(kù)的端口
等
參數(shù)組:當(dāng)行參或?qū)崊?shù)量不固定的時(shí)候時(shí)使用,可與默認(rèn)參數(shù)或行參混用,參數(shù)組一定要最至最后
def test(*args)#接收N個(gè)位置參數(shù) #def test(name,*args) #def test(name,age=1,*args)
print(args)
test(1,2,3,4,5……)
test(*[1,2,3,4……])
最終實(shí)參會(huì)被變成一個(gè)元組如:
def fun(agr1,agr2,*args)
pass
fun(1,2,3,4,5)
====結(jié)果=====
1,2,(3,4,5)
這種方式是預(yù)留以后當(dāng)需要傳多個(gè)參數(shù)時(shí)使用而不變動(dòng)太多的代碼
傳入不定數(shù)量字典時(shí):把N個(gè)關(guān)鍵字參數(shù)轉(zhuǎn)換成字典的方式,可與默認(rèn)參數(shù)或行參混用,參數(shù)組一定要最至最后
def test(agrs1,agrs2,**kwargs) #接收N個(gè)關(guān)鍵字參數(shù)
# print(kwagrs)
# print(kwagrs['name'])
# print(kwagrs['age'])
pass
test(3,5,name='a',age=23,sex='F')#以關(guān)鍵字的方式傳值
=====結(jié)果====
3,5,{'name':'a','age':23,'sex':'f'}
test(**{name:'a',age:8,sex:'F'})
###位置參數(shù)不能寫(xiě)在關(guān)鍵字參數(shù)后面,否則程序會(huì)報(bào)錯(cuò)
函數(shù)調(diào)用函數(shù)
def test1()
print......
def test2()
print...
test1() #調(diào)用test1
print(test2()) #調(diào)用