目录
- 专栏列表
- 前言
- 函数定义
- 参数
- 返回值
- 示例
- 函数类型
- 普通函数
- 空函数
- 匿名函数(Lambda 函数)
- 嵌套函数
- 函数装饰器
- 高阶函数
- 函数参数
- 位置参数
- 默认参数
- 可变位置参数
- 可变关键字参数
- 函数属性和方法
- `__name__`
- `__doc__`
- `func.__dict__`
- `func.__defaults__`
- `func.__annotations__`
- 函数的作用域
- 全局作用域
- 局部作用域
- 闭包
- 总结
在前四篇教程中,我们学习了 Python 的基本语法和数据结构以及代码中条件语句和循环结构。本篇教程,我们将深入探讨 Python 中的函数式编程。通过本教程,我们学习了函数的定义、参数、返回值、类型、属性和方法、作用域以及闭包等概念
专栏列表
- Python教程(一):环境搭建及PyCharm安装
- Python 教程(二):语法与数据结构
- Python 教程(三):字符串特性大全
- Python 教程(四):Python运算符合集
- Python 教程(五):理解条件语句和循环结构
- Python 教程(六):函数式编程
正文开始
,如果觉得文章对您有帮助,请帮我三连+订阅,谢谢
💖💖💖
前言
Python 中的函数是编程中非常基础且强大的概念。函数允许你封装一段代码,使其可以在程序中多次调用,从而提高代码的可重用性和清晰度。
函数就如同数学中的函数,一个函数是做一件事情的工具,它有封装性、重用性等特性,如同y=sin(x)
这个sin
就是数学中定义的函数,我们学习后不用知道内部实现,直接拿来用就行
python中的注释,写备注,方便阅读,机器会直接忽略
#
: 单行注释'''
: 多行注释
函数定义
在 Python 中,使用 def
关键字来定义函数, 依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def function_name(parameters):
"""函数的文档字符串,描述函数的功能"""
# 函数体
return value
参数
- 位置参数:必须按顺序传递的参数。
- 默认参数:有默认值的参数,调用时可以省略。
- 可变参数:允许传递任意数量的位置参数。
- 关键字参数:允许传递任意数量的关键字参数。
返回值
函数可以通过 return
语句返回一个值,如果没有 return
语句,默认返回 None
。
示例
def greet(name, message="Hello"): # message 是有默认值的
"""打印问候语"""
return f"{message}, {name}!"
print(greet("Alice")) # 输出: Hello, Alice!
print(greet("Bob", "Good morning")) # 输出: Good morning, Bob!
函数类型
普通函数
普通的函数定义如上所示。
空函数
如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop():
pass
匿名函数(Lambda 函数)
使用 lambda
关键字定义的小型函数。
add = lambda x, y: x + y
print(add(5, 3)) # 输出: 8
嵌套函数
在一个函数内部定义的函数。
def outer_function(text):
def inner_function():
return text.upper()
return inner_function
print(outer_function("hello")()) # 输出: HELLO
函数装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。借助 Python 的
@
语法,把 decorator置于函数的定义处
示例:
我们接下来要做一件事,调用 hello 函数的同时,记录日志,一般做法:我们定义 log 和 hello 函数,然后依次调用它们
常规用法:
def log():
print('日记记录。。。')
def hello(world):
print('hello' + world)
def exec():
log()
hello('world')
exec()
装饰器改造
def log(fn): # 接受装饰的函数
def wrapper(world): # 接受参数,函数名自定义
print('日记记录。。。')
return fn(world) # 调用log装饰的fn函数
return wrapper
@log # == log(hello)
def hello(world):
print('hello' + world)
hello('world!!')
高阶函数
可以接受其他函数作为参数或者返回一个函数的函数。
def make_twice(func):
def wrapper(x):
return func(func(x))
return wrapper
@make_twice
def double(x):
return x * 2
print(double(5)) # 输出: 20
函数参数
位置参数
必须按顺序传递。
def add(a, b):
return a + b
print(add(3, 4)) # 输出: 7
默认参数
可以提供默认值。
def greet(name, message="Hello"):
return f"{message}, {name}!"
print(greet("Alice")) # 输出: Hello, Alice!
print(greet("Bob", "Good morning")) # 输出: Good morning, Bob!
可变位置参数
使用 *
收集任意数量的位置参数。
def add(*args):
return sum(args)
print(add(1, 2, 3, 4)) # 输出: 10
可变关键字参数
使用 **
收集任意数量的关键字参数。
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_kwargs(name="Alice", age=25) # 输出: name: Alice, age: 25
函数属性和方法
__name__
函数的名称。
def my_function():
pass
print(my_function.__name__) # 输出: my_function
__doc__
函数的文档字符串。
def my_function():
"""这是一个示例函数"""
pass
print(my_function.__doc__) # 输出: 这是一个示例函数
func.__dict__
函数的属性字典。
def my_function():
pass
my_function.attr = "value"
print(my_function.__dict__) # 输出: {'attr': 'value'}
func.__defaults__
函数的默认参数值。
def my_function(a, b=10):
pass
print(my_function.__defaults__) # 输出: (10,)
func.__annotations__
函数的参数和返回值注解。
def my_function(a: int, b: str) -> bool:
pass
print(my_function.__annotations__) # 输出: {'a': <class 'int'>, 'b': <class 'str'>, 'return': <class 'bool'>}
函数的作用域
全局作用域
在函数外部定义的变量。
x = 10
def my_function():
print(x)
my_function() # 输出: 10
局部作用域
在函数内部定义的变量。
def my_function():
y = 20
print(y)
my_function() # 输出: 20
print(y) # NameError: name 'y' is not defined
闭包
闭包是指一个函数记住并访问其外部作用域中的变量。
def outer_function(x):
def inner_function():
return x * 2
return inner_function
double = outer_function(10)
print(double()) # 输出: 20
总结
函数是 Python 编程中的核心概念之一。通过本教程,我们学习了函数的定义、参数、返回值、类型、属性和方法、作用域以及闭包等概念。掌握这些知识点将帮助你编写更清晰、更高效的代码。如果你有任何问题或需要进一步的帮助,请随时联系我们。