在Python中,可以使用def
关键字来定义函数。函数的基本结构如下:
def function_name(parameters): | |
""" | |
函数的文档字符串(docstring),描述函数的功能和参数 | |
""" | |
# 函数体,即要执行的代码块 | |
# ... | |
return result # 返回结果,可选 |
关于Python中的函数参数类型,虽然Python是一种动态类型语言,不需要在定义函数时指定参数的类型,但我们可以根据参数在函数中的使用方式,将其大致分为以下几种类型:
- 必需参数(Positional Arguments):必需参数是按照位置顺序传递给函数的参数。在调用函数时,必需参数的数量和顺序必须和函数定义时保持一致。
def greet(name): | |
print(f"Hello, {name}!") | |
greet("Alice") # 正确调用 | |
# greet() # 错误调用,缺少必需参数 |
- 关键字参数(Keyword Arguments):在调用函数时,可以通过参数名来指定参数值,这称为关键字参数。使用关键字参数时,参数的顺序可以不必和函数定义时保持一致。
def greet(name, age): | |
print(f"Hello, {name}! You are {age} years old.") | |
greet(name="Alice", age=30) # 正确调用,使用了关键字参数 | |
greet(age=30, name="Alice") # 正确调用,参数顺序与定义时不同 |
- 默认参数(Default Arguments):在定义函数时,可以给参数指定一个默认值。如果调用函数时没有传递这个参数,则使用默认值。
def greet(name, age=None): | |
if age is None: | |
print(f"Hello, {name}!") | |
else: | |
print(f"Hello, {name}! You are {age} years old.") | |
greet("Alice") # 正确调用,没有传递age参数,使用默认值 | |
greet("Bob", 30) # 正确调用,传递了age参数 |
-
可变参数(Variable-length Arguments):包括两种类型:
- 位置参数(Positional Variable-length Arguments):在函数定义中,通过在参数名前面加上一个星号(*),可以定义一个位置参数,该参数会接收一个元组作为参数值。
def sum_numbers(*numbers):
return sum(numbers)
sum_numbers(1, 2, 3, 4) # 正确调用,numbers将是一个包含1, 2, 3, 4的元组
- 关键字参数(Keyword Variable-length Arguments):在函数定义中,通过在参数名前面加上两个星号(**),可以定义一个关键字参数,该参数会接收一个字典作为参数值。
def greet_people(**people):
for name, age in people.items():
print(f"Hello, {name}! You are {age} years old.")
greet_people(Alice=30, Bob=25) # 正确调用,people将是一个包含Alice和Bob键值对的字典
-
函数注解(Function Annotations):Python 3开始支持函数注解,但它们并不强制执行参数或返回值的类型检查。函数注解主要用于提供有关函数参数和返回值的额外信息,这些信息可以是任何有效的Python表达式。
def greet(name: str, age: int = None) -> None: | |
# 函数体 | |
pass |
在这个例子中,str
和int
是参数name
和age
的注解,None
是函数返回值的注解。这些注解不会改变函数的实际行为,但可以为阅读代码的人提供有关函数参数和返回值类型的提示。