python - 闭包,迭代器
- def func1():
- print('你是谁,你来自哪里')
- print(func1)
- # <function func1 at 0x000001256F021E18>
2、函数名可以赋值给其他变量
- def func1():
- print('这是函数1')
- # print(func1)
- res = func1 # 把函数当成一个变量赋值给另一个变量
- res() # 函数调用 func1()
- # 这是函数1
3、函数名可以当作容器类的元素
- def func1():
- print('大风吹1')
- def func2():
- print('大风吹2')
- def func3():
- print('大风吹3')
- def func4():
- print('大风吹4')
- lst = [func1,func2,func3,func4]
- for i in lst:
- i()
4、函数名可以当作函数的参数进行传递
- def func1():
- print('这两天降温了')
- def func2(fn):
- print('我是函数2')
- fn()
- print('我是函数2')
- func2(func1)
- def func1():
- print('哈哈')
- def func2():
- print('嘿嘿')
- def func3():
- print('呵呵')
- # 代理装饰器雏形
- def proxy( a ): # a 就是变量,形参
- print('我是代理')
- a()
- print('代理完毕')
- proxy(func1)
- proxy(func2)
- proxy(func3)
5、函数名可以作为函数的返回值
- def func1():
- print('这是函数1')
- def func2():
- print('这是函数2')
- return func2
- fn = func1() # 执行函数1,函数1返回的是函数2,这时fn之想的就是函数2
- fn() # 执行上面返回的函数(也就是函数2)
- def wapper():
- name = '昂昂' # 局部变量常驻于内存
- def inner():
- print(name) # 在内层函数中调用外层函数的局部变量
- return inner # 返回内部函数名
- res = wapper() # res 是一个内层函数
- res() # res 就是inner,执行的时间不确定,必须保证里边的name存在
- # 写一个简易爬虫
- from urllib.request import urlopen
- # 去掉数字签名
- import ssl
- ssl._create_default_https_contest = ssl._create_unverified_context
- def func():
- #获取到网页中的内容,当网速很慢时,反复的去打开这个网站,会很慢
- content = urlopen("https://www.dytt8.net/";).read()
- def inner():
- return content.decode("gbk") # 网页内容
- return inner
- print('开始网络请求')
- ret = func() # 网络请求已经完毕
- print("网络请求完毕")
- print("第一次",ret()[30])
- print("第二次",ret()[30])
- def wapper():
- name = 'xiaomeng'
- def inner():
- print('zhangying')
- print(inner.__closure__)
- inner()
- wapper()
是闭包
- def wapper():
- name = 'xiaomeng'
- def inner():
- print(name)
- print(inner.__closure__) # (<cell at 0x000001B2D03086A8: str object at 0x000001B2D03A23F0>,)
- inner()
- wapper()
- s = '你是谁啊'
- print(dir(s)) # 可以打印对象中的方法和函数
- print(dir(str)) # 可以打印类中申明的方法和函数
- lst = [1, 2, 3]
- # 模拟for循环 for el in lst
- it = lst.__iter__() # 拿迭代器
- while 1: # 循环
- try: # 尝试
- it.__next__()
- except StopIteration: # 出现错误,意味着数据拿完了
- break # 结束循环
python - 闭包,迭代器的更多相关文章
- 小学生都能学会的python(闭包和迭代器)
小学生都能学会的python(闭包和迭代器) 1. 函数名第一类对象 函数名其实就是变量名 1). 可以像变量一样互相赋值. 2). 可以作为函数的参数,进行传递 3). 可以作为返回值返回 4). ...
- Python 闭包、迭代器、生成器、装饰器
Python 闭包.迭代器.生成器.装饰器 一.闭包 闭包:闭包就是内层函数对外层函数局部变量的引用. def func(): a = "哈哈" def func2(): prin ...
- python基础——迭代器
python基础——迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器 ...
- Python 闭包
什么是闭包? 闭包(closure)是词法闭包(lexical closure)的简称.闭包不是新奇的概念,而是早在高级程序语言开始发展的年代就已产生. 对闭包的理解大致分为两类,将闭包视为函数或者是 ...
- Python闭包与函数对象
1. Python闭包是什么 在python中有函数闭包的概念,这个概念是什么意思呢,查看Wikipedia的说明如下: “ In programming languages, closures (a ...
- Python闭包及装饰器
Python闭包 先看一个例子: def outer(x): def inner(y): return x+y return innder add = outer(8) print add(6) 我们 ...
- Python闭包详解
Python闭包详解 1 快速预览 以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >> ...
- Python闭包及其作用域
Python闭包及其作用域 关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域 ...
- python基础—迭代器、生成器
python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...
- Python 闭包小记
闭包就是能够读取其他函数内部变量的函数.例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“.在本质上,闭包是将函数内部和函数外部连接起来 ...
随机推荐
- 原创《weex面向未来的架构》
最近一直在做weex的调研工作,整理之后给公司做了一次技术分享. 分享内容如下: 1:Weex是什么? 2: Weex目前能做什么? 3: Weex 如何调试 4: 剖析一下Weex原理 5: ...
- idea提交git报错Push rejected: Push to origin/master was rejected
参考https://blog.csdn.net/u012934325/article/details/71023241
- chromdriver与geckodriver和浏览器版本问题
chromdriver74与chrom74对应 geckodriver024与Firefox66对应 亲测有效
- pip安装报错
ERROR: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat) python通过pip或者源码来安装某些模块时,这 ...
- Unity自定义定时器,模拟协程,脱离MonoBehavior控制
using System; using System.Collections.Generic; using System.Timers; public class PETimer { private ...
- HTML5外包团队 更新一下2019最新案例
本项目控件均为动态加载,3D部分使用Unity3D,其它基于ReactJS,NodeJS,部分使用cocos2D,由于项目涉密,只能发部分截图,欢迎联系索取更多案例,企鹅号 372900288 祝大家 ...
- java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
使用 MockMvc 模拟进行单元测试时出现以下的错误,网上看到的资料应该是说Spring4.0需要servlet3.0的支持? 在pom.xml更改servlet的版本依赖后即可
- js 回文判断
方法一: 1.toLowerCase() //统一小写. 2.split(" ").reverse().join(" "); //字符串翻转. func ...
- WebvirtCloud安装(CentOS7)
1.安装依赖包wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum -y install p ...
- lua调用不同lua文件中的函数
a.lua和b.lua在同一个目录下 a.lua调用b.lua中的test方法,注意b中test的写法 _M 和 a中调用方法: b.lua local _M = {}function _M.test ...