Python递归函数、匿名函数lambda、类的常用装饰器

文章介绍了Python编程中的递归函数概念及实现,展示了如何定义和避免递归导致的内存溢出。接着讨论了匿名函数lambda的功能和用法,以及在排序等场景中的应用。随后,详细解释了装饰器的概念,如何定义和使用装饰器来增强函数功能。最后,探讨了类的常用装饰器,包括classmethod和staticmethod,以及property装饰器用于创建类属性的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、递归函数

1、什么是递归函数

  • 一个函数不停的将自己反复执行
  • 通过返回值,直接执行自身函数

2、递归的定义方法

# coding : utf-8

count = 0

def test():
    global count
    count += 1

    if count != 5:
        print('The count condition is not met. You need to re-execute yourself. '
              'The current count is %s' %count)
        return test()
    else:
        print('count is %s' %count)

test()

3、递归函数的说明

  • 内存溢出
  • 避免滥用递归

二、匿名函数lambda

1、lambda功能

  • 定义一个轻量化的函数
  • 即用即删除,很适合需要完成一项功能,但是此功能只在此一处使用

2、lambda定义

# coding : utf-8

f = lambda : print(1)
f()

f1 = lambda x, y=2 : x > y
print(f1(1))

users = [
    {'name' : 'dewei'},
    {'name' : 'xiaomu'},
    {'name' : 'asan'}
]
users.sort(key=lambda  x: x['name'])
print(users)

三、装饰器

1、什么是装饰器

  • 也是一种函数
  • 可以接受函数作为参数
  • 可以返回函数
  • 接收一个函数,内部对其处理,然后返回一个新函数,动态的增强函数功能
  • 将c函数在a函数中执行,在a函数中可以选择执行或不执行c函数,也可以对c函数的结果进行二次加工处理

2、装饰器的定义

3、装饰器的用法

  • 将被调用的函数直接作为参数传入装饰器的外围函数括弧
  • 将装饰器与被调用函数绑定在一起
  • @符号+装饰器函数放在被调用函数的上一行,被调用的函数正常定义,只需要直接调用被执行函数即可
  • # coding : utf-8
    
    def check_str(func):
        print('func:', func)
        def inner(*args, **kwargs):
            print('args:', args, kwargs)
            result = func(*args, **kwargs)
            if result == 'ok':
                return 'result is %s' % result
            else:
                return 'result is failed:%s' % result
        return inner
    
    @check_str
    def test(data):
        return data
    
    result = test(data='no')
    print(result)
    
    result = test(data='ok')
    print(result)

四、类的常用装饰器 

1、classmethod

  • 将类函数可以不经过实例化而直接被调用
  • # coding : utf-8
    
    class Test(object):
        def __init__(self, a):
            self.a = a
    
        def run(self):
            print('run')
            self.jump()
    
        @classmethod
        def jump(cls):
            print('jump')
            # cls.run()
    
    t = Test('a')
    t.run()
    # Test.jump()

2、staticmethod

  • 将类函数可以不经过实例化而直接被调用,被该装饰器调用的函数不许传递self或cls参数,且无法在该函数内调用其他类函数或类变量
  • # coding : utf-8
    
    class Test(object):
        def __init__(self, a):
            self.a = a
    
        def run(self):
            print('run')
            self.jump()
            self.sleep()
    
        @classmethod
        def jump(cls):
            print('jump')
            # cls.run()
    
        @staticmethod
        def sleep():
            print('i want to sleep')
    
    t = Test('a')
    t.run()

3、property

  • 将类函数的执行免去括弧,类似于调用属性(变量)
  • class Test1(object):
        def __init__(self, name):
            self.__name = name
    
        @property
        def name(self):
            return self.__name
    
        @name.setter
        def name(self, value):
            self.__name = value
    
    t1 = Test1(name='dewei')
    print(t1.name)
    t1.name = 'xiaomu'
    print(t1.name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Win_77

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

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

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

打赏作者

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

抵扣说明:

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

余额充值