下面是 Python 如何定义函数的完整攻略。
定义函数的语法
Python 中定义函数的语法如下:
def function_name(parameters):
"""函数文档字符串"""
# 函数体
return [expression]
其中,def
关键字用于定义函数,后面跟着的是函数名,然后是括号和冒号,括号内是函数的参数列表,冒号后面是函数体。函数体中的代码块需要缩进,通常缩进使用四个空格。
可选的 return
语句用于返回函数的返回值,可以是任意数据类型的表达式。如果没有 return
语句或者没有指定返回值,函数会隐式地返回 None
。
函数参数
Python 中的函数参数可以有默认值,也可以使用可变参数或关键字参数。
默认参数
默认参数指的是在函数定义时指定的参数默认值,在调用函数时可以不传入这些参数。默认参数的定义方式是在参数名后面使用等号指定默认值,如下例:
def print_info(name, age=18):
print(f"{name} is {age} years old")
print_info("Alice") # 输出 Alice is 18 years old
print_info("Bob", 20) # 输出 Bob is 20 years old
在这个例子中,我们定义了 print_info
函数,它有两个参数 name
和 age
,其中 age
有默认值 18
。在调用函数时,我们只传入了一个参数 name
,此时 age
就使用了默认值 18
。
可变参数
可变参数是指传入函数的实参个数是不确定的,例如:
def sum(*numbers):
result = 0
for num in numbers:
result += num
return result
print(sum(1, 2, 3)) # 输出 6
print(sum(1, 2, 3, 4, 5)) # 输出 15
我们在参数前面加了一个星号 *
,表示可以传入任意个数的参数,这些参数都会被当做一个元组传递到函数中。
关键字参数
关键字参数与可变参数相似,但是接受的实参是一个字典,其中包含参数名和对应的参数值,例如:
def print_info(**kwargs):
print(f"name: {kwargs['name']}, age: {kwargs['age']}, gender: {kwargs['gender']}")
print_info(name="Alice", age=18, gender="female") # 输出 name: Alice, age: 18, gender: female
在这个例子中,我们在参数前面加了两个星号 **
,表示可以传入任意个数的关键字参数,这些参数会被打包成一个字典传递到函数中。
函数文档字符串
函数的第一行字符串通常是一条简短的文本字符串,用于说明函数的作用,它通常被称为函数的文档字符串(docstring)。它可以使用三重引号 """
或 '''
来定义,例如:
def greet(name: str) -> str:
"""
Greet a person by name.
Parameters:
name (str): The name to greet.
Returns:
str: A greeting message.
"""
return f"Hello, {name}!"
这里的文档字符串记录了函数的参数和返回值信息,它们通常被用于自动生成函数文档。
函数注解
函数注解是写在函数声明中的一种形式化的注释,它可以为函数参数和返回值添加元信息,但并不会对程序的行为造成任何影响,例如:
def greet(name: str) -> str:
return f"Hello, {name}!"
在这个例子中,我们为函数 greet
的参数 name
和返回值添加了注解,指定它们的类型分别为 str
和 str
。
示例
下面是两个用例以说明 Python 中如何定义函数:
计算列表中最大的数
def max_number(numbers):
"""
返回一个列表中的最大值。
Parameters:
numbers(list): 数值列表。
Returns:
int: 最大值。
"""
max_num = numbers[0]
for num in numbers:
if max_num < num:
max_num = num
return max_num
在这个例子中,我们定义了 max_number
函数,它接收一个列表 numbers
作为参数,然后遍历这个列表,找到并返回其中的最大值。
计算圆的面积
def circle_area(radius: float) -> float:
"""
计算圆的面积。
Parameters:
radius(float): 圆的半径。
Returns:
float: 圆的面积。
"""
return 3.14159 * radius ** 2
在这个例子中,我们定义了 circle_area
函数,它接收一个半径 radius
作为参数,并返回圆的面积,我们使用注解指定了参数和返回值的类型,方便程序员理解和检查程序。