zoukankan      html  css  js  c++  java
  • 11 闭包生成器

    一.函数
    1.函数时一种特殊变量,函数名加小括号,表示执行函数 func()
    2.函数可以赋值给其他变量
    3.函数名可以作为参数
    def func(func1):
    pass
    4.函数可以当容器的元素 li=[func1,func2...]
    5.函数可以作返回值

    二.闭包
    1.内层函数对外层函数中变量的引用
    2.使用__closure__来检测函数是否是闭包. 使用 函数名.__closure__ 返回cell就是闭包,返回None时,不是闭包
    def outer():
    a=10
    def inner():
    print(a)
    inner()
    print(inner.__closure__) #(<cell at 0x0000000002158468: int object at 0x0000000065E26D40>,) 说明inner是闭包
    outer()
    3.闭包的作用
    1.保护变量
    2.能让变量常驻内存
    def outer():#外层函数
    a=10 #外层函数中的变量
    def inner(): #内层函数
    print(a)
    return inner
    ret=outer() #inner
    ret()#调用inner

    三.迭代器
    1.Iterable 可迭代对象:含有__iter__()方法
    2.Iteration迭代器:含有__iter__()和__next__()方法
    li=[1,2,3,4,54,"a","钟"] #可迭代对象
    it=li.__iter__() #用__iter__方法获取迭代器

    3.迭代器的特点
    节省内存空间
    惰性机制,必须用__next__()获取数据
    不能反复,只能向下执行 (想再次从头取值时,需要重新获取新的迭代器)

    4.如何判断一个对象是否是一个可迭代对象
    #方法一
    print("__iter__" in dir(lst)) # True 可迭代的
    print("__next__" in dir(lst)) # True 迭代器

    #方法二
    from collections import Iterable,Iterator
    print(isinstance(lst, Iterable)) # True
    print(isinstance(lst, Iterator)) # False

    四.用while循环+迭代器模拟for循环
    lst=[1,2,"s","a"]
    it=lst.__iter__() #获取新的迭代器
    while 1:
    try:
    print(it__next__()) #从迭代器中取值
    except StopIteration: #出现StopIteration错误时走接下来的程序
    break

    五.一些方法
    1. dir(str) dir查看数据类型(str)的方法
    2. print(isinstance(a,b) ) #a是否属于b类型
    3.获取函数名 func.__name__
    4.获取函数内的注释: func.__doc__

    def func(a, b):
    '''
    文档注释
    这个函数用来计算两个数的和并返回
    :param a: 第一个数
    :param b: 第二个数
    :return: 第一个数和第二个数的和
    author:sylar
    date:2018-10-31
    '''
    print("我是func")
    return a + b
    print(func.__doc__) # document 文档注释
    print(func.__name__) # name 名字 获取函数名
    #乘法表
    for i in range(1,10):
        for j in range(1,i+1):
            print("%sx%s=%s"%(j,i,i*j),end="  ")
        print()#换行 

    1x1=1
    1x2=2 2x2=4
    1x3=3 2x3=6 3x3=9
    1x4=4 2x4=8 3x4=12 4x4=16
    1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
    1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
    1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
    1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
    1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

    for i in range(1,10,2):
        for j in range(13-i,2,-2):
            print(" ",end="")
        print(i*"*")
    

      

  • 相关阅读:
    0xc000000f: Error attempting to read the boot configuration data
    结合使用 Oracle Database 11g 和 Python
    精通 Oracle+Python,第 9 部分:Jython 和 IronPython — 在 Python 中使用 JDBC 和 ODP.NET
    精通 Oracle+Python,第 8 部分:适合 Oracle DBA 使用的 Python
    精通 Oracle+Python,第 6 部分:Python 支持 XML
    精通 Oracle+Python,第 7 部分:面向服务的 Python 架构
    精通 Oracle+Python,第 5 部分:存储过程、Python 编程
    精通 Oracle+Python,第 4 部分:事务和大型对象
    精通 Oracle+Python,第 3 部分:数据解析
    精通 Oracle+Python,第 2 部分:处理时间和日期
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9886244.html
Copyright © 2011-2022 走看看