2.8 注释和文档字符串
2.7 函数
2.7.1 常用内置函数
2.7.1.1 数学与统计函数 (abs(), max(), min(), sum(), round())
这些函数用于执行基本的数学和统计操作。
代码演示:
print("绝对值:", abs(-10))
print("最大值:", max(1, 2, 3))
print("最小值:", min(1, 2, 3))
print("总和:", sum([1, 2, 3]))
print("四舍五入:", round(3.14159, 2))
输出:
绝对值: 10
最大值: 3
最小值: 1
总和: 6
四舍五入: 3.14
2.7.1.2 类型转换函数 (int(), float(), str(), list(), dict(), tuple())
这些函数用于将值转换为不同的数据类型。
代码演示:
print("转整数:", int("123"))
print("转浮点数:", float("123.45"))
print("转字符串:", str(123))
print("转列表:", list("hello"))
print("转字典:", dict([("a", 1), ("b", 2)]))
print("转元组:", tuple([1, 2, 3]))
输出:
转整数: 123
转浮点数: 123.45
转字符串: 123
转列表: ['h', 'e', 'l', 'l', 'o']
转字典: {'a': 1, 'b': 2}
转元组: (1, 2, 3)
2.7.1.3 序列操作函数 (len(), range(), enumerate(), zip())
这些函数用于操作序列和迭代器。
代码演示:
print("长度:", len([1, 2, 3]))
print("序列:", list(range(5)))
print("带索引的序列:", list(enumerate(["a", "b", "c"])))
print("拉链:", list(zip([1, 2], ["a", "b"])))
输出:
长度: 3
序列: [0, 1, 2, 3, 4]
带索引的序列: [(0, 'a'), (1, 'b'), (2, 'c')]
拉链: [(1, 'a'), (2, 'b')]
2.7.1.4 输入与输出相关函数 (input(), print())
input()用于获取用户输入,print()用于输出。
代码演示:
name = input("请输入您的名字: ")
print("您好,", name)
输出:
请输入您的名字: 批量小王子
您好, 批量小王子
2.7.1.5 其他实用函数 (id(), type(), isinstance(), help(), dir())
这些函数用于获取对象信息和帮助。
代码演示:
x = 10
print("对象ID:", id(x))
print("类型:", type(x))
print("是否为int:", isinstance(x, int))
print("帮助文档:", help(print))
print("对象属性和方法:", dir(x))
输出:
对象ID: 140424395266048
类型: <class 'int'>
是否为int: True
帮助文档: None
对象属性和方法: ['bit_length', 'from_bytes', 'numerator', 'denominator', 'imag', 'conjugate', 'real', 'size', ...]
2.7.2 创建自定义函数
2.7.2.1 函数的定义与调用
函数通过def关键字定义,并通过名称调用。
代码演示:
def greet(name):
print("Hello", name)
greet("批量小王子")
输出:
Hello 批量小王子
2.7.2.2 函数参数的传递
2.7.2.2.1 位置参数
位置参数按照顺序传递。
代码演示:
def add(a, b):
return a + b
print("和:", add(5, 3))
输出:
和: 8
2.7.2.2.2 默认参数
默认参数提供了默认值。
代码演示:
def greet(name, message="Hello"):
print(message, name)
greet("批量小王子")
输出:
Hello 批量小王子
2.7.2.2.3 可变长度参数 (*args 和 **kwargs)
*args和**kwargs允许函数接受任意数量的参数。
代码演示:
def add(*args):
return sum(args)
def greet(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print("和:", add(1, 2, 3, 4))
greet(name="批量小王子", country="小王子国")
输出:
和: 10
name: 批量小王子
country: 小王子国
2.7.2.3 函数的返回值与作用
函数可以返回一个或多个值。
代码演示:
def max_min(a, b):
return a > b, a < b
is_greater, is_less = max_min(3, 2)
print("大于:", is_greater)
print("小于:", is_less)
输出:
大于: True
小于: False
2.7.2.4 变量作用域 (local, global, nonlocal)
变量作用域决定了变量的可见性。
代码演示:
x = "全局"
def test():
x = "局部"
print("函数内:", x)
test()
print("函数外:", x)
输出:
函数内: 局部
函数外: 全局
2.7.2.5 递归函数
递归函数调用自身来解决问题。
代码演示:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print("阶乘:", factorial(5))
输出:
阶乘: 120
2.7.2.6 匿名函数 (lambda)
lambda用于创建简单的匿名函数。
代码演示:
add = lambda x, y: x + y
print("和:", add(2, 3))
输出:
和: 5
2.7.2.7 函数注释与类型提示
函数注释提供了函数的文档,类型提示用于指定参数和返回值的类型。
代码演示:
def add(a: int, b: int) -> int:
"""
返回两个整数的和
"""
return a + b
print("和:", add(2, 3))
输出:
和: 5
2.7.2.8 高阶函数与函数式编程
2.7.2.8.1 map(), filter(), 和 reduce()
这些函数用于函数式编程。
代码演示:
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
filtered = list(filter(lambda x: x > 2, numbers))
print("加倍:", doubled)
print("过滤:", filtered)
输出:
加倍: [2, 4, 6, 8, 10]
过滤: [3, 4, 5]
2.7.2.8.2 sorted() 与自定义排序函数
sorted()函数用于排序,支持自定义排序函数。
**代码演示
:**
items = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]
sorted_items = sorted(items, key=lambda x: x["age"])
print("排序:", [(item["name"], item["age"]) for item in sorted_items])
输出:
排序: [('Bob', 25), ('Alice', 30)]
2.7.2.9 嵌套函数与闭包
嵌套函数可以访问外部函数的变量。
代码演示:
def outer():
x = 10
def inner():
print("内部函数:", x)
inner()
outer()
输出:
内部函数: 10
2.7.2.10 函数装饰器
2.7.2.10.1 装饰器的基本概念
装饰器用于修改函数的行为。
代码演示:
def my_decorator(func):
def wrapper():
print("Before")
func()
print("After")
return wrapper
@my_decorator
def greet():
print("Hello")
greet()
输出:
Before
Hello
After
2.7.2.10.2 使用内置装饰器 (@staticmethod, @classmethod)
这些装饰器用于定义静态方法和类方法。
代码演示:
class Greeter:
@staticmethod
def greet():
print("Hello")
Greeter.greet()
输出:
Hello
2.7.2.10.3 自定义装饰器
自定义装饰器可以添加额外的功能。
代码演示:
def repeat(num_times):
def decorator_repeat(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
func(*args, **kwargs)
return wrapper
return decorator_repeat
@repeat(3)
def greet(name):
print(f"Hello {name}")
greet("批量小王子")
输出:
Hello 批量小王子
Hello 批量小王子
Hello 批量小王子
2.7.2.11 异常处理中的函数应用
函数可以在异常处理中使用,处理错误和异常。
代码演示:
def divide(x, y):
try:
return x / y
except ZeroDivisionError:
print("不能除以零")
print("结果:", divide(10, 2))
print("结果:", divide(10, 0))
输出:
结果: 5.0
不能除以零
结果: None
2.7.2.12 函数的模块化与复用
函数应该设计为模块化和可复用的。
代码演示:
def add(a, b):
return a + b
def multiply(a, b):
return a * b
# 在其他模块中复用 add 和 multiply 函数
result = add(5, 3)
print("加法结果:", result)
result = multiply(5, 3)
print("乘法结果:", result)
输出:
加法结果: 8
乘法结果: 15