📜  Python函数参数(1)

📅  最后修改于: 2023-12-03 14:46:42.708000             🧑  作者: Mango

Python函数参数

在Python中编写函数时,需要定义函数参数。函数参数是传递给函数的值,可以是任何有效的Python表达式。

函数定义

一个函数可以有多个参数,它们必须在函数定义中声明。函数定义的一般形式如下:

def function_name(parameters):
    """docstring"""
    statement(s)

其中:

  • function_name:函数名,由字母、数字和下划线组成,以字母开头。
  • parameters:函数参数,用逗号分隔,可以有多个。
  • docstring:可选的字符串,用于描述函数的用途和工作方式。
  • statement(s):函数体,包含一系列Python语句,执行特定的任务。

下面是一个函数定义的示例:

def greet(name):
    """打招呼"""
    print(f"Hello, {name}!")

在这个例子中,greet函数有一个参数name,用于存储要打招呼的名字。

位置参数

在Python中,函数的参数可以是位置参数或关键字参数。位置参数是指按照定义顺序传递的参数,例如:

def add(x, y):
    """计算两个数的和"""
    return x + y

print(add(2, 3))   # 输出 5

在这个例子中,add函数有两个位置参数xy,在调用函数时,我们按照定义顺序先传递x,再传递y

关键字参数

除了位置参数之外,Python还支持关键字参数。关键字参数是以名称-值对的形式传递的参数,例如:

def person(name, age):
    """描述一个人"""
    print(f"{name} is {age} years old.")

person(name="Alice", age=25)   # 输出 Alice is 25 years old.

在这个例子中,person函数有两个关键字参数nameage,在调用函数时,我们使用参数名来指定每个参数的值。

默认参数

Python还支持默认参数,这些参数在函数定义时指定默认值。如果在调用函数时不提供这些参数的值,则使用默认值。例如:

def greet(name, greeting="Hello"):
    """打招呼"""
    print(f"{greeting}, {name}!")

greet("Bob")                    # 输出 Hello, Bob!
greet("Alice", greeting="Hi")   # 输出 Hi, Alice!

在这个例子中,greet函数有两个参数namegreeting,其中greeting使用了默认值"Hello"。在第一次调用函数时,我们只传递一个参数name,因此使用了默认值;在第二次调用函数时,我们使用关键字参数来指定greeting的值。

不定长参数

有时候,我们需要编写可以接受任意数量的参数的函数。在Python中,不定长参数有两种形式:可变位置参数和可变关键字参数。

可变位置参数

可变位置参数允许我们在函数调用时传递任意数量的位置参数。在函数定义中,可以用*来表示可变位置参数。例如:

def add(*numbers):
    """计算多个数的和"""
    result = 0
    for number in numbers:
        result += number
    return result

print(add(1, 2, 3))     # 输出 6
print(add(1, 2, 3, 4))  # 输出 10

在这个例子中,add函数有一个可变位置参数*numbers,它可以接受任意数量的位置参数。在函数体中,我们使用循环来遍历numbers并计算它们的和。

可变关键字参数

可变关键字参数允许我们在函数调用时传递任意数量的关键字参数。在函数定义中,可以用**来表示可变关键字参数。例如:

def show_info(**info):
    """显示关键字参数"""
    for key, value in info.items():
        print(f"{key}: {value}")

show_info(name="Alice", age=25, gender="female")
# 输出:
# name: Alice
# age: 25
# gender: female

在这个例子中,show_info函数有一个可变关键字参数**info,它可以接受任意数量的关键字参数。在函数体中,我们使用items()方法来遍历关键字参数的名称和值,并将它们格式化输出。