python 定义函数,包括参数传递、返回值
定义函数是编程中的基本技能之一,它允许我们将代码组织成可重用的块。Python 提供了简单而强大的方式来定义函数,并且支持多种参数传递方式和返回值处理。
定义函数
使用 def 关键字来定义一个函数。函数定义通常包括函数名、参数列表(可选)和函数体。以下是一个简单的例子:
def greet():print("Hello, world!")调用这个函数很简单:greet() # 输出: Hello, world!
参数传递
位置参数 (Positional Arguments)这是最常用的参数类型,参数按照它们在函数定义中的顺序传递给函数。
def greet(name):print(f"Hello, {name}!")greet("Alice") # 输出: Hello, Alice!
默认参数 (Default Arguments)
可以为参数指定默认值,如果调用时没有提供对应的参数,则使用默认值。
def greet(name="world"):print(f"Hello, {name}!")greet() # 输出: Hello, world!greet("Bob") # 输出: Hello, Bob!
关键字参数 (Keyword Arguments)
您可以在调用函数时通过参数名来指定参数值,这样就不需要考虑参数的位置。
def greet(first_name, last_name):print(f"Hello, {first_name} {last_name}!")greet(last_name="Smith", first_name="John") # 输出: Hello, John Smith!
可变长度参数 (*args 和 **kwargs)
有时我们不知道需要传递多少个参数,或者想要传递一个字典或列表作为参数。这时可以使用 *args 和 **kwargs。
*args:收集所有额外的位置参数到一个元组中。
**kwargs:收集所有额外的关键字参数到一个字典中。
def greet_everyone(*names):for name in names:print(f"Hello, {name}!")greet_everyone("Alice", "Bob", "Charlie")def greet_with_details(**details):for key, value in details.items():print(f"{key}: {value}")greet_with_details(name="David", age=30)
返回值
函数可以通过 return 语句返回一个或多个值。如果没有显式地使用 return,则函数会隐式地返回 None。
def add(a, b):return a + bresult = add(5, 3)print(result) # 输出: 8
返回多个值
Python 函数可以返回多个值,这实际上是返回了一个元组,然后可以解包为多个变量。
def get_user_info():return "Alice", 25, "Engineer"name, age, occupation = get_user_info()print(name, age, occupation) # 输出: Alice 25 Engineer
示例:结合以上所有概念
下面是一个更复杂的例子,展示了如何将上述所有概念组合在一起:
def calculate_area(shape, *dimensions, **options):"""根据形状计算面积,支持矩形和圆。:param shape: 形状名称 ('rectangle' 或 'circle'):param dimensions: 对于矩形,传入两个维度;对于圆,传入半径。:param options: 其他选项,如是否打印结果。:return: 计算出的面积"""if shape == 'rectangle':length, width = dimensionsarea = length * widthelif shape == 'circle':radius, = dimensionsarea = math.pi * radius ** 2else:raise ValueError("Unsupported shape")if options.get('print_result', False):print(f"The area of the {shape} is {area:.2f}")return area# 使用示例calculate_area('rectangle', 10, 5, print_result=True)calculate_area('circle', 7, print_result=True)
THE END






