zoukankan      html  css  js  c++  java
  • 第一类对象

    函数名的使用及第一类对象:
    查看函数的内存地址   print(函数名)
    函数可以当做值,赋值给变量
    函数可以参数,传递个函数的形参 函数当参数的时候不能加括号
    函数可以当返回值 当返回值的时候不括号
    函数名可以元素存在容器里
     1 def func1():
     2     print("念阳枭")
     3 def func2():
     4     print("李星云")
     5 def func3():
     6     print("百里登风")
     7 def func4():
     8     print("李大白")
     9 lst=[func1,func2,func3,func4]
    10 #lst[0]()
    11 for el in lst: # el是裂变中的每一项
    12     el()        # 拿到函数,执行函数

       可以把函数放到容器里:

     1 def func1():
     2     print("念阳枭")
     3 def func2():
     4     print("李星云")
     5 def func3():
     6     print("百里登风")
     7 def func4():
     8     print("李大白")
     9 lst=[func1(),func2(),func3(),func4()]  # 函数加上()就是调用函数,由于之前的函数没有return值,所以打印列表中,装的是None,这样没有任何作用!
    10 print(lst)
    函数名可以像返回值一样返回:
    1 def wrapper():
    2     def inner():
    3         print("锅包肉")
    4     return inner  # 函数名可以像返回值一样返回
    5 ret=wrapper()
    6 ret()             # 在函数外面访问了函数内部的函数
    函数可以传参:
     1 def func1():
     2     print("念阳枭")
     3 def func2():
     4     print("李星云")
     5 def func3():
     6     print("百里登风")
     7 def func4():
     8     print("李大白")
     9 # 代理,装饰器的雏形
    10 def proxy(a):    # a就是变量,形参       函数可以传参
    11     print("我是代理")
    12     a()
    13     print("代理执行完毕")
    14 proxy(func1)
    15 proxy(func2)
    16 proxy(func3)
    
    
    闭包:
    嵌套函数,在嵌套函数内,内部函数使用外部变量(非全局变量) 就是一个闭包 闭包可以多层
    好处,
    保护变量不会被外界修改
    函数内使用到的变量会生命周期延长
    节省开辟空间和销毁空间的时间
    
    
    迭代器:
    可迭代对象:  遵守可迭代对象的协议  具有__iter__()方法
    除去整型和布尔值剩下现已知都是
    迭代器: 遵守迭代器的协议  具有__iter__()方法和__next__()方法
    创建一个迭代器 == 可迭代对象.__iter__()
    使用迭代器 == 迭代器.__next__()
    
    
    1 lst=["张飞","亚索","吕布","雅典娜"]
    2 it=lst.__iter__()       #拿到的是迭代器
    3 print(it.__next__())    #下一个
    4 print(it.__next__())    #下一个
    5 print(it.__next__())    #下一个
    6 print(it.__next__())    #下一个
    7 
    8 it=lst.__iter__()       # 用此语句重新获取迭代器,迭代器只能一次过
    只能向下执行,不能反复
    结束的时候会给我们扔出来一个错误, StopIteration

    用while模拟for循环 for el in lst:
    1 lst=["王者荣耀","英雄联盟","QQ飞车","穿越火线"]
    2 it=lst.__iter__()               # 获取迭代器0
    3 while 1:                        #循环
    4     try:                        #尝试
    5         el=it.__next__()        # 拿数据
    6         print(el)
    7     except StopIteration:       # 出了错误,except解决,数据拿完
    8         break                   # 结束循环
     
    迭代器机制:
    不能回退
    惰性机制
    一次性的
    查看是迭代器是否是可迭代对象:
    from collections import Iterator,Iterable
    print(isinstance('查看的内容',Iterable)) # 查看是否是可迭代的
    print(isinstance('查看的内容',Iterator)) # 查看是否是迭代器
    迭代器一定是可迭代的,但是可迭代的不一定是迭代器
     
     
     
     
     
  • 相关阅读:
    二级菜单
    eclipse高版本中EasyExplore的替换插件OpenExplore
    Python学习一
    原型编程的基本规则
    【CF671D】 Roads in Yusland(对偶问题,左偏树)
    【洛谷4542】 [ZJOI2011]营救皮卡丘(最小费用最大流)
    【洛谷4313】 文理分科(最小割)
    【洛谷4001】 [ICPC-Beijing 2006]狼抓兔子(最小割)
    【洛谷2057】 [SHOI2007]善意的投票(最小割)
    【洛谷2053】 [SCOI2007]修车(费用流)
  • 原文地址:https://www.cnblogs.com/53Dawns/p/10251834.html
Copyright © 2011-2022 走看看