最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 函數(shù)定義與使用實(shí)踐案例

 更新時(shí)間:2025年10月31日 14:34:18   作者:wudl5566  
本篇教程詳細(xì)介紹了Python函數(shù)的定義與使用,包括函數(shù)參數(shù)、返回值、變量作用域、匿名函數(shù)、高階函數(shù)、遞歸函數(shù)等重要概念,感興趣的朋友跟隨小編一起看看吧

第6篇:函數(shù)定義與使用

函數(shù)概述

函數(shù)是組織好的、可重復(fù)使用的、用來實(shí)現(xiàn)單一或相關(guān)聯(lián)功能的代碼段。函數(shù)能夠提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。

函數(shù)的優(yōu)點(diǎn)

  1. 代碼重用:避免重復(fù)編寫相同功能的代碼
  2. 模塊化:將復(fù)雜問題分解為更小的部分
  3. 可維護(hù)性:修改功能時(shí)只需修改函數(shù)定義
  4. 可讀性:使代碼結(jié)構(gòu)更清晰,易于理解

函數(shù)定義

在Python中使用def關(guān)鍵字定義函數(shù)。

基本語法

def 函數(shù)名(參數(shù)列表):
    """文檔字符串(可選)"""
    函數(shù)體
    return 返回值  # 可選

簡單函數(shù)示例

# 定義一個(gè)簡單的函數(shù)
def greet():
    """打印問候語"""
    print("Hello, World!")
# 調(diào)用函數(shù)
greet()  # 輸出:Hello, World!
# 帶參數(shù)的函數(shù)
def greet_person(name):
    """向指定的人問好"""
    print(f"Hello, {name}!")
greet_person("張三")  # 輸出:Hello, 張三!
greet_person("李四")  # 輸出:Hello, 李四!

函數(shù)調(diào)用

調(diào)用函數(shù)時(shí)需要使用函數(shù)名后跟圓括號,圓括號中可以包含傳遞給函數(shù)的參數(shù)。

基本調(diào)用

# 定義函數(shù)
def say_hello():
    print("Hello!")
# 調(diào)用函數(shù)
say_hello()  # 輸出:Hello!
# 多次調(diào)用
say_hello()  # 輸出:Hello!
say_hello()  # 輸出:Hello!

函數(shù)調(diào)用的過程

def calculate_sum(a, b):
    """計(jì)算兩個(gè)數(shù)的和"""
    result = a + b
    return result
# 調(diào)用函數(shù)并保存返回值
sum_result = calculate_sum(10, 20)
print(sum_result)  # 輸出:30
# 直接使用函數(shù)返回值
print(calculate_sum(5, 15))  # 輸出:20

函數(shù)參數(shù)

函數(shù)參數(shù)允許我們向函數(shù)傳遞數(shù)據(jù),使函數(shù)更加靈活。

位置參數(shù)

def introduce(name, age):
    """介紹一個(gè)人"""
    print(f"我叫{name},今年{age}歲")
# 按位置傳遞參數(shù)
introduce("張三", 25)  # 輸出:我叫張三,今年25歲
# 參數(shù)順序很重要
introduce(25, "張三")  # 輸出:我叫25,今年張三歲(邏輯錯(cuò)誤)

關(guān)鍵字參數(shù)

def introduce(name, age):
    """介紹一個(gè)人"""
    print(f"我叫{name},今年{age}歲")
# 使用關(guān)鍵字參數(shù),順序可以改變
introduce(age=25, name="張三")  # 輸出:我叫張三,今年25歲
# 混合使用位置參數(shù)和關(guān)鍵字參數(shù)
introduce("李四", age=30)  # 輸出:我叫李四,今年30歲
# 注意:位置參數(shù)必須在關(guān)鍵字參數(shù)之前
# introduce(age=30, "李四")  # 錯(cuò)誤!

默認(rèn)參數(shù)

def greet(name, greeting="Hello"):
    """問候函數(shù),默認(rèn)問候語為Hello"""
    print(f"{greeting}, {name}!")
# 使用默認(rèn)參數(shù)
greet("張三")  # 輸出:Hello, 張三!
# 覆蓋默認(rèn)參數(shù)
greet("李四", "你好")  # 輸出:你好, 李四!
greet("王五", greeting="Hi")  # 輸出:Hi, 王五!

可變參數(shù)

# *args:接收任意數(shù)量的位置參數(shù)
def sum_all(*args):
    """計(jì)算所有參數(shù)的和"""
    total = 0
    for num in args:
        total += num
    return total
print(sum_all(1, 2, 3))        # 輸出:6
print(sum_all(1, 2, 3, 4, 5))  # 輸出:15
# **kwargs:接收任意數(shù)量的關(guān)鍵字參數(shù)
def print_info(**kwargs):
    """打印所有關(guān)鍵字參數(shù)"""
    for key, value in kwargs.items():
        print(f"{key}: {value}")
print_info(name="張三", age=25, city="北京")
# 輸出:
# name: 張三
# age: 25
# city: 北京

參數(shù)組合使用

def complex_function(a, b=10, *args, **kwargs):
    """復(fù)雜的參數(shù)組合示例"""
    print(f"位置參數(shù)a: {a}")
    print(f"默認(rèn)參數(shù)b: ")
    print(f"可變位置參數(shù)args: {args}")
    print(f"可變關(guān)鍵字參數(shù)kwargs: {kwargs}")
# 調(diào)用函數(shù)
complex_function(1, 2, 3, 4, 5, name="張三", age=25)
# 輸出:
# 位置參數(shù)a: 1
# 默認(rèn)參數(shù)b: 2
# 可變位置參數(shù)args: (3, 4, 5)
# 可變關(guān)鍵字參數(shù)kwargs: {'name': '張三', 'age': 25}

返回值

函數(shù)可以使用return語句返回值。

基本返回值

def add(a, b):
    """計(jì)算兩個(gè)數(shù)的和"""
    return a + b
result = add(10, 20)
print(result)  # 輸出:30
# 函數(shù)可以返回任意類型的值
def get_user_info():
    """返回用戶信息"""
    return {"name": "張三", "age": 25}
user = get_user_info()
print(user)  # 輸出:{'name': '張三', 'age': 25}

返回多個(gè)值

def calculate(a, b):
    """計(jì)算兩個(gè)數(shù)的和與積"""
    sum_result = a + b
    product_result = a * b
    return sum_result, product_result
# 接收多個(gè)返回值
sum_val, product_val = calculate(3, 4)
print(f"和:{sum_val},積:{product_val}")  # 輸出:和:7,積:12
# 也可以作為元組接收
result = calculate(3, 4)
print(result)  # 輸出:(7, 12)

無返回值的函數(shù)

def print_message(message):
    """打印消息"""
    print(message)
    # 沒有return語句,隱式返回None
result = print_message("Hello")
print(result)  # 輸出:None

變量作用域

變量的作用域決定了變量在程序中的可見范圍。

局部變量

def my_function():
    """演示局部變量"""
    local_var = "我是局部變量"
    print(local_var)
my_function()
# print(local_var)  # 錯(cuò)誤:局部變量在函數(shù)外部不可訪問

全局變量

global_var = "我是全局變量"
def access_global():
    """訪問全局變量"""
    print(global_var)  # 可以訪問全局變量
access_global()
print(global_var)  # 在全局作用域也可以訪問
def modify_global():
    """修改全局變量"""
    global global_var  # 聲明使用全局變量
    global_var = "我被修改了"
    print(global_var)
modify_global()
print(global_var)  # 輸出:我被修改了

嵌套函數(shù)中的變量作用域

def outer_function():
    """外層函數(shù)"""
    outer_var = "外層變量"
    def inner_function():
        """內(nèi)層函數(shù)"""
        inner_var = "內(nèi)層變量"
        print(f"在內(nèi)層函數(shù)中訪問外層變量:{outer_var}")
        print(f"內(nèi)層變量:{inner_var}")
    inner_function()
    # print(inner_var)  # 錯(cuò)誤:內(nèi)層變量在外層函數(shù)中不可訪問
outer_function()

nonlocal關(guān)鍵字

def outer_function():
    """演示nonlocal關(guān)鍵字"""
    x = 10
    def inner_function():
        nonlocal x  # 聲明使用外層函數(shù)的變量
        x += 5
        print(f"內(nèi)層函數(shù)中的x:{x}")
    print(f"調(diào)用內(nèi)層函數(shù)前的x:{x}")
    inner_function()
    print(f"調(diào)用內(nèi)層函數(shù)后的x:{x}")
outer_function()
# 輸出:
# 調(diào)用內(nèi)層函數(shù)前的x:10
# 內(nèi)層函數(shù)中的x:15
# 調(diào)用內(nèi)層函數(shù)后的x:15

匿名函數(shù)

匿名函數(shù)是不帶名稱的函數(shù),使用lambda關(guān)鍵字定義。

基本語法

lambda 參數(shù): 表達(dá)式

簡單示例

# 定義匿名函數(shù)
square = lambda x: x ** 2
print(square(5))  # 輸出:25
# 匿名函數(shù)用于簡單計(jì)算
add = lambda x, y: x + y
print(add(3, 4))  # 輸出:7
# 匿名函數(shù)用于字符串操作
upper_case = lambda s: s.upper()
print(upper_case("hello"))  # 輸出:HELLO

匿名函數(shù)的應(yīng)用

# 與內(nèi)置函數(shù)結(jié)合使用
numbers = [1, 2, 3, 4, 5]
# 使用map函數(shù)和lambda
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # 輸出:[1, 4, 9, 16, 25]
# 使用filter函數(shù)和lambda
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 輸出:[2, 4]
# 使用sorted函數(shù)和lambda
students = [("張三", 85), ("李四", 90), ("王五", 78)]
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students)  # 輸出:[('王五', 78), ('張三', 85), ('李四', 90)]

高階函數(shù)

高階函數(shù)是接受函數(shù)作為參數(shù)或返回函數(shù)的函數(shù)。

函數(shù)作為參數(shù)

def apply_operation(a, b, operation):
    """應(yīng)用指定的操作"""
    return operation(a, b)
def add(x, y):
    """加法函數(shù)"""
    return x + y
def multiply(x, y):
    """乘法函數(shù)"""
    return x * y
# 將函數(shù)作為參數(shù)傳遞
result1 = apply_operation(5, 3, add)
result2 = apply_operation(5, 3, multiply)
print(result1)  # 輸出:8
print(result2)  # 輸出:15

函數(shù)作為返回值

def create_multiplier(n):
    """創(chuàng)建乘法器函數(shù)"""
    def multiplier(x):
        return x * n
    return multiplier
# 創(chuàng)建不同的乘法器
double = create_multiplier(2)
triple = create_multiplier(3)
print(double(5))   # 輸出:10
print(triple(5))   # 輸出:15

遞歸函數(shù)

遞歸函數(shù)是調(diào)用自身的函數(shù),必須有終止條件。

基本遞歸示例

def factorial(n):
    """計(jì)算階乘"""
    # 基礎(chǔ)情況:遞歸終止條件
    if n == 0 or n == 1:
        return 1
    # 遞歸情況
    else:
        return n * factorial(n - 1)
print(factorial(5))  # 輸出:120
def fibonacci(n):
    """計(jì)算斐波那契數(shù)列"""
    # 基礎(chǔ)情況
    if n <= 1:
        return n
    # 遞歸情況
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(6))  # 輸出:8

遞歸注意事項(xiàng)

import sys
# 查看遞歸限制
print(sys.getrecursionlimit())  # 通常為1000
# 設(shè)置遞歸限制(謹(jǐn)慎使用)
# sys.setrecursionlimit(2000)

函數(shù)文檔字符串

文檔字符串(docstring)用于描述函數(shù)的功能、參數(shù)和返回值。

基本格式

def calculate_area(length, width):
    """
    計(jì)算矩形面積
    參數(shù):
        length (float): 矩形的長度
        width (float): 矩形的寬度
    返回:
        float: 矩形的面積
    示例:
        >>> calculate_area(5, 3)
        15
    """
    return length * width
# 查看函數(shù)文檔
print(calculate_area.__doc__)
help(calculate_area)

詳細(xì)的文檔字符串

def complex_calculation(x, y, operation="add"):
    """
    執(zhí)行復(fù)雜的數(shù)學(xué)計(jì)算
    這個(gè)函數(shù)可以根據(jù)指定的操作對兩個(gè)數(shù)進(jìn)行計(jì)算。
    參數(shù):
        x (float): 第一個(gè)操作數(shù)
        y (float): 第二個(gè)操作數(shù)
        operation (str, optional): 操作類型,可選值為"add", "subtract", 
                                  "multiply", "divide"。默認(rèn)為"add"
    返回:
        float: 計(jì)算結(jié)果
    異常:
        ValueError: 當(dāng)操作類型不支持時(shí)拋出
        ZeroDivisionError: 當(dāng)除數(shù)為0時(shí)拋出
    示例:
        >>> complex_calculation(10, 5, "add")
        15.0
        >>> complex_calculation(10, 5, "multiply")
        50.0
    """
    operations = {
        "add": lambda a, b: a + b,
        "subtract": lambda a, b: a - b,
        "multiply": lambda a, b: a * b,
        "divide": lambda a, b: a / b
    }
    if operation not in operations:
        raise ValueError(f"不支持的操作類型: {operation}")
    if operation == "divide" and y == 0:
        raise ZeroDivisionError("除數(shù)不能為0")
    return operations[operation](x, y)

函數(shù)最佳實(shí)踐

函數(shù)設(shè)計(jì)原則

# 1. 函數(shù)應(yīng)該只做一件事,并且做好
def calculate_sum(numbers):
    """計(jì)算數(shù)字列表的和"""
    return sum(numbers)
def find_maximum(numbers):
    """找出數(shù)字列表中的最大值"""
    return max(numbers)
# 2. 函數(shù)名應(yīng)該清晰表達(dá)函數(shù)的功能
def is_even(number):
    """判斷數(shù)字是否為偶數(shù)"""
    return number % 2 == 0
# 3. 參數(shù)應(yīng)該有合理的默認(rèn)值
def create_greeting(name, greeting="Hello"):
    """創(chuàng)建問候語"""
    return f"{greeting}, {name}!"
# 4. 函數(shù)應(yīng)該有適當(dāng)?shù)奈臋n字符串
def convert_temperature(temp, from_unit, to_unit):
    """
    轉(zhuǎn)換溫度單位
    參數(shù):
        temp (float): 溫度值
        from_unit (str): 源單位 ("C" 或 "F")
        to_unit (str): 目標(biāo)單位 ("C" 或 "F")
    返回:
        float: 轉(zhuǎn)換后的溫度值
    """
    if from_unit == "C" and to_unit == "F":
        return temp * 9/5 + 32
    elif from_unit == "F" and to_unit == "C":
        return (temp - 32) * 5/9
    else:
        return temp
# 5. 處理異常情況
def safe_divide(a, b):
    """安全除法,處理除零異常"""
    try:
        return a / b
    except ZeroDivisionError:
        print("錯(cuò)誤:除數(shù)不能為0")
        return None

函數(shù)測試

def test_functions():
    """測試函數(shù)功能"""
    # 測試計(jì)算函數(shù)
    assert calculate_sum([1, 2, 3, 4]) == 10
    assert is_even(4) == True
    assert is_even(5) == False
    # 測試溫度轉(zhuǎn)換
    assert abs(convert_temperature(0, "C", "F") - 32) < 0.01
    assert abs(convert_temperature(32, "F", "C") - 0) < 0.01
    print("所有測試通過!")
# 運(yùn)行測試
test_functions()

綜合應(yīng)用示例

# 學(xué)生成績管理系統(tǒng)
class StudentGradeManager:
    """學(xué)生成績管理器"""
    def __init__(self):
        self.students = []
    def add_student(self, name, scores):
        """添加學(xué)生"""
        student = {
            "name": name,
            "scores": scores,
            "average": self.calculate_average(scores)
        }
        self.students.append(student)
    def calculate_average(self, scores):
        """計(jì)算平均分"""
        if not scores:
            return 0
        return sum(scores) / len(scores)
    def get_grade(self, average):
        """根據(jù)平均分獲取等級"""
        if average >= 90:
            return "優(yōu)秀"
        elif average >= 80:
            return "良好"
        elif average >= 70:
            return "中等"
        elif average >= 60:
            return "及格"
        else:
            return "不及格"
    def display_report(self):
        """顯示成績報(bào)告"""
        print("學(xué)生成績報(bào)告")
        print("-" * 40)
        for student in self.students:
            print(f"姓名: {student['name']}")
            print(f"成績: {student['scores']}")
            print(f"平均分: {student['average']:.2f}")
            print(f"等級: {self.get_grade(student['average'])}")
            print("-" * 40)
# 使用示例
manager = StudentGradeManager()
manager.add_student("張三", [85, 90, 78, 92])
manager.add_student("李四", [76, 88, 82, 79])
manager.display_report()

總結(jié)

本篇教程詳細(xì)介紹了Python函數(shù)的定義與使用,包括函數(shù)參數(shù)、返回值、變量作用域、匿名函數(shù)、高階函數(shù)、遞歸函數(shù)等重要概念。我們還學(xué)習(xí)了如何編寫清晰的文檔字符串和遵循函數(shù)設(shè)計(jì)的最佳實(shí)踐。

函數(shù)是Python編程的核心概念之一,掌握函數(shù)的使用對于編寫模塊化、可維護(hù)的代碼至關(guān)重要。

到此這篇關(guān)于python 函數(shù)定義與使用實(shí)踐記錄的文章就介紹到這了,更多相關(guān)python 函數(shù)定義與使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python判斷字符串與大小寫轉(zhuǎn)換

    Python判斷字符串與大小寫轉(zhuǎn)換

    這篇文章主要介紹了Python判斷字符串與大小寫轉(zhuǎn)換的方法,有需要的小伙伴可以參考下。
    2015-06-06
  • Python淺析生成器generator的使用

    Python淺析生成器generator的使用

    生成器generator在循環(huán)過程中,按照某種算法推算數(shù)據(jù),不必創(chuàng)建容器存儲完整的結(jié)果,從而節(jié)省內(nèi)存空間。數(shù)據(jù)量越大,優(yōu)勢越明顯。以上作用也稱之為延遲操作或惰性操作,通俗的講就是在需要的時(shí)候才計(jì)算結(jié)果,而不是一次構(gòu)建出所有結(jié)果
    2022-07-07
  • Python使用numpy產(chǎn)生正態(tài)分布隨機(jī)數(shù)的向量或矩陣操作示例

    Python使用numpy產(chǎn)生正態(tài)分布隨機(jī)數(shù)的向量或矩陣操作示例

    這篇文章主要介紹了Python使用numpy產(chǎn)生正態(tài)分布隨機(jī)數(shù)的向量或矩陣操作,簡單描述了正態(tài)分布的概念并結(jié)合實(shí)例形式分析了Python使用numpy模塊結(jié)合matplotlib繪制正態(tài)分布曲線圖相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • python之如何查找多層嵌套字典的值

    python之如何查找多層嵌套字典的值

    這篇文章主要介紹了python之如何查找多層嵌套字典的值問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 跟老齊學(xué)Python之網(wǎng)站的結(jié)構(gòu)

    跟老齊學(xué)Python之網(wǎng)站的結(jié)構(gòu)

    本教程的最終目的就是教會(huì)大家如何使用Python制作網(wǎng)站,非常的詳盡,需要的朋友可以參考下
    2014-10-10
  • python中的常量和變量代碼詳解

    python中的常量和變量代碼詳解

    這篇文章主要介紹了python中的常量和變量,通過實(shí)例代碼給大家介紹了局部和全局變量,需要的朋友參考下吧
    2018-07-07
  • Python 占位符的使用方法詳解

    Python 占位符的使用方法詳解

    這篇文章主要介紹了Python 占位符的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解python程序中的多任務(wù)

    詳解python程序中的多任務(wù)

    這篇文章主要介紹了python程序中多任務(wù)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • opencv python 基于KNN的手寫體識別的實(shí)例

    opencv python 基于KNN的手寫體識別的實(shí)例

    這篇文章主要介紹了opencv python 基于KNN的手寫體識別的實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Python datetime 格式化 明天,昨天實(shí)例

    Python datetime 格式化 明天,昨天實(shí)例

    這篇文章主要介紹了Python datetime 格式化 明天,昨天實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

崇仁县| 凤冈县| 岳阳市| 长兴县| 始兴县| 九龙县| 龙里县| 云梦县| 金坛市| 鹤庆县| 祁门县| 凉城县| 沅江市| 屏边| 忻城县| 方正县| 宜君县| 沂源县| 泾源县| 舞钢市| 伽师县| 枞阳县| 达州市| 宜兰市| 舟曲县| 密山市| 铁力市| 双辽市| 津南区| 秦皇岛市| 洛阳市| 辛集市| 尉犁县| 临漳县| 剑川县| 噶尔县| 开阳县| 巩义市| 于田县| 睢宁县| 常宁市|