跳转至

Python 笔记 | 函数定义与调用

在 Python 中,函数是一种组织代码的方式,它允许你为一段代码块定义一个名称,然后可以在程序的多个地方通过这个名字来调用这段代码块。下面是如何定义和使用 Python 函数的基本语法:

定义一个函数

Python
1
2
3
4
5
6
def 函数名(参数1, 参数2, ..., 参数n):
    """
    这里是函数的文档字符串(docstring),用于解释函数的作用、参数和返回值。
    """
    函数体  # 这里是执行特定任务的代码块
    return 返回值  # 可选,用于返回函数执行的结果
  • def 是定义函数的关键字。
  • 函数名 是你给函数起的名字,这个名字必须是有效的Python标识符。
  • 参数 是传递给函数的值,这些值在函数体内可以被引用。参数是可选的,如果没有参数,函数定义时的小括号内可以为空。
  • 函数体 是包含函数执行时所需代码的代码块。这个代码块通过冒号 : 开始,并且必须缩进。
  • return 语句用于从函数中返回一个值。这也是可选的,如果没有 return 语句,函数将返回 None

函数调用

一旦函数被定义,你就可以在程序的任何地方通过函数名来调用它,并传递任何必要的参数。例如,如果你定义了一个名为 greet 的函数,你可以这样调用它:

Python
greet("Hello", "World")

实例

下面是一个简单的Python函数示例,该函数接受两个参数(namegreeting),并返回一个字符串,该字符串是这两个参数的组合:

Python
1
2
3
4
5
6
7
8
def greet(name, greeting):
    """
    这个函数接受一个名字和一个问候语,并返回一个问候字符串。
    """
    return f"{greeting}, {name}!"

# 调用函数并打印结果
print(greet("Alice", "Hello"))  # 输出: Hello, Alice!

类型注解

在 Python 中,函数定义本身并不直接支持像某些静态类型语言(如 C++、Java 等)那样的类型注解(type annotations),即你无法直接通过函数定义来强制限定参数或返回值的类型。但从Python 3.5 开始,PEP 484 引入了类型注解的语法,使得我们可以在函数定义时为参数和返回值提供预期的类型信息。

虽然这些类型注解在运行时不会强制检查类型,但它们可以被第三方工具(如 PyCharm 的静态类型检查器等)用来进行静态类型检查,以发现潜在的类型错误。此外,这些类型注解对于文档和 API 的可读性也非常有帮助,所以定义函数时应该养成写类型注解的习惯。

下面是一个带有类型注解的函数定义示例:

Python
def greet(name: str, greeting: str) -> str:
    """
    这个函数接受一个字符串类型的名字和一个字符串类型的问候语,
    并返回一个字符串类型的问候字符串。
    """
    return f"{greeting}, {name}!"

# 调用函数(注意:这里不会进行类型检查)
print(greet("Alice", "Hello"))  # 输出: Hello, Alice!
# 如果尝试传入非字符串类型的参数,Python解释器不会报错,但静态类型检查器可能会警告
print(greet(123, 456))  # 输出: 456, 123!(但这不是期望的行为)

在上面的示例中,: str 是类型注解,它表示参数 namegreeting 应该是字符串类型。-> str 表示函数的返回值应该是字符串类型。

综合实践

Python
# 用关键字 def 来定义函数  
def calculate_sector(central_angle, radius):  
    sector_area = central_angle / 360 * 3.14 * radius ** 2  
    print(f"sector area: {sector_area:.2f}")  
    return sector_area  


calculate_sector(160, 30)  

"""  
写一个计算 BMI 的函数,函数名为 calculate_BMI.
1.可以计算任意体重和身高的BMI值  
2.执行过程中打印一句话,"您的BMI分类为:?"  
3.返回计算出的BMI值  

BMI = 体重 / (身高 ** 2)BMI分类  
偏瘦:BMI <= 18.5  
正常:18.5 < BMI <= 25  
偏胖:25 < BMI <= 30  
肥胖:BMI > 30  
"""  


def calculate_BMI(user_weight: float, user_height: float) -> float:  
    user_bmi = user_weight / (user_height ** 2)  
    index, level = 3, ["偏瘦", "正常", "偏胖", "肥胖"]  
    if user_bmi <= 18.5:  
        index = 0  
    elif user_bmi <= 25:  
        index = 1  
    elif user_bmi <= 30:  
        index = 2  
    print(f"您的BMI分类为: {level[index]}")  
    return user_bmi  


calculate_BMI(90, 1.85)