Python函数类型

目录

1. 普通函数

2. 匿名函数(Lambda函数)

3. 高阶函数

4. 内置函数

5. 递归函数

6. 闭包函数

内部工作机制

7. 装饰器函数

8. 方法

实例方法

类方法

静态方法


1. 普通函数

最基本的函数类型,通过 def 关键字定义。

def add(a, b):
    return a + b

print(add(3, 5))  # 输出: 8

2. 匿名函数(Lambda函数)

使用 lambda 关键字定义的函数,与普通函数不同,Lambda函数通常是一次性使用的,通常用于定义简单的、短小的函数。

add = lambda a, b: a + b

print(add(3, 5))  # 输出: 8

无参数的Lambda函数

greet = lambda: "Hello, World!"
print(greet())  # 输出: Hello, World!

Lambda函数的局限性

  1. 只包含一个表达式:Lambda函数只能包含一个表达式,不适合处理复杂的逻辑。
  2. 可读性:由于Lambda函数没有名字,如果逻辑稍微复杂一些,会影响代码的可读性。
  3. 调试困难:匿名函数在调试时不容易定位问题。

3. 高阶函数

高阶函数的定义

高阶函数具备以下特征之一:

  1. 接受一个或多个函数作为参数。
  2. 返回一个函数。

可以接受函数作为参数或返回值的函数。高阶函数广泛应用于各种场景,如数据处理、事件处理和回调等。

def apply_function(func, x, y):
    return func(x, y)

print(apply_function(add, 3, 5))  # 输出: 8

4. 内置函数

Python 提供的一些内置函数,例如 len(), max(), min(), print() 等。

print(len("Hello, World!"))  # 输出: 13

5. 递归函数
 

一个递归函数通常包含以下两部分:

  1. 基准情形:处理简单的、直接可解决的情况,防止无限递归。
  2. 递归调用:将问题分解为一个或多个子问题,并调用自身来解决这些子问题。

在函数内部调用自身的函数,通常用于解决递归问题。

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 输出: 120

6. 闭包函数

闭包(Closure)是指一个函数内部定义的函数,这个内部函数可以引用外部函数的变量。闭包不仅可以捕获这些变量,还可以在外部函数返回后继续使用它们。闭包常用于需要封装一些状态或行为的场景中。

闭包由以下三个部分构成:

  1. 外部函数:包含内嵌函数的函数。
  2. 内嵌函数:定义在外部函数内部并且引用外部函数的变量。
  3. 自由变量:内嵌函数引用的、定义在外部函数中的变量。

一个函数可以返回另一个函数,返回的函数可以访问到外部函数的变量。

通过闭包实现一个简单的计数器: 

def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter

# 创建计数器实例
counter1 = make_counter()
print(counter1())  # 输出: 1
print(counter1())  # 输出: 2

counter2 = make_counter()
print(counter2())  # 输出: 1

counter 是一个闭包,它保存了 make_counter 中的 count 变量,并且通过 nonlocal 关键字可以修改这个变量。 

内部工作机制

  1. 创建闭包

    • make_counter 函数被调用时,count 变量和 counter 函数被创建。counter 函数形成一个闭包,捕获 count 变量的引用。
  2. 返回闭包

    • make_counter 函数执行完毕,但 counter 函数和 count 变量仍然存在,因为 counter 函数持有对 count 的引用。
  3. 修改和访问状态

    • 每次调用 counter1 时,都会访问和修改 count 变量,从而实现了一个持续的状态。

7. 装饰器函数

装饰器函数(Decorator functions)在Python中是一种强大的工具,用于修改或扩展函数或类的功能。它们允许在不改变原始函数或类代码的情况下,通过添加额外的功能来改变它们的行为。通常情况下,装饰器是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。

用于修改或增强其他函数功能的函数。

#假设我们有一个函数 add_numbers,它用于计算两个数字的和。
#我们希望在调用这个函数之前,检查传入的参数是否都是数字。如果不是,我们希望提示用户参数无效。
#可以使用装饰器来实现这个功能:

def validate_numbers(func):
    def wrapper(*args, **kwargs):
        # 检查所有参数是否都是数字
        if all(isinstance(arg, (int, float)) for arg in args):
            return func(*args, **kwargs)
        else:
            print("参数无效,必须是数字。")
    return wrapper

@validate_numbers
def add_numbers(a, b):
    return a + b

# 测试函数
print(add_numbers(10, 20))  # 输出: 30
print(add_numbers(10, '20'))  # 输出: 参数无效,必须是数字。

装饰器函数可以用于很多场景,比如缓存、日志记录、权限验证等,它们使得代码更加模块化和易于维护。 

8. 方法

方法是属于对象的函数,也就是定义在类内部的函数。方法在调用时会隐式地接收一个对象实例作为第一个参数(通常是 self)。方法可以访问对象的属性和其他方法,并对对象的状态进行修改。

在类中定义的函数。包括实例方法、类方法和静态方法。

实例方法

需要一个类的实例来调用的方法。

class MyClass:
    def instance_method(self):
        return "This is an instance method"

obj = MyClass()
print(obj.instance_method())  # 输出: This is an instance method

类方法

使用 @classmethod 装饰器定义的方法,第一个参数是类本身。

class MyClass:
    @classmethod
    def class_method(cls):
        return "This is a class method"

print(MyClass.class_method())  # 输出: This is a class method

静态方法

使用 @staticmethod 装饰器定义的方法,不依赖于类或实例。

class MyClass:
    @staticmethod
    def static_method():
        return "This is a static method"

print(MyClass.static_method())  # 输出: This is a static method

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值