zoukankan      html  css  js  c++  java
  • python基础复习 11

      1 # def wrapper(func):
      2 #     def inner(*args,**kwargs):
      3 #         print('再被装饰之前要做的事')
      4 #         ret = func(*args,**kwargs)
      5 #         print('再被装饰之后要做的事')
      6 #         return ret
      7 #     return inner
      8 #
      9 # @wrapper
     10 # def holiday(day):
     11 #     print('全体放假%s天'%day)
     12 #     return '好开心!'
     13 
     14 # ret = holiday(8)
     15 # print(ret)
     16 
     17 
     18 # 练习题
     19 # 1,编写装饰器,为多个函数加上认证的功能(用户的账号和密码来
     20 # 源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
     21 # FLAG = False
     22 # def login(func):
     23 #     def inner(*args,**kwargs):
     24 #         global FLAG
     25 #         '''登录程序'''
     26 #         if FLAG:
     27 #             ret = func(*args, **kwargs)
     28 #             return ret
     29 #         else:
     30 #             username = input("username:")
     31 #             password = input("password:")
     32 #             if username == "zhizhu" and password == "123":
     33 #                 FLAG = True
     34 #                 ret = func(*args,**kwargs)
     35 #                 return ret
     36 #             else:
     37 #                 print("登录失败,请重新输入!")
     38 #     return inner
     39 #
     40 # @login
     41 # def shoplist_add():
     42 #     print('增加一件物品')
     43 #
     44 # @login
     45 # def shoplist_del():
     46 #     print('删除一件物品')
     47 #
     48 # shoplist_add()
     49 # shoplist_del()
     50 
     51 
     52 
     53 # 2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数
     54 # 都将 被调用的函数名称写入文件
     55 
     56 # def log(func):
     57 #     def inner(*args,**kwargs):
     58 #         with open('log','a',encoding='utf-8') as f:
     59 #             f.write(func.__name__+'
    ')
     60 #         ret = func(*args,**kwargs)
     61 #         return ret
     62 #     return inner
     63 #
     64 # @log
     65 # def shoplist_add():
     66 #     print("增加一件物品")
     67 #
     68 # @log
     69 # def shoplist_del():
     70 #     print("删除一件物品")
     71 #
     72 # shoplist_add()
     73 # shoplist_del()
     74 
     75 
     76 # 如果你不需要用装饰器,如下实现
     77 # 在原有函数下再写一个函数,def timmer_out(flag): 进行判断
     78 # 如果是Ture,执行装饰器功能,False,不执行
     79 # import time
     80 # FLAGE = True
     81 # def timmer_out(flag):
     82 #     def timmer(func):
     83 #         def inner(*args,**kwargs):
     84 #             if flag:
     85 #                 start = time.time()
     86 #                 ret = func(*args,**kwargs)
     87 #                 end = time.time()
     88 #                 print(end-start)
     89 #                 return ret
     90 #             else:
     91 #                 ret = func(*args, **kwargs)
     92 #                 return ret
     93 #         return inner
     94 #     return timmer
     95 #
     96 # @timmer_out(FLAGE)  # 先执行timmer_out 返回timmer 传给了@timmer_out,也就是说现在的@timmer_out == @timmer
     97 # def wahaha():
     98 #     time.sleep(0.1)
     99 #     print('蜘蛛蜘蛛')
    100 #
    101 # @timmer_out(FLAGE)
    102 # def niulanshan():
    103 #     time.sleep(0.1)
    104 #     print('老虎老虎')
    105 # wahaha()
    106 # niulanshan()
    107 
    108 
    109 # 多个装饰器装饰同一个函数
    110 """
    111 1,先执行@wrapper2 func()之前的
    112 2,在执行@wrapper1 func()之前的
    113 3,在执行func()这个函数
    114 4,在执行@wrapper1 func()之后的
    115 5,在执行@wrapper2 func()之后的
    116 
    117 执行完的结果
    118 wrapper2, before func
    119 wrapper1, before func
    120 in f
    121 wrapper1, after func
    122 wrapper2, arter func
    123 """
    124 # def wrapper1(func):
    125 #     def inner1():
    126 #         print('wrapper1, before func')
    127 #         func()
    128 #         print('wrapper1, after func')
    129 #     return inner1
    130 #
    131 # def wrapper2(func):
    132 #     def inner2():
    133 #         print('wrapper2, before func')
    134 #         func()
    135 #         print('wrapper2, arter func')
    136 #     return inner2
    137 #
    138 # @wrapper2
    139 # @wrapper1
    140 #
    141 # def f():
    142 #     print('in f')
    143 #
    144 # f()
    145 
    146 
    147 
    148 # 迭代器
    149 # 迭代器的概念
    150 # 只要含有 __iter__方法的都是可迭代的 --可迭代协议
    151 # 迭代器的协议 -- 内部含有__next__和 __iter__方法的就是迭代器
    152 
    153 # 可以被for循环的都是可迭代的
    154 # 可迭代的内部都有__iter__方法
    155 # 只要是迭代器 一定可迭代
    156 # 可迭代的.__iter__()方法就可以得到一个迭代器
    157 # 迭代器中的__next__()方法可以一个一个的获取值
    158 
    159 # from collections import Iterable
    160 # from collections import Iterator
    161 # print(isinstance([],Iterator))     # isinstance 判断是否是可迭代对象
    162 # print(isinstance([],Iterable))
    163 
    164 # 迭代器的好处:
    165       # 从容器类型中一个一个的取值,会把所有的值都取到
    166       # 节省内存空间
    167          # 迭代器并不会在内存中再占用一大块内存
    168          # 而是随着循环 每次生成一个
    169          # 每次next 每次给我一个
    170 
    171 
    172 # 生成器
    173 # 生成器函数 --- 本质上就是我们自己写的函数
    174 
    175 # def generator():
    176 #     print(1)
    177 #     return 'a'
    178 #
    179 # ret = generator()
    180 # print(ret)
    181 
    182 # 只要含有yield关键字的函数  都是生成器函数
    183 # yield只能写在函数内部。
    184 # yield 与 return 不能共用
    185 # def generator():
    186 #     print(1)
    187 #     yield 'a'
    188 
    189 # ret = generator()
    190 # print(ret)
    191 # print(ret.__next__())
    192 
    193 
    194 # def generator():
    195 #     print(1)
    196 #     yield 'a'
    197 #     print(2)
    198 #     yield 'b'
    199 # g = generator()
    200 # ret = g.__next__()
    201 # print(ret)
    202 
    203 # 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。
  • 相关阅读:
    查看IIS进程W3WP.exe对应网站进程池的PID
    【C#】结对项目开发-电梯调度仿真系统(Bata版)(党云龙、黄为)
    对于敏捷开发的理解!~~~~~~~~(黄为)
    【C】二维数组求最大子数组(基于一维数组的拓展)
    【C#】结对项目开发-电梯调度仿真系统(内部开发者版)(党云龙、黄为)
    【C】课堂结对联系-求整数数组的子数组之和的最大值(党云龙、黄为)
    【C#】结对项目开发-电梯调度需求分析(党云龙、黄为)
    C语言中求整型数组中的最大值!~~~~(黄为,刘佳琪)
    读入文本,找出出现频率最高的10个单词~~~~
    Emmet HTML/CSS代码快速编写神器
  • 原文地址:https://www.cnblogs.com/pioneerLee/p/10212365.html
Copyright © 2011-2022 走看看