目录
1. 函数的参数
函数可以接受多种类型的参数,包括位置参数、关键字参数和默认参数。
位置参数:
位置参数是最常见的参数类型,它们必须按照定义时的顺序传递给函数。
def greet(name, message):
print(f"{message}, {name}!")
greet("Alice", "Hello") # 输出:Hello, Alice!
关键字参数:
关键字参数允许在调用函数时指定参数名,参数的顺序可以与定义时不同。
greet(name="Alice", message="Hello") # 输出:Hello, Alice!
greet(message="Hi", name="Bob") # 输出:Hi, Bob!
默认参数:
默认参数在定义函数时指定默认值,如果调用时未传递该参数,则使用默认值。
def greet(name, message="Hello"):
print(f"{message}, {name}!")
greet("Alice") # 输出:Hello, Alice!
greet("Bob", "Hi") # 输出:Hi, Bob!
2. 关键字参数
关键字参数的使用使得函数调用更加灵活和清晰,尤其是当函数有多个参数时。
def describe_pet(animal_type, pet_name):
print(f"I have a {animal_type} named {pet_name}.")
describe_pet(animal_type="dog", pet_name="Rex") # 输出:I have a dog named Rex.
describe_pet(pet_name="Whiskers", animal_type="cat") # 输出:I have a cat named Whiskers.
使用关键字参数可以使代码更具可读性,因为每个参数的意义都显而易见。
3. 参数组
Python提供了 *args
和 **kwargs
来处理不定长参数。
*args
: *args
接收任意数量的位置参数,传递给函数时以元组的形式存在。
def make_pizza(size, *toppings):
print(f"Making a {size} inch pizza with the following toppings:")
for topping in toppings:
print(f"- {topping}")
make_pizza(12, "pepperoni", "mushrooms", "green peppers")
# 输出:
# Making a 12 inch pizza with the following toppings:
# - pepperoni
# - mushrooms
# - green peppers
**kwargs
:
**kwargs
接收任意数量的关键字参数,传递给函数时以字典的形式存在。
def build_profile(first, last, **user_info):
profile = {
"first_name": first,
"last_name": last
}
profile.update(user_info)
return profile
user_profile = build_profile("Albert", "Einstein", location="Princeton", field="Physics")
print(user_profile)
# 输出:
# {'first_name': 'Albert', 'last_name': 'Einstein', 'location': 'Princeton', 'field': 'Physics'}
4. 函数重载
Python不支持函数重载(同名函数的不同定义),但可以通过使用可变参数和默认参数来实现类似功能。
def add(a, b=0, c=0):
return a + b + c
print(add(1)) # 输出:1
print(add(1, 2)) # 输出:3
print(add(1, 2, 3)) # 输出:6
在这个例子中,通过提供默认参数 b
和 c
,可以用不同数量的参数调用 add
函数。
5. 函数的返回值
函数可以返回单个值或多个值。多个返回值会被打包成元组。
单个返回值:
def get_full_name(first_name, last_name):
return first_name + " " + last_name
full_name = get_full_name("John", "Doe")
print(full_name) # 输出:John Doe
多个返回值:
def get_coordinates():
return 10.0, 20.0
coordinates = get_coordinates()
print(coordinates) # 输出:(10.0, 20.0)
# 也可以使用拆包
x, y = get_coordinates()
print(f"x: {x}, y: {y}") # 输出:x: 10.0, y: 20.0
6. 函数的内置属性
函数对象有一些内置属性,可以用来获取函数的相关信息。
__name__
:
def sample_function():
"""This is a sample function."""
pass
print(sample_function.__name__) # 输出:sample_function
__doc__
:
print(sample_function.__doc__) # 输出:This is a sample function.
这些内置属性可以用于调试和文档生成。
7. 函数也可以作为函数的参数
函数作为参数传递给其他函数,使得函数非常灵活和强大
def apply_function(func, value):
return func(value)
def square(x):
return x * x
result = apply_function(square, 5)
print(result) # 输出:25
通过这种方式,可以将不同的函数传递给 apply_function
,从而实现不同的功能。
8. 函数也可以作为函数的返回值
函数可以返回另一个函数,从而创建高阶函数。
def create_adder(x):
def adder(y):
return x + y
return adder
add_five = create_adder(5)
print(add_five(10)) # 输出:15
在这个例子中,create_adder
返回一个新的函数 adder
,该函数可以使用创建时的环境变量 x
。
总结:
- 位置参数、关键字参数和默认参数使得函数调用灵活多样。
*args
和**kwargs
提供了处理不定长参数的能力。- 虽然Python不支持函数重载,但通过可变参数和默认参数可以实现类似功能。
- 函数可以返回单个或多个值。
- 函数的内置属性如
__name__
和__doc__
提供了函数的相关信息。 - 函数可以作为参数传递给其他函数,也可以作为返回值返回,从而创建高阶函数。