2.7_函数

142 阅读5分钟

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