" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Python高级语法

PySuper
2019-10-19 / 0 评论 / 0 点赞 / 18 阅读 / 2865 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

闭包、装饰器、生成器、迭代器

闭包

  • 两个函数的嵌套
  • 内层函数返回外层函数引用
  • 一般外层函数都会有参数
  • 外层函数的参数会在内存中保留(变量指向)
def 外层函数(外层参数):
    def 内层函数(内层参数):
        pring(内层参数)
    return 内层函数引用

内层函数引用 = 外层函数(外层参数)
内层函数引用(内层参数)

装饰器

  • 在不改动原有代码的情况下
  • 增加一个额外的功能
def fun():
    def inner():
        print("额外的功能")
    return inner

@fun
def game():
    print("这是函数原有的功能")
  • 示例:这里的@set_fun是一个语法糖,先执行==> test = set_fun(test)
def set_fun(func):
    def call_fun():
        print("用户认证")
        func()
    return call_fun

@set_fun    # ==> test = set_func(test)
def test():
    print("转账")

@set_fun    # ==> test2 = set_func(test2)
def test2():
    print("收钱")

迭代器

可迭代对象

  • 遍历可迭代对象的时候其实获取的是可迭代对象的迭代器
  • 然后通过迭代器获取对象中的数据

原理

  • iter函数: 获取可迭代对象的迭代器,会调用可迭代对象身上的__iter__方法
  • next函数: 获取迭代器中下一个值,会调用迭代器对象身上的__next__方法

for循环的本质

  • 遍历的是可迭代对象
  • 遍历的是迭代器

生成器

  • 一类特殊的迭代器
  • 不需要再像上面的类一样写__iter__()__next__()方法了,依然可以使用next函数和for循环取值

yield

  • 使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)
  • 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
  • 每次启动生成器都会返回一个值,多次启动可以返回多个值,也就是yield可以返回多个值
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区