python函数高级运用

一、装饰器

二、迭代器

三、生成器

四、练习

 

一、装饰器

  1.1 闭包函数用法

# 需求:
# 执行一个函数前需要认证是否登录,如果登录则不需再登录.
# 只认证一次,后续操作无需认证
# 要求认证使用闭包函数用法
# 闭包函数 = 函数嵌套 + 命名空间作用域 + 函数对象
  实现

   1.2 什么是装饰器

#  什么是装饰器
    # 1、装饰即修饰,器指的就是工具
    # 2、装饰器本身可以是任意可调用的对象
    # 3、被装饰的对象也可以是任意可调用的对象

  1.3 为什么要使用装饰器

复制代码
#  为什么要使用装饰器
    # 1、在不改变原有的调用方式,不改变原方法的前提下,如何实现对内容上的新增??
    # 例如:
        # 今天公司cto要求对一些方法添加文件的日志记录(此时你是否需要对每一个方法添加日志的记录?)
        # 第二天CTO 突然改变主意说 原来的方法添加日志记录改为 mysql 记录(此时你是否又要修改每一个方法的日志记录??)
        # 我知道你此时此刻一定会想,我可以写一个日志记录方法,让每一个方法内部调用这个方法(很不错的想法)
        # 第三天 你的公司cto 告诉你,我的日志一定要记录那些方法执行的开始和结束时间。(是不是有点懵X了?你该怎么办??)
复制代码

  1.4 怎么用装饰器

    # 是否是和上面的那个闭包函数很像呀(其实装饰器就是闭包函数的一种运用)
    # 装饰器语法糖:
    # 在被装饰对象的正上方一行写@装饰器的名字
    # @auth   ==> func = auth(func)
  怎么使用装饰器

   1.5 有参装饰器

复制代码
    # 上面的装饰器只是使用了固定的用户jmz,登录,而且没有实现以哪种方式 验证(文件方式,还是mysql方式)
    # 如果我需要暂时以文件的方式验证,后期再改为使用mysql 方式验证该如何使用??? (尽量减少代码的修改)
    # 要求:
        # 1、验证的方式是不固定的
        # 2、使用的装饰器要兼顾至少两种以上的验证方式
        # 3、需要能够随时给方法添加验证或撤销验证
复制代码
  有参装饰器

 

二、迭代器

  2.1 什么是迭代器?

    迭代的工具:

      迭代是一个重复的过程,每一次的重复都是基于上一次的结果进行的      

# 这不是迭代
while True:
    print('....')

  2.2 为什么要使用迭代器?

    找到一种不依赖于索引的迭代的方式?

扫描二维码关注公众号,回复: 499520 查看本文章
复制代码
# 1、列表是自带索引的,那么如何迭代没有索引的呢???(禁止使用for)
l = ['a','b','c']
k = 0
while k<len(l):
    print(l[k])
    k+=1


# 2、如何循环取一个无限大的值?
#     如果使用上面的方法显然是不现实的,因为你的列表是存不下无限大的值的(列表的数据占着内存的空间)


# 那怎么办呢?
复制代码

  2.3 怎么使用迭代器?

    2.3.1 可迭代对象

        python 中,但凡内置__iter__方法的,都是可迭代对象

复制代码
a = 1
b = 1.1
# 以下都是可以使用__iter__ 方法
c = 'abcd'
#c.__iter__()
d = ['a','b','c']
# d.__iter__()
e = ('a','b','c')
# e.__iter__()
f = {'a':1,'b':2}
# f.__iter__()
g={'a','b','c'}
# g.__iter__()
h=open('a.txt','r')  # 本身就是一个迭代器对象
复制代码

     2.3.2 迭代器对象       

复制代码
#     可迭代对象:在python中但凡有内置方法__iter__的对象,都是可迭代对象
#     迭代器对象 :
#         执行可迭代对象下__iter__方法后得到迭代器对象
#     迭代器对象的内置方法
#         __next__
#         __iter__方法,执行该方法得到仍然是迭代器本身,干什么用??(等下解释)

# 有了迭代器我们就不需要依赖索引取值了
#       注意: 
#      1、迭代器对象一定是对迭代对象
#      2、可迭代对象不一定是迭代器对象
 
复制代码
  __iter__ ,迭代器对象执行后任然是本身
  for 循环实现原理

   2.4 总结

  迭代器的优缺点

 

三、生成器

  3.1 什么是生成器 

复制代码
# 函数内部含有yield关键字,那么该函数() 即为生成器。
# 自定义迭代器

def func():
    print('first')
    yield 1
    print('second')
    yield 2
    print('third')
    yield 3

f = func()
print(f) #<generator object func at 0x0000000001DF0DB0>
复制代码

  3.2 生成器的使用方式

  生成器使用方式一
  生成器使用方式二

  3.3 总结

# 1、可以像return 一样,返回值,但又可以多次返回
# 2、可以挂起/保存函数的当前状态,可以达到随用随启动的程度
# 3、可以多次传值操作

 

四、练习

# 作业一:写一个取基数的操作 (迭代器)
# 作业二:咖啡3元,糖0.5元 牛奶2元,平时咖啡单点的,活动需要,需加糖与牛奶捆绑销售(装饰器)
# 作业三:用户购买商品,以邮箱或短信的形式通知(装饰器)
  作业
http://news.vlq7732.cn/
http://news.mak1390.cn/
http://news.dfr2203.cn/
http://www.qld9407.cn/
http://news.hvc6084.cn/
http://news.xtl7183.cn/
http://news.hmw0652.cn/
http://www.wky3695.top/
http://news.ciw9360.cn/
http://www.tqt8862.top/
http://www.bnb6875.cn/
http://www.cxb4532.cn/
http://www.kgs1242.cn/
http://www.mmw6064.cn/
http://www.igm8568.cn/
http://news.kpp1176.cn/
http://news.xnw9449.cn/
http://news.tso8557.cn/
http://news.iaz8522.cn/
http://www.kcs3342.top/
http://news.ecx0415.cn/
http://news.lwa7903.cn/
http://www.lij0467.cn/
http://www.xqs4260.top/
http://www.ipc6507.cn/
http://www.epi0997.cn/
http://www.bdw7316.cn/
http://news.qnu9925.cn/
http://www.gmn7922.top/
http://news.zht3189.cn/
http://news.hij5984.cn/
http://www.aua2439.cn/
http://news.hqh7518.cn/
http://news.zdn2144.cn/
http://www.myb6827.cn/
http://www.grp2563.cn/
http://www.fmh8265.cn/
http://www.myy9223.cn/
http://www.dfr2203.cn/
http://news.fmh8265.cn/
http://news.ibs2142.cn/
http://news.hud3144.cn/
http://news.zce9839.cn/
http://www.sdb0307.cn/
http://news.ewv7964.cn/
http://www.mar4014.cn/
http://www.sqd7023.top/
http://news.rwi9374.cn/
http://news.zri8413.cn/
http://www.krr6354.cn/
http://www.hxl6493.cn/
http://www.ysz1764.cn/
http://news.wvh4263.cn/
http://news.bpl6646.cn/
http://news.hgh3722.cn/
http://www.sxw8975.cn/
http://news.ath0401.cn/
http://news.mco2769.cn/

猜你喜欢

转载自blog.csdn.net/shunfa888/article/details/80261654
今日推荐