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