Python函式與lambda 表示式(匿名函式)

九幽帝君發表於2022-01-15

Python函式

一、函式的作用

二、函式的定義

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)                                  

 

相關文章