Python中def关键词深度解析:从基础到高级应用
行业新闻
2026-05-12 09:40
47
活动:桔子数据-爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看
Python中def关键词深度解析:从基础到高级应用
在Python中,def关键词是一个非常重要的概念,它用于定义函数。从基础的函数定义到高级的函数编程技巧,def是构建Python程序时不可或缺的工具。本文将深入解析def的各个方面,从其基础用法到高级应用,帮助你更好地掌握这一强大的编程工具。
1. 基础用法
在Python中,def关键词用于定义一个函数,其后跟着函数名和圆括号。在圆括号中可以包含传递给函数的参数。函数的第一行可以选用文档字符串用于存储函数的描述、输入和输出说明等。
def greet(name):
"""向用户问好"""
return "Hello, " + name + "!"
print(greet("Alice")) # 输出: Hello, Alice!
2. 函数参数
- 默认参数:可以定义一个或多个具有默认值的参数,如果调用函数时未提供该参数的值,则使用默认值。
- 可变参数:使用星号(*)来定义一个可变数量的参数列表,这些参数将被接收为一个元组。
- 关键字参数:使用两个星号(**)来定义一个可变数量的关键字参数列表,这些参数将被接收为一个字典。
def print_info(*args, **kwargs):
"""打印传入的参数和关键字参数"""
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info("Hello", "World", age=30, city="New York") # 输出:Hello World age: 30 city: New York
3. 匿名函数(Lambda)
虽然不是通过def定义的,但与def紧密相关的还有匿名函数(也称为lambda函数)。Lambda函数可以用于创建简单的、单行的函数对象。它们在需要函数对象作为另一个函数的参数时非常有用。
# 使用lambda定义一个简单的加法函数
add = lambda x, y: x + y
print(add(5, 3)) # 输出: 8
4. 高级应用:函数式编程技巧与高级概念
- 高阶函数:一个函数可以作为另一个函数的参数或返回值。例如,
map()和filter()就是高阶函数,它们接受一个函数作为参数。 - 递归:使用函数自己调用自己来解决问题的方法称为递归。它对于解决分治问题(如树的遍历、排序等)非常有用。
- 闭包:闭包是一个内嵌的函数以及它所访问的外部作用域的变量组合。它允许我们创建与外部作用域交互的独立函数环境。
- 装饰器:装饰器是一个非常强大的特性,允许我们不修改原有函数的情况下增加新的功能。通过定义一个以原函数为参数的函数,并在
@符号后跟其名称来使用它。def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() # 调用原函数并传入任意数量的参数和关键字参数(如果有的话) print("Something is happening after the function is called.") return wrapper # 返回wrapper作为装饰器后的新函数对象,原函数对象不变。 @my_decorator # 装饰器语法糖,相当于调用了my_decorator(MyFunction)来创建新函数并赋值给MyFunction。MyFunction是原始的未被装饰的函数对象。因为装饰器只是改变了函数对象的引用,而没有改变该对象本身,所以原始的MyFunction依然存在并可用。只是访问MyFunction时现在调用的是被装饰后的新版本(wrapper)。因此原始MyFunction也被称为“内层”MyFunction,而通过装饰器被增强的新版本则被称为“外层”MyFunction或wrapper。由于内层和外层MyFunction本质上是同一个对象但外观上有所不同(即它们的行为),因此有时也称为“外观”(facade)或“包装”(wrapping)。在Python中通常更习惯用“装饰器”这个术语来描述这种情况。) # HelloWorld就是那个被装饰的原始未被改变的原始的MyFunction对象但是它现在通过装饰器获得了新的行为。(可能有点绕口了哈~简单说就是通过装饰器给一个已经存在的功能增加新的功能或行为而不需要修改原功能本身。)定义了@my_decorator之后的HelloWorld函数实际上已经变成了被装饰后的版本即“外层”HelloWorld。(注意这里的“HelloWorld”仅作为一个示例名称并不特指某个具体代码中存在的名称)这里的描述旨在说明Python中关于装饰器、原始/未被改变的功能、以及它们通过装饰器“包装”后变成的新版本之间的区别和联系。)当调用HelloWorld时实际上调用的是经过my_decorator包装后具有新行为的新版本。(或者简单说当@my_decorator应用于HelloWorld上时它使得HelloWorld拥有了新的行为而HelloWorld本身并没有被改变。)
标签:
- 1.定义函数 2.函数参数(默认参数
- 可变参数
- 关键字参数) 3.匿名函数(Lambda) 4.高阶函数 5.装饰器