Python基础之函数与装饰器
閱讀目錄
一、為什么要使用函數(shù)
二、函數(shù)的定義與調(diào)用
三、函數(shù)返回值
四、函數(shù)的參數(shù)
五、本章小結(jié)
六、裝飾器
?
一、函數(shù)流程圖:
?
函數(shù)名的命名規(guī)則:
1、函數(shù)名必須由字母下劃線數(shù)字組成,不能是關(guān)鍵字和數(shù)字開頭
2、函數(shù)名還是要有一定的意義能夠簡(jiǎn)單說明函數(shù)的功能
初識(shí)函數(shù)定義:
新建一個(gè)mylen的函數(shù)
def mylen():'''計(jì)算S1 的長度'''s1 = 'hello world'length = 0for i in s1:length = length + 1print(length)?
初識(shí)函數(shù)調(diào)用:
通過調(diào)用mylen的函數(shù),實(shí)現(xiàn)計(jì)算hello word的長度。
str_len = mylen() print('str_len:%s'%str_len)?
以上代碼也只是完成調(diào)用,但是函數(shù)體內(nèi)并沒有返回值,所以調(diào)用為None,使用return關(guān)鍵字返回結(jié)果。代碼如下:
return length #將函數(shù)體內(nèi)的值賦給mylen str_len = mylen() print('str_len:%s'%str_len)return關(guān)鍵字的作用:
return是一個(gè)關(guān)鍵字,在pycharm里會(huì)高亮顯示。
函數(shù)體內(nèi)不寫return的情況下,會(huì)默認(rèn)返回一個(gè)None,需要注意的是return和返回值之間要由一個(gè)空格,return可以返回任意數(shù)據(jù)類型的值。
返回多個(gè)值:
可以返回多個(gè)值,會(huì)被組織成元祖返回,也可以用多個(gè)值來接受。
函數(shù)的參數(shù):
我們要告訴mylen函數(shù)要計(jì)算的字符串是誰,這個(gè)過程就叫做傳遞參數(shù),簡(jiǎn)稱傳參,我們調(diào)用函數(shù)的傳遞這個(gè)'hello world'和定義函數(shù)時(shí)的S1就是參數(shù)。
實(shí)參與形參:
我們調(diào)用函數(shù)時(shí)傳遞的這個(gè)'hello world'被稱為實(shí)際參數(shù),因?yàn)檫@個(gè)是要實(shí)際交歌函數(shù)的內(nèi)容,簡(jiǎn)稱實(shí)參。
定義函數(shù)時(shí)的S1,只是一個(gè)變量的名字,被稱為形式參數(shù)。因?yàn)樵诙x函數(shù)的時(shí)候它只是一個(gè)形式,表示這里有一個(gè)參數(shù),簡(jiǎn)稱形參。
參數(shù)傳遞:
傳遞多個(gè)參數(shù)
參數(shù)可以傳遞多個(gè),多個(gè)參數(shù)間用逗號(hào)分割。(舉例如下)
def mymax(x,y):the_max = x if x > y else yreturn the_maxma = mymax(10,20) print(ma)位置參數(shù)
站在實(shí)參的角度
1、按照位置傳值
def mymax(x,y):#此時(shí)x=10,y=20the_max = x if x > y else yreturn the_maxma = mymax(10,20) print(ma)2、按照關(guān)鍵字傳值
def mymax(x,y):#此時(shí)x = 20,y = 10print(x,y)the_max = x if x > y else yreturn the_maxma = mymax(y = 10,x = 20) print(ma)3、位置、關(guān)鍵字形式混著用
def mymax(x,y):#此時(shí)x = 10,y = 20print(x,y)the_max = x if x > y else yreturn the_maxma = mymax(10,y = 20) print(ma)正確用法
問題一:位置參數(shù)必須在關(guān)鍵子參數(shù)的前面
問題二:對(duì)于一個(gè)形參只能賦值一次
站在形參的角度
位置參數(shù)必須傳值
def mymax(x,y):#此時(shí)x = 10,y = 20print(x,y)the_max = x if x > y else yreturn the_max#調(diào)用mymax不傳遞參數(shù) ma = mymax() print(ma)#結(jié)果 TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'默認(rèn)參數(shù)
1、正常使用
使用方法
為什么要有默認(rèn)參數(shù):將變化較小的值設(shè)置成默認(rèn)參數(shù)
2、默認(rèn)參數(shù)的定義
def stu_info(name,sex = "male"):"""打印學(xué)生信息函數(shù),由于班中大部分學(xué)生都是男生,所以設(shè)置默認(rèn)參數(shù)sex的默認(rèn)值為'male'"""print(name,sex) stu_info('alex') stu_info('eva','female')3、參數(shù)陷阱:默認(rèn)參數(shù)是一個(gè)可變數(shù)據(jù)類型
def defult_param(a,l = []):l.append(a)print(l)defult_param('alex') defult_param('egon')動(dòng)態(tài)參數(shù)
按位置傳值多余的參數(shù)都由args統(tǒng)一接受,保存成一個(gè)元祖的形式
def mysum(*args):the_sum = 0for i in args:the_sum+=ireturn the_sumthe_sum = mysum(1,2,3,4) print(the_sum) def stu_info(**kwargs):print(kwargs)print(kwargs['name'],kwargs['sex'])stu_info(name = 'alex',sex = 'male')本章小結(jié)
面向過程編程的問題:代碼冗余、可讀性差、可擴(kuò)展性差(不易修改)
定義函數(shù)的規(guī)則:
?
1.定義:def 關(guān)鍵詞開頭,空格之后接函數(shù)名稱和圓括號(hào)()。 2.參數(shù):圓括號(hào)用來接收參數(shù)。若傳入多個(gè)參數(shù),參數(shù)之間用逗號(hào)分割。參數(shù)可以定義多個(gè),也可以不定義。參數(shù)有很多種,如果涉及到多種參數(shù)的定義,應(yīng)始終遵循位置參數(shù)、*args、默認(rèn)參數(shù)、**kwargs順序定義。如上述定義過程中某參數(shù)類型缺省,其他參數(shù)依舊遵循上述排序 3.注釋:函數(shù)的第一行語句應(yīng)該添加注釋。 4.函數(shù)體:函數(shù)內(nèi)容以冒號(hào)起始,并且縮進(jìn)。 5.返回值:return [表達(dá)式] 結(jié)束函數(shù)。不帶表達(dá)式的return相當(dāng)于返回 Nonedef 函數(shù)名(參數(shù)1,參數(shù)2,*args,默認(rèn)參數(shù),**kwargs):"""注釋:函數(shù)功能和參數(shù)說明"""函數(shù)體……return 返回值
?
調(diào)用函數(shù)的規(guī)則:
1.函數(shù)名()函數(shù)名后面+圓括號(hào)就是函數(shù)的調(diào)用。 2.參數(shù):圓括號(hào)用來接收參數(shù)。若傳入多個(gè)參數(shù):應(yīng)按先位置傳值,再按關(guān)鍵字傳值具體的傳入順序應(yīng)按照函數(shù)定義的參數(shù)情況而定 3.返回值如果函數(shù)有返回值,還應(yīng)該定義“變量”接收返回值如果返回值有多個(gè),也可以用多個(gè)變量來接收,變量數(shù)應(yīng)和返回值數(shù)目一致無返回值的情況: 函數(shù)名()有返回值的情況: 變量 = 函數(shù)名()多個(gè)變量接收多返回值: 變量1,變量2,... = 函數(shù)名()?裝飾器
不帶參數(shù)的裝飾器:
def wrapper(func):def inner(*args,**wargs):'''函數(shù)執(zhí)行之前代碼塊'''ret=func()return ret'''函數(shù)執(zhí)行之后代碼塊'''return inner帶參數(shù)的裝飾器:
F = False #裝飾器開關(guān), def outer(flag):def wrapper(func):def inner(*args,**kwargs):if flag:print('before')ret = func(*args,**kwargs)print('after')else:ret = func(*args, **kwargs)return retreturn innerreturn wrapper?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/bingpan/p/7236007.html
總結(jié)
以上是生活随笔為你收集整理的Python基础之函数与装饰器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js动态获取时间的方式
- 下一篇: day17.Python中lambda表