函式基礎

偏執成癮จุ๊บ發表於2020-10-10

第五次

什麼是函式
函式是組織好的,可以重複使用的,用來實現單一或相關功能的程式碼段。
自己創造的函式叫什麼 ?叫自定義函式
函式的定義
def 函式名 (引數列表) : # 函式名不建議使用單獨的字母 ,
//實現了特定功能的多行程式碼
[return[返回值]] #返回值如果不寫 就為空 那麼主要是根據實際意義

def bidaxiao(a,b):
if a>b:
return a
elif a<b:
return b
else:
return a
函式的呼叫
函式值=函式名(值或者引數變數)
jieguo=bidaxiao(12,15)
print(jieguo)

定義一個空函式,沒有實際意義的
def konghanshu():
pass

引數的傳遞
形式引數:簡稱形參 定義函式時,函式名後面括號中的引數就是形式引數
實際引數:簡稱實參 就是在呼叫函式時,函式名後面括號中的引數稱為實際引數
值傳遞和引用傳遞的區別
值傳遞適合不可變型別字元患數字元祖,通過函式體不能修改函式外變數的值
引用傳遞適用於可變型別列表字典,通過函式體可以改變函式外引數的值
定義函式-引用傳遞的例子
list1=[1,2,3,4]
def changelist(listn):
list1.append(listn)

呼叫函式
changelist([5,6,7,8])
print(list1)
引數的型別
必須引數,關鍵字引數,預設引數,不定長引數
(1)必須引數
def hanshuming1(canshu1, canshu2):
print(canshu1, canshu2)
呼叫它
hanshuming1(“chuanru1”)
hanshuming1 (“chuanru1”, “chuanru2”)
必須引數:必須以正確的順序傳入引數,呼叫時引數數量必須和申明時一樣

(2)關鍵字引數
是一個特殊的必須引數,他可以通過關鍵宇傳值,
hanshuming1(canshu2=“chuanzhi2”)
hanshuming1 (canshu2=“chuanzhi2” ,canshu1=“chuanzhi1”)

(3) 預設引數:在定義的過程中設定了預設值
定義
def hanshuming2(canshu1,canshu2=‘morenzhi’):
print(canshu1,canshu2)

呼叫
hanshuming1(‘chuanzhi3’)
如果有預設值,我傳入一個新值,新值會覆蓋掉預設值
hanshuming2 (“chuanzhi’”, “chuanzhi4”)
也可以用關鍵寧去傳入引數
anshuming2 (canshu1=“chuanzhi5”)

(4)不定長引數
在定義的過程中,不確定會有多少個引數,就設定成不定長引數
可以在引數前加一個*,或者**,星星:表示不定長引數
(1)引數前面帶一個*,把不確定長度的引數儲存在元組裡,可以通過元祖呼叫其中某一個引數
定義不定長引數
def a(name,*canshuming):
print(name)
print(canshuming)

呼叫不定長引數
a(‘zhangsan’,‘17’,‘changsha’)

(2) 引數前面帶2顆*,把不確定長度的引數儲存在字典裡面
定義
def a(name,**canshuming):
print(name)
print(canshuming)
呼叫
a(‘zhangsan’,nianling=‘17’,dizhi=‘changsha’)

*可以單獨出現,在呼叫的時候必須通過關鍵宇傳值
定義
def a(num1, num2, *, num4):
return num1+num2+num4
print(a(1,2, num4=4))

注意不定長引數可以單獨存在,
def a2(*yu):
print(yu)

a2()
*和**的不定長引數也可以同時被定義
def a3(*shizhisha1,**shizhisha2):
print(shizhisha1)
print(shizhisha2)
a3(1,2,3,name=‘zhangsan’,nianling=‘18’)

函式的巢狀
函式與函之間可以進行相互呼叫
呼叫巢狀:在定義的過程中呼叫另一個函式
def a6():
print(‘nihao a6’)
def b6():
print(‘nihao b6’)
a6()
b6()

定義巢狀:在函式裡面定義函式
def a7():
print(‘nihao a7’)
def b7():
print(‘nihao b7’)
b7()
a7()

函式的遞迴
自己呼叫自己
def a8():
print(‘nihao a8’)
a8()
a8()
注意這樣呼叫會出現死迴圈
def a9():
print(‘nihao a9’)
b9()
def b9():
print(‘nihao b9’)
a9()
b9()

匿名函式lambda表示式
語法:lambda 引數1,引數2,…:表示式
注意,接的是表示式,而不是程式碼塊,必須要用關鍵字lambda

比如現在想通過函式求和
通過普通函式求和
def sum(a,b):
return a+b
print(sum(1,5))

通過函式名函式求和
sum1=lambda a,b:a+b
print(sum1(8,89))

匿名函式和函式的區別
匿名函式不可以使用其他變數,只能對內部引數做運算,函式裡可以使用函式外的引數
模組
為什麼要使用模組
隨著專案功能和需求增多,程式碼量也會加大,把全部程式碼放在一個檔案會顯得冗餘,因此需要使用模組分割槽管理
什麼是python模組?是一個python檔案,以.py結尾

匯入模組
一般匯入的內容放在檔案的最開始
匯入的方式

import
eg import time
eg import time()

from…import 從某個模組中匯入一個指定的部分
from time import sleep

跨目錄呼叫模組
from time import sleep

全部匯入
from wenjian1.demo6 import *
import 搜尋路徑
當你匯入一個模組,python直譯器對模組位置有一個搜尋順序
1.當前目錄
2.如果不是當前目錄,python會搜尋總的下面的每一個目錄
3.如果都找不到,python會檢視安裝的預設路徑

相關文章