第十五章装饰器_递归

今日内容

带参数装饰器

多个装饰器修饰一个函数

递归

带参数的装饰器

# 判断argv,当登录不同的网页,会有不同的装饰效果
def auth(argv):
  def warpper(func):
      def inner():
          if argv == '博客园':
              func()
          elif argv == '码云':
              func()

      return inner

  return warpper


@auth('博客园')
def home_page0():
  print('欢迎来到博客园主页')


@auth('码云')
def home_page1():
  print('欢迎来到码云主页')


home_page0()
home_page1(

多个装饰器修饰一个函数

# 多个函数装饰一个函数时,先执行离被装饰函数最近的装饰器
def auth(func): # wrapper1装饰器里的 inner
  def inner(*args,**kwargs):
      print("额外增加了一道 锅包肉")
      func(*args,**kwargs)
      print("锅包肉 38元")
  return inner

def wrapper1(func): # warpper2装饰器里的 inner
  def inner(*args,**kwargs):
      print("额外增加了一道 日魔刺生")
      func(*args,**kwargs)
      print("日魔刺生 白吃")
  return inner

def wrapper2(func): # 被装饰的函数foo
  def inner(*args,**kwargs):
      print("额外增加了一道 麻辣三哥")
      func(*args,**kwargs)
      print("难以下嘴")
  return inner

@auth       # 1           7
@wrapper1   #   2       6
@wrapper2   #   3   5
def foo():   #     4
  print("这是一个元宝虾饭店")

foo()

递归

递归
1.不断调用自己本身
2.有明确的终止条件
递归的最大深度,官方说明是1000,实际测试是994/997/998

# 循环一个列表,打印出每一个元素
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn",[4,5,6,[7,[11,12,34,5],10,8,9]]]
def func(lst):
  for i in lst:
      if type(i) == list:
          func(i)
      else:
          print(i)
func(li)

PythonDay15的更多相关文章

  1. Python-Day15 JavaScript/DOM

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...

  2. python-day15函数递归

    1.递归: 在函数内,调用自己.  (技巧: 每次调用时,函数前面需加上return,这样返回值就可以一层一层 的返回去) #def age(n):#    if n == 1:#        re ...

  3. 路飞学城Python-Day15

    模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还 ...

  4. 路飞学城Python-Day15(模块二思维导图)

  5. python-day15(正式学习)

    目录 递归 函数自我嵌套 调用 直接调用 间接调用 为什么要用递归呢 如何使用递归 内置函数 掌握 了解 面向对象方法 面向过程编程 注册 分层实现功能 递归 递归的本质就是函数调用自身,当然也会有一 ...

  6. Python 基础 三 反射

    Python 基础 三 反射 今天我们先介绍一下反射这个概念,啥是反射?反射就是自己检测自己.在我们Python的面向对象中的反射是啥意思呢?就是通过字符串的形式操作对象相关的属性.python中的一 ...

随机推荐

  1. hdu_1059(多重背包)

    多重背包的讲解: 多重背包问题https://blog.csdn.net/yandaoqiusheng/article/details/84782655 ; i <= n; i++) { int ...

  2. Kotlin的高阶函数和常用高阶函数

    Kotlin的高阶函数和常用高阶函数 文章来源:企鹅号 - Android先生 高阶函数的定义 将函数当做参数或者是返回值的函数 什么是高阶函数 可以看看我们常用的 函数: 首先我们可以知道, 是 的 ...

  3. CSS Selectors

    CSS selectors are used to "find" (or select) HTML elements based on their element name, id ...

  4. SQL Server清空数据库中ldf日志文件

    USE [master] ALTER DATABASE [Whir_InternalSystem] SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE [W ...

  5. Golang协程实现流量统计系统(2)

    从进程开始,搜索和理解进程 Google 搜索关键词: C fork example 什么是fork Fork系统调用用于创建一个称为子进程的新进程,该子进程与进行fork()调用的进程(父进程)同时 ...

  6. P3956 棋盘

    P3956 棋盘 题解 注释都在代码里了 这道题可以用DFS做,记忆化搜索,维护一个money[ ][ ] 表示到达当前节点的最小花费 不需要记录VIS,因为有一个最小值判断,如果走重复的话一定会得到 ...

  7. Junit : how to add listener, and how to extends RunListener to override behaviors while failed

    http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html org.junit.runner ...

  8. 函数参数<一>

    <1> 定义带有参数的函数 示例如下: def add2num(a, b): c = a+b print (c) <2> 调用带有参数的函数 以调用上面的add2num(a, ...

  9. 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制

    创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Auto ...

  10. MySQL备份工具之mysqlhotcopy

    mysqlhotcopy使用lock tables.flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能用于备份MyISAM存储引擎和运行 ...