1. 程式人生 > 實用技巧 >函式基本及函式引數

函式基本及函式引數

一.函式

功能: 包裹一部分程式碼 實現某一個功能 達成某一個目的

特點::

"""
特點:可以反覆呼叫,提高程式碼的複用性,提高開發效率,便於維護管理
函式基本格式
       函式的定義:
       def 函式名():
             code1
             code2

    函式的呼叫:
     函式名()
"""

1. 函式定義

# 定義函式
def func():
    print("我是一個函式")

2. 函式呼叫

func()

3. 函式命名

"""
           函式命名
字母數字下劃線,首字元不能為數字
嚴格區分大小寫,且不能使用關鍵字
函式命名有意義,且不能使用中文哦
"""
駝峰命名法:
    (1) 大駝峰命名法:每個單詞的首字元大寫 (類:面向物件) 
    mycar => MyCar     mydesk => MyDesk
    (2) 小駝峰命名法:除了第一個單詞的首字元小寫之外,剩下每個單詞首字元大寫
    mycar => myCar     mydesk => myDesk
    mycar => my_car    mydesk => my_desk
    symmetric_difference
"""

列:

#  函式的定義處
def cfb_99():
    for i in
range(1,10): for j in range(1,i+1): print("%d*%d=%2d " % (i,j,i*j) , end="") print() # 函式的呼叫處 for i in range(10): cfb_99()

二. 函式的引數

"""
引數:
    (1)形參: 形式引數,在函式的定義處
    (2)實參:實際引數,在函式的呼叫處
    
形參: 普通形參,預設形參,普通收集形參,命名關鍵字形參,關鍵字收集形參
實參: 普通實參,關鍵字實參



遵循原則:
    形參和實參要一一對應

1. 普通形參

"""hang,lie是函式的普通形參"""
def func(hang,lie):
    i = 0
    while i < hang:
            j = 0
            while j < lie:
                print('*',end='')
                j+=1
            print()

            i+=1




#函式的呼叫處
"""10,10是函式的實際引數"""
func(10,10)
func(3,8)

2. 預設形參

"""hang,lie身上有預設值,是預設形參"""
def s_star(hang=10,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j+=1
        print()
        
        i+=1
        
# 函式的呼叫處
"""
在函式呼叫時:
    如果給予實參,那麼直接使用實際引數
    如果沒有給予實參,那麼使用引數預設自帶的值 
"""
# s_star()
# s_star(3,8)
s_star(4)

3.普通形參+預設形參

# 函式的定義處
"""預設形參必須跟在普通形參的身後,順序是一定的"""
def s_star(hang,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j+=1
        print()
        
        i+=1
        
# 函式的呼叫處
# s_star(3,3)
s_star(3)
# s_star() error

4、關鍵字實參

# 函式的定義處
def s_star(hang,a,b,c,d,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j+=1
        print()
        
        i+=1

# 函式的呼叫處
# s_star(hang=4,a=1,b=2,c=3,d=4,lie=5)
s_star(c=3,d=4,lie=5,hang=4,a=1,b=2)

5、普通實參 + 關鍵字實參

def s_star(hang,a,b,c,d,lie=10):
    i = 0
    while i < hang:
        j = 0
        while j < lie:
            print("*",end="")
            j+=1
        print()
        
        i+=1

# 函式的呼叫處
"""關鍵字實參必須跟在普通實參的身後,順序是一定的"""    
# s_star(5,6,99,c=7,d=8,lie=9)
# s_star(c=7,d=8,lie=9,5,6,99) error
s_star(5,1,c=2,d=3,lie=10,b=5) # ok
# s_star(5,1,c=2,d=3,lie=10,a=5) error
s_star(5,1,c=2,d=3,lie=10,,,,b=5) 

s_star(5,1,c='',d='',lie=10,,,,b=5)

6、區分預設形參和關鍵字實參

# 函式的定義處
def lol31_gameteam(top="王盼盼",middle="吳洪昌",bottom="孫敬華",jungle="孫致和",support="周鵬飛"):
    print("上單選手{}".format(top))
    print("中單選手{}".format(middle))
    print("下單選手{}".format(bottom))
    print("打野選手{}".format(jungle))
    print("輔助選手{}".format(support))
    
# 函式的呼叫處
lol31_gameteam()
lol31_gameteam(top="牧樹人",middle="李亞",bottom="周鵬飛",jungle="溫子越",support="孫敬華")

三、收集引數

"""
收集引數:
    (1)普通收集引數:    專門用來收集多餘的沒人要的普通實參
    def func(*args):
        code
    *args => arguments(引數)
    在args這個引數的前面加上一個*表達普通收集引數,形成一個元組
"""

基本使用:

# 基本使用
def func(a,b,c,*args):
    print(a,b,c)
    print(args) # (1,2,3,4,5,5,6,7,8)
    
func(1,2,3,4,5,5,6,7,8)


# 計算任意個數的累加和
def func(*args):
    total = 0
    for i in args:
        total += i
        
    print(total)
    
func(1,2,3,4,6,10,11,100)
"""
(2)關鍵字收集引數 : 專門用來收集多餘的沒人要的關鍵字實參
    def func(**kwargs):
        code1...
    **kwargs => keyword arguments
    在kwargs引數的前面加上2個**表達關鍵字收集引數,形成一個字典
"""

例:

def func(**kwargs):
    dic = {"monitor":"班長","class_flower":"班花","class_grass":"班草"}
    strvar1 = ''
    strvar2 = ''
    # 遍歷字典中的鍵值對
    for k,v in kwargs.items():
        if k in dic:
            strvar1 += dic[k] + ':' + v + '\n'
        else:
            strvar2 += v + ','

print(strvar1.strip())
print("吃瓜群眾:"+ strvar2.rstrip(","))

四、命名關鍵字引數

"""
定義命名關鍵字引數的兩種方式:
    (1)def func(a,b,*,c) c是命名關鍵字
    (2)def func(*args,c,**kwargs) c是命名關鍵字引數
    在函式呼叫時,必須使用命名關鍵字引數來進行賦值
"""

1、關於* 和 ** 的使用方法

關於 *

"""
* 和 ** 在函式的定義處,用來做收集操作,打包
* 和 ** 在函式的呼叫處,用來做打散操作,解包
"""

def func(a,b,*,c,d):
    print(a,b)
    print(c,d)
    
lst = [1,2]
# *把列表裡面的所有元素拿出來,當成引數一個一個賦值給func進行呼叫
func(*lst,c=3,d=4)

關於 **

def func(a,b,*,c,d):
    print(a,b)
    print(c,d)
dic = {"c":3,"d":4}
# **把字典裡面的所有元素拿出來,拼裝成鍵=值的引數形式,賦值給func進行呼叫
func(1,2,**dic,) # func( c=3, d=4 )

2、引數定義順序

# ### 當所有引數都在一起的時候,按照什麼順序定義呢?
# 引數定義的順序:普通引數 -> 預設引數 -> 普通收集引數 -> 命名關鍵字引數 -> 關鍵字收集引數
# 收集到所有的實參: def func(*args,**kwargs)

五、return 返回值

"""
自定義函式的返回值,return 可以把值返回到函式的呼叫處
    (1) return + 六大標準資料型別 , 還有類和物件,函式
    如果不定義return , 預設返回的是None
    
    (2) 在執行完return之後,立刻終止函式,後面的程式碼不執行
"""

1、return的返回型別

def func():
    # return 1
    # return 3.14
    # return "abc"
    # return []
    # return ()
    # return {"a":1}
    pass
res = func()

# 如果不定義return , 預設返回的是None
print(res) # None

2.在執行完return之後,立刻終止函式,後面的程式碼不執行

def func():
    print(1)
    print(2)
    return 3
    print(4)
    print(5)

res = func()
print(res)

def func():
    for i in range(3):
        if i == 2:
            return 1
        print(i)
res = func()
print(res)

3、模擬簡單的計算器 + - * /

def func(sign,num1,num2):
    if sign == "+":
        res = num1 + num2
    elif sign =="-":
        res = num1 - num2
    elif sign == "*":
        res = num1 * num2
    elif sign == "/":
        if num2 == 0:
            return "除數不能為0  , 腦弟!"
        res = num1 / num2
    else:
        return "這個本計算器真算不了"

    return res

res = func("+",3,5)
res = func("-",10,20)
res = func("*",10,20)
res = func("/",20,10)
res = func("/",20,0)
res = func("&",20,0)
print(res)