Python学习笔记(三)
文章目录
- Python函数详解
- 基本概念
- 定义函数
- 函数调用
- 参数类型
- 1. 位置参数
- 2. 默认参数
- 3. 关键字参数
- 4. 可变参数
- 返回值
- 函数作用
- 函数中的变量
- 作用域规则
- 递归函数
- Lambda函数
- 函数注解
- 装饰器
- 文档字符串
- 其他重要概念
- 闭包
- 生成器函数
- 高阶函数
Python函数详解
基本概念
函数是Python中组织和重用代码的基本方式,它是一段具有特定功能的、可重复使用的代码块。
定义函数
使用def
关键字定义函数:
def function_name(parameters):
"""函数文档字符串"""
# 函数体
return value
函数调用
result = function_name(arguments)
参数类型
1. 位置参数
按照定义顺序传递的参数
def add(a, b):
return a + b
2. 默认参数
参数有默认值,调用时可省略
def greet(name="World"):
print(f"Hello, {name}!")
a = input() //输入“world”
greet(a)
输出:
Hello, world!
3. 关键字参数
调用时指定参数名,可不按顺序
def person_info(name, age):
print(f"{name} is {age} years old")
person_info(age=25, name="Alice")
4. 可变参数
*args
:接收任意数量的位置参数(元组)**kwargs
:接收任意数量的关键字参数(字典)
def print_info(*args, **kwargs):
print("位置参数:", args)
print("关键字参数:", kwargs)
返回值
函数使用return
返回值,可返回多个值(实际上是元组)
def calculate(a, b):
return a+b, a-b, a*b
sum_result, diff_result, prod_result = calculate(10, 5)
("return" 这个概念起源于计算机科学,最初用于指示一个函数执行完毕并将结果返回给调用它的地方。在编程语言中,我们可以通过使用 "return" 关键字来返回函数的执行结果。当函数执行到 "return" 语句时,它会立即停止执行并将指定的结果返回给调用者。这使得我们可以在程序中使用函数来执行特定的操作,并在需要的时候获取到函数执行的结果进行后续处理。因此,"return" 在编程中扮演着非常重要的角色,用于控制函数的执行流程和提供结果输出。)
函数作用
- 代码重用:避免重复编写相同代码
- 模块化:将复杂问题分解为小功能块
- 提高可读性:通过有意义的函数名使代码更易理解
- 便于维护:修改只需在函数内部进行
函数中的变量
作用域规则
- 局部变量:函数内部定义的变量,只在函数内有效
- 全局变量:函数外部定义的变量,函数内需用
global
声明才能修改 - 非局部变量:嵌套函数中,用
nonlocal
声明外层函数的变量
nonlocal 是 Python 中的一个关键字,用于在嵌套函数中声明一个变量既不是当前函数的局部变量,也不是全局变量,而是属于外层(非全局)作用变量。它允许内层函数修改外层函数中定义的变量。
nonlocal 只能在嵌套函数中使用。 如果外层函数没有对应的变量,会抛出 SyntaxError。
x = 10 # 全局变量
def outer():
y = 20 # 非局部变量
def inner():
nonlocal y # 声明 y 是外层函数的变量
global x #用于声明修改全局变量
z = 30 # 局部变量
y += 1 # 修改外层函数的变量
x += 1
Python 的变量查找遵循 LEGB 规则(Local → Enclosing → Global → Built-in),nonlocal 的优先级介于 Local 和 Enclosing 之间。
递归函数
函数调用自身来解决问题,必须包含:
- 基线条件(终止条件)
- 递归条件(调用自身)
def factorial(n):
if n == 1: # 基线条件
return 1
else: # 递归条件
return n * factorial(n-1)
Lambda函数
匿名函数,用于简单操作,语法:lambda 参数: 表达式
# 普通函数
def square(x):
return x ** 2
# Lambda等价形式
square = lambda x: x ** 2
# 常用场景
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
上述常用场景代码解释
函数注解
Python 3的类型提示功能(不强制类型检查):
def add(a: int, b: int) -> int:
return a + b
装饰器
修改或增强函数功能的工具:
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"函数 {func.__name__} 执行时间: {end-start:.2f}秒")
return result
return wrapper
@timer
def long_running_function():
time.sleep(2)
代码解释
文档字符串
函数的说明文档,可通过help()
或__doc__
访问:
Python函数的说明文档的访问方式
def add(a, b):
"""
计算两个数的和
参数:
a (int/float): 第一个加数
b (int/float): 第二个加数
返回:
int/float: 两个数的和
示例:
>>> add(2, 3)
5
"""
return a + b
其他重要概念
闭包
函数记住并访问其词法作用域的能力:
def outer_func(x):
def inner_func(y):
return x + y
return inner_func
closure = outer_func(10)
print(closure(5)) # 输出15
生成器函数
使用yield
返回值的特殊函数:
def count_up_to(max):
count = 1
while count <= max:
yield count
count += 1
counter = count_up_to(5)
for num in counter:
print(num)
高阶函数
接受函数作为参数或返回函数的函数:
def apply_operation(func, x, y):
return func(x, y)
result = apply_operation(lambda a, b: a * b, 3, 4)