def fn():
    print("我叫fn")
fn()
print(fn)## <function fn at 0x0000000001D12E18>
fn()
gn = fn #函数名可以进行赋值
print(gn)# <function fn at 0x0000000001D12E18>
gn()
 
fn = 666
print(fn) #666
 
def func1()
    print("朱祁镇")
def func2()
    print("徐杰")
def func3():
    print("王阳明")
def func4():
    print("魏忠贤")
 
lst = [func1,func2,func3,func4]#函数+() 就是调用
print(lst)
 
lst[0]()
for el in lst:  #el是列表中的每一项
    el() #拿到的是函数.  执行函数
def wrapper():
    def inner():
        print("哈哈哈")
    return inner#函数名可以像返回值一样返回
ret = wrapper()  #接收的是inner函数
ret() #调用函数inner  在函数外面访问了函数内部的函数
函数可以作为参数进行传递
def func1():
    print("谢晋")
 
def func2():
    print('杨士奇')
 
def func3():
    print('徐渭')
 
def func4():
    print("柳如是")
#代理.装饰器的雏形
de proxy(a)
    print("我是代理")
    a()
    print("代理执行完毕")
proxy(func1)
proxy(func2)  #将函数当做参数进行传参
 
 
闭包
 
闭包的优点
1.可以保持变量不被其他人侵害
2.保持一个常量常驻与内存
def wrapper():
    a = "哈哈" #如果把a放到全局作用域是不安全的一种写法,因为好多内容用着同一个变量,则把它放到一个局部作用域中
    name = "周杰伦"
    def inner
        print(name)#在内层函数中使用了外层的函数的局部变量 
        print(a)
    return inner  #返回函数名
 
ret = wrapper()  #ret是inner函数
ret()  #调用函数
 
def wrapper():
    name = "周杰伦"  #局部变量常驻与内存
    def inner():
        print(name) #在内层函数中使用外层函数的局部变量
    return inner  #返回函数名
        #inner()
ret = wrapper()  #ret是一个内层函数
ret()  #ret是inner,执行的时机是不确定的,必须保证里边的name是存在的
 
#超级简单的爬虫
from urllib.request import urlopen  #导入一个模块
 
def func():
        #获取到网页中的内容,当网速很慢的时候.反复的打开这个网站 很慢
    content = urloppen("https://www.dytt8.net/").read()
    def inner():
        return  content.decode("gbk")  #网页内容
    return inner
print("开始网络请求")
ret = func()  #网络请求已经关闭
print("网络请求完毕")
print("第一次",ret())
print("第二次",ret()) #加载到内存  不用每次都进行网络请求 直接进行内存的调用  但是变量多的话  内存可能撑不下 
 
 
def wrapper():
    name = "alex"
    def inner():
        print("name")
    print(inner.__closure__)  #查看是否闭包.有内容就是闭包,没有内容就不是闭包
    inner()
wrappe()
 
迭代 
 
s = "今天下午考试,你们还要睡觉吗 "
for c in s: #字符串是一个可迭代对象
    print (c)
 
for i in 123: # 'int' object is not iterable整型是不可以迭代的
    print(i)
dir(对象)  #可以帮我们查看xxx数据能够执行的操作
print(dir(str))  #__iter__  
字符串 列表 字典 元组 集合 是可以迭代的  
int 和 bool 是不可以迭代的
共性:所有带有__iter__的东西可以进行for循环,带有__iter__的东西就是可以迭代的
lst = ["贾樟柯", "李安", "杨德昌", "王家卫"]
it = lst.__iter__() #拿到的是迭代器 
print(it.__next__()) #下一个
print(it.__next__()) #下一个
print(it.__next__()) #下一个
print(it.__next__()) #下一个
print(it.__next__()) #下一个 会报错  stopinteration  停止迭代
##想回去只能重新获得迭代器
1.只能项下执行,不能反复
2.结束的时候会扔给我们一个错误  stopiteration
3.整合所有的数据类型进行遍历 (int,bool除外)
用while循环来模拟for循环
it = list.__iter__()
while 1:
        try:
            el = it.__next__:  #拿数据
            print(el)
        except stopiteration:  #出现错误说明数据拿完了 
            break  #退出循环
 
官方通过代码判断是否是迭代器
借助于两个模块  Iteration 迭代器,iterable 可迭代的
from collections import iterable,iterator
lst = [1,2,3]
print(lst.__next__())
print(isinstance(lst, Iterable)) # xxx是否是xxx类型的. True
print(isinstance(lst, Iterator)) # False
 
迭代器一定是可迭代的,可迭代的东西不一定是迭代器
isinstens(参数,iterable)  判断xxx是不是某某类型 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

13 Python之第一类对象闭包和迭代器的更多相关文章

  1. python 第一类对象 闭包 迭代器

    ########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...

  2. python第一类对象,闭包,迭代器

    一.第一类对象 第一类对象 -> 函数名 -> 变量名 1.特征:     函数对象可以像变量一样进行赋值     还可以作为列表的元素进行使用     还可以作为返回值返回     还可 ...

  3. python 函数名的应用(第一类对象),闭包,迭代器

    1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...

  4. 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器

    一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...

  5. Python_Mix*函数名的使用以及第一类对象,闭包,迭代器,for循环的内部机制

    一:函数名的应用(第一类对象) 函数名的命名规范和变量是一样的,函数名其实就是变量名, 0)函数名可以赋值给其他变量 def func(): #定义一个名为func的函数 print('my ange ...

  6. day11 第一类对象 闭包 迭代器

    今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象  : 函数对象介意向变 ...

  7. python之函数名,闭包、迭代器

    一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...

  8. 函数的第一类对象,f格式化,迭代器以及递归

    函数名的第一类对象及使用,f格式化以及迭代器 1.函数的第一类对象 第一类对象 --特殊点 1.可以当作值被赋值给变量 def func(): print(1) a = func a() 2.可以当作 ...

  9. python --- 11 第一类对象 函数名 闭包 迭代器

    一 .函数名的运用    ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址    ③ 函数名可以赋值给其他变量         ④函数名可以当做容器类 ...

随机推荐

  1. Oracle 表空间扩容

    1 系统表空间扩容 注:表空间监测或扩容方式很多,这里只提供一种方便使用的方法 1)查询SQL 注:需要输入百分比,如:90,就可查出使用率超过90%的表空间, with t as (select b ...

  2. Java-JVM 类加载机制

    类的生命周期中的第一步,就是要被 JVM 加载进内存,类加载器就是来干这件事. 一.类加载器种类 系统提供了 3 种类加载器: 1.启动类加载器(Bootstrap ClassLoader) 由 C ...

  3. koa 路由模块化(一)

    1.项目目录 2.入口文件 根目录/app.js /** * koa 路由模块化 */ const Koa = require('koa'); const router = require('koa- ...

  4. OpenCV学习笔记(15)——更多的轮廓函数

    凸缺陷,以及如何找到凸缺陷 找某一点到一个多边形的最短距离 不同形状的匹配 1.凸缺陷 前面已经设计了轮廓的凸包和凸性缺陷的概念.OpenCV中有一个函数cv2.convexityDefect()可以 ...

  5. Session案例-用户登录场景

    package com.loaderman.demo; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...

  6. [VBA]提取指定字符串后的数字--代码来源Excelhome

    问题:提取check之后的数字 来源:Excelhome Sub 提取数字() Dim regexp As New regexp With regexp .Pattern = "check\ ...

  7. 深入学习重点分析java基础---第一章:深入理解jvm(java虚拟机) 第一节 java内存模型及gc策略

    身为一个java程序员如果只会使用而不知原理称其为初级java程序员,知晓原理而升中级.融会贯通则为高级 作为有一个有技术追求的人,应当利用业余时间及零碎时间了解原理 近期在看深入理解java虚拟机 ...

  8. RSA签名、验签、加密、解密

    最近在做一个项目,与一个支付渠道进行连接进行充值,为了安全,每个接口访问时,都要先登陆(调用登陆接口),拿到一个sessionKey,后续业务接口内容用它来进行3DES加密处理.而登陆需要用到RSA进 ...

  9. Ubuntu16.04系统Tensorflow源码安装

    最近学习Tensorflow,记录一下安装过程.目前安装的是CPU版的 1.下载tensorflow源码 tensorflow是个开源库,在github上有源码,直接在上面下载.下载地址:https: ...

  10. Excel随机数相关

    基本函数 RAND() 函数:自动生成一个[0,1)的平均分布随机数(依重新计算而改变) RANDBETWEEN(bottom,top) :返回一个介于指定数字直接的随机数,不会自动改变 INT(nu ...