Python函式
一、函式的作用
-
函式是組織好的,可重復使用的,用來實作單一或相關聯功能的代碼段
-
函式能提高應用的模塊性和代碼的重復利用率
-
python 內置函式:https://docs.python.org/zh-cn/3.8/library/functions.html
二、函式的定義
def function_name([parameter_list]): [''' comments '''] [function_body]
-
def:函式定義關鍵詞
-
function_name:函式名稱
-
():引數串列放置的位置,可以為空
-
parameter_list:可選,指定向函式中傳遞的引數
-
comments:可選,為函式指定注釋(如何列印函式中的注釋)
-
function_body:可選,指定函式體
"""函式的定義""" """ def function_name([parameter_list]): [''' comments '''] 注釋 [function_body] 函式體 """ # 定義函式,引數為空(注意縮進) def function_demo(): # 不要忘記冒號 print("我是一個函式") # [function_body] 函式體 # 定義函式,含有引數,注釋 def func_with_params(a, b, c): """ 這是一個攜帶引數和注釋的函式 ---> comments """ print(f"傳入的引數為:a={a},b={b},c={c}") # 列印函式comments(注釋) # 1、__doc__ 列印出注釋 print(func_with_params.__doc__) # func_with_params()---->()沒有括號 # 2、help 列印函式和注釋 help(func_with_params) # func_with_params()---->()沒有括號 # 空函式 (函式體未想好/功能暫時沒想好怎么寫) # 1、pass def filter_char(s): pass # 2、comments def filter_char1(c): """ 功能:過濾銘感詞 """
三、定義函式的注意事項:
-
縮進:python 是通過嚴格的縮進來判斷代碼塊兒
-
函式體和注釋相對于 def 關鍵字必須保持一定的縮進,一般都是 4 個空格
-
pycharm 自動格式化快捷鍵:
ctrl+alt+L
-
-
定義空函式
-
使用
pass陳述句占位 -
寫函式注釋 comments
四、函式的呼叫
function_name([parameter_value]) # function_name:函式名稱 # parameter_value:可選,指定各個引數的值
"""函式的呼叫""" # 無參函式呼叫 function_demo() # 有參函式呼叫 func_with_params(1, 2, 3)
五、函式引數的使用
-
形式引數:定義函式時,函式名稱后面括號中的引數
-
實際引數:呼叫函式時,函式名稱后面括號中的引數
"""函式引數的使用""" # 1、形式引數:定義函式時,函式名稱后面括號中的引數 def demo(a, b, v): # a, b, v print(f"傳入的引數為:a={a},b={b},c={v}") # 2、實際引數:呼叫函式時,函式名稱后面括號中的引數 demo(1, 2, 4) # 1,2,3實際引數
1、位置引數
-
數量必須與定義時一致
-
位置必須與定義時一致
"""位置引數""" def demo(a, b, v): print(f"傳入的引數為:a={a},b={b},c={v}") # 1、正確的 demo(1, 2, 3) # 2、錯誤的例子,數量少了 # demo(1, 45) # 有一個黃色提示 系統提示:TypeError: demo() missing 1 required positional argument: 'v' # 3、錯誤的例子,數量多了 # demo(1, 2, 3, 4) # 有一個黃色提示 系統提示:TypeError: demo() takes 3 positional arguments but 4 were given def person(name, age): print(f"姓名{name}") if age > 18: print(f"{name}已成年") else: print(f"{name}未成年") # 4、順序錯 # person(22, 'tom') # TypeError: '>' not supported between instances of 'str' and 'int' # 5、正常 person('jack', 28)
2、關鍵字引數
-
使用形式引數的名字確定輸入的引數值
-
不需要與形式引數的位置完全一致
"""關鍵字引數""" def person(name, age): print(f"姓名:{name}") if age > 18: print(f"{name}已成年") else: print(f"{name}:未成年") person(age=25, name='楊冪')
3、設定默認引數
-
定義函式時可以指定形式引數的默認值
-
指定默認值的形式引數必須放在所有引數的最后,否則會產生語法錯誤
-
param=default_value:可選,指定引數并且為該引數設定默認值為 default_value -
注意:給形式引數設定默認值,默認值要用不可變物件(整數型、浮點型、元組、布林值、字串),用可變物件(字典,串列),默認值可能會催著呼叫發生變化
# 注意:給形式引數設定默認值,默認值要用不可變物件(整數型、浮點型、元組、布林值、字串),可變物件(字典,串列) # 錯誤示范,默認值為空串列 def wrong_demo2(a, b, c=[]): c.append(a) c.append(b) print(a, b, c) wrong_demo2(1, 2) wrong_demo2(3, 4) """設定默認引數""" def person(name, age, international='中國'): print(f"姓名:{name}") print(f"國籍為{international}") if age > 18: print(f"{name}已成年") else: print(f"{name}:未成年") person(name='jace', age=30) person(name='tom', age=25, international='美國') # 錯誤的,默認值沒有放在最后 def age(a=18, c, b): age(c, b) # 系統報錯:SyntaxError: non-default argument follows default argument
4、可變引數
-
可變引數也稱為不定長引數
-
傳入函式中實際引數可以是任意多個
-
常見形式()
-
*args接收任意多個實際引數,并將其放到一個元組中
使用已經存在的串列或元組作為函式的可變引數,可以在串列的名稱前加
* -
**kwargs接收任意多個類似關鍵字引數一樣顯式賦值的實際引數,并將其放到一個字典中
使用已經存在字典作為函式的可變引數,可以在字典的名稱前加
**
# *args 接收任意多個實際引數,并將其放到一個元組中 # 函式定義中的*args相當于打包 def print_language(*args): print(args) for a in args: print(a) # 呼叫函式,把不同數量的引數傳遞進去,用位置引數 # print_language('python', 'java') # print_language('python', 'java', 'php', "go") # 函式呼叫時*args相當于解包 lis = ['python', 'java', 'php', "go"] # 相當于 print_language('python', 'java', 'php', "go") print_language(*lis) # **kwargs 接收任意多個類似關鍵字引數一樣顯式賦值的實際引數,并將其放到一個**字典**中 # 函式定義中的**kwargs相當于打包 def print_info(**kwargs): print(kwargs) for a in kwargs.items(): print(a) print_info(tom=18, jack=24) print_info(tom=18, jack=24, Aice=25) # 函式呼叫時**kwargs相當于解包 di = {'cat': 18, 'jace': 24, 'alict': 65} print_info(**di)
六、函式回傳值
def function_name([parameter_list]): [''' comments '''] [function_body] return [value] # value:可選,指定要回傳的值 """函式回傳值""" # 定義加法函式 def sum(a, b): result = a + b # 函式回傳值 # return result, a, b # 回傳保存元組 r = sum(1, 2) print(r)
lambda 運算式(匿名函式)
1、使用場景
-
需要一個函式,但是又不想費神去命名這個函式
-
通常在這個函式只使用一次的場景下
-
可以指定短小的回呼函式
2、語法
result = lambda [arg1 [, arg2, .... , argn]]: expression
-
result:呼叫 lambda 運算式
-
[arg1 [, arg2, …. , argn]]:可選,指定要傳遞的引數串列
-
expression:必選,指定一個實作具體功能的運算式
# 常規寫法 def circle_area(r): """ 計算圓的面積 r:半徑 """ result = math.pi * r ** 2 return result r = 10 print(f"半徑為{r}的面積為{circle_area(r)}") # lanbda運算式 # result = lambda 引數 : expression result = lambda r: math.pi * r ** 2 print(f"半徑為{r}的面積為{circle_area(r)}") # 對獲取到的資訊進行排序 book_info = [ ('python', 15), ('javn', 100), ('軟體測驗基礎', 25) ] print(book_info) # 指定規則排列 # lambda x: (x[1]) 回傳了串列中每 book_info.sort(key=lambda print(book_info)
本文來自博客園,作者:{jiuyou-emperor},轉載請注明原文鏈接:{https://www.cnblogs.com/jiuyou-emperor/}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/412885.html
標籤:Python
上一篇:執行緒
下一篇:基本資料型別與字串
