1. 程式人生 > 其它 >今日總結—函式中的引數

今日總結—函式中的引數

今日內容總結

一、函式的定義與呼叫

二、函式的分類

三、函式的返回值

四、函式的引數

五、位置引數

六、關鍵字引數

七、預設引數

八、可變長引數

九、可變長形引數

十、補充說明(*和**在實參中的用法)

一、函式的定義與呼叫

# 1、函式一定一定要遵循先定義然後再呼叫的原則,也就是說呼叫函式,一定要先把函式定義出來才可以

# 2、函式在定義階段只檢測語法不會去執行程式碼

# 3、函式體程式碼只有在呼叫函式的時候才會被執行
  呼叫函式的方法>>>:函式名加括號(當有引數的時候則傳遞引數)
# 4、函式名可以比喻成變數名指向的記憶體中值的位置,而函式名則指向的是函式體程式碼的位置      

函式呼叫舉例

# 先定義
def func():
    print('have a good time')
# 再呼叫
func()   # 這個過程就是在檔案中找到函式體程式碼並執行

二、函式的分類

1 、內建函式

python直譯器中提前定義好可以直接呼叫的函式
eg:len 、open...

2 、自定義函式

程式設計師直接編寫的函式
1、無參函式
# 在函式定義時括號內沒有引數
def index():  # (括號裡面沒有寫東西,但括號必須要有)
    print('放下屠刀')
# 在呼叫無參函式時括號裡面也不需要寫引數
index()  # 結果為 放下屠刀

2、有參函式
# 在函式定義階段括號內有引數>>>:類似於變數名
def index(b):
    print('放下屠刀',b)
# 在有參函式呼叫時括號裡面也必須加上引數
index('aaa')  # 放下屠刀 aaa

3、空函式
# 在定義階段時,函式體程式碼是用pass或者...佔位,只是為了補全結構,本體沒有含義
def index():
    pass
index()  # 在呼叫時,不會發生報錯,但也沒有內容
'''   
在前期規劃的時候可以使用空函式進行快速的羅列出程式中的各種功能,之後再去一步一步的補全各個功能
'''
# 編寫一套機器人的程式
# 1、學習模組
def study():
pass
# 2、溝通模組
def connect():
pass
# 3、操控模組
def automaticity():
pass

三 、函式的返回值

# 函式的返回值就是呼叫函式之後返回的結果 
返回值的關鍵字為:return
l1 = 'have a good time'
res = len(l1)  # 將len函式的返回值賦值給了變數res
print(res)

# 如何獲取函式的返回值
   變數名 = 函式呼叫 
   #使用print列印之後,若沒有使用return則出現的是none
def show():
    print()
res = show()
print(res)  # None

# 如何操作返回值
  1、當函式程式碼沒有使用return關鍵字時,返回值是None
def show():
    print()
res = show()
print(res) 

  2、當函式體程式碼寫了return關鍵字,但沒有跟任何值時,返回值是None
def show():
    print()
    return()
res = show()
print(res) 

  3、當函式體程式碼寫了return並且跟了資料時,那麼返回的就是寫的資料(可以是任意資料型別)
def show():
    print()
    l1 = 123
    return l1
res = show()
print(res)  # 返回值為123
# 再定義函式時,一定要控制縮排

4、return後面還可以跟多個值,使用逗號隔開 它就會自動組織成元組的形式,返回出去
# return後面空格加資料
def show():
    print()
    return 123, 'owen', 1234
res = show()
print(res)  # (123, 'owen', 1234)

5、函式體程式碼遇到return會立刻結束函式執行
  它就相當於迴圈體程式碼中的break

四、*函式的引數

1、函式的引數分為兩大類
  1.1、函式在定義階段括號內寫的引數,我們稱之為'形式引數'簡稱為'形參'
  1.2、函式在呼叫階段寫在括號裡的引數,我們稱之為'實際引數'簡稱為'實參'

2、形參與實參的關係
   '形參類似於變數名,而實參類似於變數的值'
    eg:def index(name):——name就是形參
           print(name)
        index('owen')——owen就是實參
 #  在函式體程式碼執行期間,可以通過形參來直接找到實參
 #  在呼叫函式的時候形參與實參暫時繫結在了一塊,當函式結束執行時,會自動解除繫結
 #  解除之後,形參name就處於一個空的狀態,等待下一次的繫結
 #  繫結過程中,實引數不能少於形引數,它們自定義是一對一的格式   

五 、位置引數


位置形參:在函式定義階段括號內從左到右依次填寫的變數名
    def index(name,age):  # name和age就是位置形參
    
位置實參:在函式呼叫過程中,從左往右依次傳入的真實資料
    index('owen',20)  # owen和20就是位置實參

  • 位置引數的特徵
1、位置形參與位置實參在繫結關係的時候就是按照從左往右的循序依次繫結
2、位置形參與位置實參的個數必須要一樣
def index(name,age):
    print(name,age)
index('owen',20)  # owen 20
index('owen')  # index() missing 1 required positional argument: 'age' 發生報錯

六、關鍵字引數

使用關鍵字在實參中,指名道姓的和形參繫結,不在遵循從左到右的順序
def index(name,age):
    print(name,age)
index(name=20, age='owen')  # 讓name指向20,讓age指向owen
index(name=20, 'owen')  # 報錯
index('owen', name='owen')  # 報錯,一個形參只能指向一個實參
index('owen',age=20)  # owen 20  不會發生報錯

七、預設引數

# 使用在形參中,在開始定義函式時給形參賦值了,在呼叫時如果沒有給形參重新繫結值的話,它就會使用預設的引數
# 預設引數也打破了形參與實參之間個數必須相等的限制
# 預設引數必須定義在位置引數的後面
eg:
     預設性別
 如果是給男生使用的軟體,它的系統預設性別就是男
  如果是給女生使用的軟體,系統預設性別就是女
  • 操作試例
def register(name,age,gender='男'):
    print("""
    學生姓名:%s
    學生年齡:%s
    學生性別:%s   
    """%(name,age,gender))
register('owen', 20)
 #  學生姓名:owen
 #  學生年齡:20
 #  學生性別:男   (沒有繫結,使用預設引數)
register('mary', 18, '女')
 #   學生姓名:mary
 #   學生年齡:18
 #   學生性別:女  

八、可變長引數(非常重要)

# 需要先定義一個函式,無論傳多少位置實參,都可以正常執行

"""
*號在形參中
    可以接收多餘的位置引數,並組織成元組的形式,賦值給*號後面的變數名
"""
def func(l, *a):
    print(l, a)
    
func(1)  # 1 ()
func('owen', 123)  # 'owen' (123,)
func(11.12, 'owen', 123)  # 11.12  ('owen', 123)

"""
**號在形參中
   用來接收多餘的關鍵字引數,並且組織成字典的形式賦值給**後面的變數名
"""
def func(l, **a):
    print(l, a)
    
func(1)  #  1 {}
func(l='owen', age=12)  # owen {'age': 12}
func(l=11.12, name='owen', age=23)  # 11.12 {'name': 'owen', 'age': 23}
''' 使用**時,要用=來進行書寫,也就是在字典增加鍵值對的方式'''

九、可變長形參

定義一個無論個數、資料型別的引數都可以執行的函式
def func(*a, **k):
    print(a, k)
func()  # () {}  一個元組,一個字典
func(1, name='owen')  # (1,) {'name': 'owen'}   當小括號中只有一個值的時候,會被定義成其他資料型別,只有在它後面加個逗號,就被識別為元組
# 當不知道有多少個實參或什麼型別的實參,可以使用這個方法
def index(*args, **kwargs):
    print(args, kwargs)

十 、補充說明(*和**在實參中的用法)

def index(*args, **kwargs):
    print(args, kwargs)
    
"""
 *號在實參中可以將列表或者元組打散成位置引數一一傳入
"""
def index(a, b, c, d):
    print(a, b, c, d)
index(*[1, 2, 3, 4])  # 1 2 3 4

"""
  **號在實參中將字典打散成關鍵字引數一一傳入
"""
def index():
    print(a, b, c, d)
index(**{'a':1, 'b':2, 'c':3, 'd':3})  # 1 2 3 4

今日總結~