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*"*")

  

 

posted @ 2018-10-31 22:08  冰底熊  阅读(221)  评论(0编辑  收藏  举报