3.1.python_自定義函數

本文詳細介紹了Python中函數的各種參數設置方式,包括位置參數、關鍵字參數、可變數量參數及可變數量的關鍵字參數等,並通過具體例子演示了如何使用這些參數。

0.語法

使用關鍵詞def定義函數, 要注意的點是函數的參數設置和返回值.

def func_name(para):
    """函數描述"""
    # TODO, 此處爲函數体, body
    return exp # 返回語句視需要添加

1.參數設置

1.1.位置參數

在函數的定義和調用傳參時, 以實參出現的位置判定所屬:

def ceshi(x, y):
    print(x, y)


ceshi(5, 2)  # 5 2
ceshi(2, "ceshi")  # 2 ceshi

1.2.關鍵字參數

關鍵字參數是指, 在傳參時用函數定義中參數列表的關鍵字知名實參所屬, 不要求實參順序:

def ceshi(x, y):
    print(x, y)

ceshi(x=20, y='數字')  # 20 數字
ceshi(y='20', x='數字')  # 數字 20

1.3.可變數量參數

可變數量參數是指函數可接受任意數量的參數, 以實際傳參爲準, 需要在函數定義中使用*, 即將任意可能的參數視作一个列表傳入:

def make_dumplings(*toppings):
    """打印所有已選配料"""
    print("以下是您的餃子將添加的餡料:")
    for topping in toppings:
        print("--" + topping)

make_dumplings('芹菜', '牛肉', '茴香', '蔥白')

# 以下是您的餃子將添加的餡料:
# --芹菜
# --牛肉
# --茴香
# --蔥白

結合使用位置參數和可變數量參數時, 要將可變參數(*list_)置于參數列表的最末:

def make_dumplings(number, *toppings):
    """打印所有已選配料"""
    print(f"您一共點了{number}个餃子.")
    print("以下是您的餃子將添加的餡料:")
    for topping in toppings:
        print("--" + topping)

make_dumplings(20, '芹菜', '牛肉', '茴香', '蔥白')

# 您一共點了20个餃子.
# 以下是您的餃子將添加的餡料:
# --芹菜
# --牛肉
# --茴香
# --蔥白

1.4.可變數量的關鍵字參數

若函數接受任意數量的關鍵字參數, 需要在參數列表中使用(**形參名)的形式, 此時是將任意數量的關鍵字參數視作字典傳入的, 多用在不確定信息種類和數量的場合:

def book(title, **book_info):
    """創建一个包含書籍信息的字典, 並返回"""
    book_dict = {"書名": title}
    # 使用for循環遍歷實參字典, 並添加到將返回的字典中
    for key, value in book_info.items():
        book_dict[key] = value
    # 返回根據實參創建的字典
    return book_dict

book('三國志', '作者'='陳壽', '版本'='信述堂重刊本')
print(book)
# ['書名'='三國志', '作者'='陳壽', '版本'='信述堂重刊本']

### Teardown Method 函数的用途与实现详解 #### 3.1 Teardown Method 的定义与作用 `teardown_method` 是 Python 测试框架(如 `pytest` 或其他自定义测试框架)中的一种方法,用于在每个测试用例执行完成后进行清理操作。它通常用于释放资源、关闭连接或停止应用程序等场景[^1]。与 `setup_method` 相对应,`teardown_method` 确保每次测试结束后环境都能恢复到初始状态。 #### 3.2 实现细节 在 `pytest` 中,如果将 `setup_method` 和 `teardown_method` 放置在类内部,则它们会在类中的每个测试方法执行前后被调用。然而,如果将 `setup_function` 和 `teardown_function` 放置在类外部,则它们仅在类外部的函数用例执行前后被调用[^1]。 以下是一个使用 `teardown_method` 的代码示例: ```python import pytest class TestClass: def setup_method(self, method): print(f"\nSetup for {method.__name__}") def teardown_method(self, method): print(f"Teardown for {method.__name__}") # 在这里可以添加释放设备或停止应用的逻辑 self.release_resources() def test_one(self): print("正在执行---test_one") def test_two(self): print("正在执行---test_two") def release_resources(self): print("释放资源和停止应用") ``` 运行上述代码时,`setup_method` 和 `teardown_method` 将分别在每个测试方法执行前和执行后被调用。输出结果如下: ``` Setup for test_one 正在执行---test_one 释放资源和停止应用 Teardown for test_one Setup for test_two 正在执行---test_two 释放资源和停止应用 Teardown for test_two ``` #### 3.3 优化建议 为了确保 `teardown_method` 能够高效地释放资源或停止应用,可以考虑以下几点: - **异常处理**:在 `teardown_method` 中添加异常处理逻辑,以防止清理过程中出现错误导致测试失败。 - **资源管理**:使用上下文管理器(`with` 语句)来自动管理资源的获取和释放。 - **日志记录**:记录 `teardown_method` 的执行过程,便于调试和排查问题。 以下是一个改进后的实现示例: ```python import pytest class TestClass: def setup_method(self, method): print(f"\nSetup for {method.__name__}") def teardown_method(self, method): try: print(f"Teardown for {method.__name__}") self.release_resources() except Exception as e: print(f"Error during teardown: {e}") def test_one(self): print("正在执行---test_one") def test_two(self): print("正在执行---test_two") def release_resources(self): print("释放资源和停止应用") # 模拟资源释放逻辑 # 如果需要,可以在这里关闭文件、网络连接等 ``` #### 3.4 注意事项 - 如果测试类中没有定义 `teardown_method`,则不会自动执行任何清理操作。 - 确保 `teardown_method` 的逻辑简单且可靠,避免引入复杂性或依赖外部状态。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值