• Python 函数 VI (带参数装饰器等)


    1.今日内容大纲

    1. 带参数的装饰器
    2. 多个装饰器装饰一个函数
    3. 递归函数

    2.具体内容

    1. 带参数的装饰器

      def wrapper_out(n):
        def wrapper(f):
          def inner(*args,**kwargs):
            username = input('用户名:').strip()
            password = input('密码:').strip()
            with open (n)as f :
              for line in f:
                user,pwd = line.strip().split('|')
                if username == user and password == pwd:
                  print('登录成功')
                  ret = f(*args,**kwargs)
                  return ret
               print('用户名或密码错误')
           return inner
         return wrapper
      
      
      @wrapper_out('qq')
      def qq():
        print('成功访问qq')
        
      @wrapper_out('dy')
      def dy():
        print('成功访问抖音')
        
      qq()
      dy()
      
    2. 多个装饰器装饰一个函数

      def wrapper1(func1):
        def inner1():
          print('wrapper1 before func')#2
          func1()#3
          print('wrapper1 after func')#4
        return inner1
      def wrapper2(func2):
        def inner2():
          print('wrapper2 before func') #1
          func2()
          print('wrapper2 after func')#5
        return inner2
      
      @wrapper2  #f = wrapper2(f) f内 = inner1;f外 = inner2
      @wrapper1  #f = wrapper1(f) f内 = f();   f外 = inner1
      def f():
        print(666)#3
      f()
      
      
    3. 递归函数

      def age(n):
        if n == 1:
          return 18
        else:
          return age(n-1)+2
      ret = age(8)
      print(ret)
      
      l2 = [1, 3, 5, ['太白','元宝', 34, [33, 55, [11,33]]], [77, 88],66]
      def func(l):
        for i in l:
          if type(i) == list:
            func(i)
          else:
            print(i)
      func(l2)
      
      def func(n):
        if n == 1:
          h = 1
        elif n == 2:
          h = 1
        else:
          h = func(n-1)+func(n-2)
        return h
      func(6)
      
  • 相关阅读:
    HDU
    洛谷- P1306 斐波那契公约数
    HDU
    HDU
    POJ3321
    SPOJ
    HDU
    POJ 1236 Network of Schools
    POJ-3169 Layout (差分约束+SPFA)
    POJ-1062 昂贵的聘礼 (最短路)
  • 原文地址:https://www.cnblogs.com/xiaohei-chen/p/11976962.html
Copyright © 2020-2023  润新知