第十五章装饰器_递归

今日内容

带参数装饰器

多个装饰器修饰一个函数

递归

带参数的装饰器

# 判断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. datetime模块的常用总结

    datetime模块 datetime模块提供了一些处理日期和时间的标准库.常用的有 datetime timedelta timezone 构造一个datetime对象 datetime() dat ...

  2. [python 笔记] __iter__迭代器

    可迭代对象和迭代器 https://blog.csdn.net/nightcharm/article/details/78964676 可迭代对象 对象里面含有__iter__()方法的实现,对象的_ ...

  3. 货郎担问题(TSP问题)

    货郎担问题也叫旅行商问题,即TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一. 有n个城市,用1,2,…,n表示,城i,j之间的距离为dij,有一个货郎从城 ...

  4. 理解PyTorch的自动微分机制

    参考Getting Started with PyTorch Part 1: Understanding how Automatic Differentiation works 非常好的文章,讲解的非 ...

  5. MongoDB4和MysSQL5.7的读/写和事务处理速度简单对比

    系统环境: Ubuntu 18.04 数据库 MysSQL5.7/MongoDB4.0 插入的数据为随机生产,不重复. MySQL使用的连接库是 sqlalchemyMongoDB使用的连接库是pym ...

  6. Golang协程实现流量统计系统(3)

    进程.线程.协程 - 进程:太重 - 线程:上下文切换开销太大 - 协程:轻量级的线程,简洁的并发模式 Golang协程:goroutine Hello world package main impo ...

  7. 黑马lavarel教程---7、文件上传

    黑马lavarel教程---7.文件上传 一.总结 一句话总结: 在laravel里面实现文件的上传是很简单的,压根不用引入第三方的类库,作者把上传作为一个简单的http请求看待的. 1.在lavar ...

  8. linux的awk使用

    awk统计password文件中,登陆shell为“/sbin/nologin”的用户个数 [root@localhost ~]# cat passwd | grep "/sbin/nolo ...

  9. 四、日志输出Reporter.log

    一.Reporter.log import org.testng.Reporter; public class TestLog { public static void main(String[] a ...

  10. Anaconda快捷键

    ctr+1  注释多行 ctr+4  包裹注释多行 ctr+d  删除一行