python note 11 函数名的使用、闭包、迭代器
1、函数名就是一个变量
def func():print("我是一个小小的函数") a = func print(a) #输出变量存放地址 <function func at 0x00000251AD780048> func() #func()等同于a(),输出 我是一个小小的函数
2、函数名是变量名
def func1():print("我是1") def func2():print("我是2") def func3():print("我是3") lst = [func1, func2, func3] for el in lst:el() #输出 我是1 我是2 我是3
3、函数名可以作为参数传递给函数
def my():print("我是my") def proxy(fn): # 代理模式. 装饰器print("在处理之前")fn()print("在处理之后") proxy(my) # 把函数名作为参数传递给另一个函数 #输出 在处理之前 我是my 在处理之后
def func1():print("我是func1") def func2():print("我是func2") def func(fn, gn): # 函数名可以作为参数进行传递print("我是func")fn()gn()print("哈哈哈") func(func1, func2)
func()()用法
def func():print("我是func")a = 10 # 变量def inner():print("我是inner")return inner ret = func() ret() func()() # 先运行func() 然后在返回值上加(),等于上一个写法 #输出 我是func 我是inner
4、闭包
#闭包. 在内层函数中访问外层函数的变量
# 闭包的作用:
# 1. 可以保护你的变量不收侵害
# 2. 可以让一个变量常驻内存
如果不闭包全局变量是不安全的
a = 10 # 不安全的 def outer():global aa = 20 def outer_2():global aa = 30 outer_2() outer() print(a) #输出 20 #如果交换outer_2()和outer(),那么输出会变为30
闭包变量会常驻内存
def outer():a = 10 # 常驻内存, 为了inner执行的时候有值.def inner():print(a)return inner fn = outer() fn() # 调用的时机是不定的. #输出 10
超简易爬虫
from urllib.request import urlopen def outer():# 常驻内存s = urlopen("http://www.xiaohua100.cn/index.html").read()def getContent(): # 闭包return sreturn getContent print("爬取内容.....") pa = outer() ret = pa() print(ret)
查看是否闭包
def func():a = 10def inner():print(a)print(inner.__closure__) func() # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包
5、迭代器
# dir查看xx类型的数据可以执行哪些方法 print(dir(str))、print(dir(list))、print(dir(int))
# 所有的带__iter__可以使用for循环的, 可迭代对象。print(dir(int)) 没有__iter__
# 可迭代对象可以使用__iter__()来获取到迭代器 # 迭代器里面有__next__() # s = "石可心喜欢赵一宁" # it = s.__iter__() # 获取迭代器 # print(dir(it)) # 迭代器里有__iter__ 还有__next__
迭代器特性
# 1. 只能向前.
# 2. 几乎不占用内存, 节省内存(需要明天生成器)
# 3. for循环
# 4. 惰性机制 (面试题,难度系数比较高)
s = "石可心喜欢赵一宁" it = s.__iter__() # 获取迭代器 print(it.__next__())# 石 print(it.__next__())# 可 print(it.__next__())# 心 print(it.__next__())# 喜 print(it.__next__())# 欢 print(it.__next__())# 赵 print(it.__next__())# 一 print(it.__next__())# 宁
迭代器模拟for循环
lst = ["赵一宁", "石可心", "朱奎峰", "姚明","潘长江"] for el in lst: # 底层用的是迭代器print(el)
不输出错误
lst = ["赵一宁", "石可心", "朱奎峰", "姚明","潘长江"] it = lst.__iter__() # 获取迭代器 while 1:try: # 尝试执行el = it.__next__() # 获取下一个元素print(el)except StopIteration: # 处理错误,不显示break
判断是否为迭代器
偏方
# print("__iter__" in dir(it)) # print("__next__" in dir(it)) # 可以通过dir来判断数据是否是可迭代的, 以及数据是否是迭代器
官方方案
# from collections import Iterable # 可迭代对象 # from collections import Iterator # 迭代器 # # print(isinstance(lst, Iterable)) # print(isinstance(lst, Iterator)) # # print(isinstance(it, Iterable)) # print(isinstance(it, Iterator))
转载于:https://www.cnblogs.com/P-Z-W/p/10745217.html
python note 11 函数名的使用、闭包、迭代器相关推荐
- python函数名的运用,闭包,迭代器
一.函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1.函数名的内存地址 1 def func(): 2 print("呵呵") 3 prin ...
- python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- python考试时函数名记不到怎么办?
python考试时函数名记不到怎么办 不知道各位同学有没有在python或者机器学习.人工智能实操考试中忘记了导入的包的函数名称.同时又不允许百度查询,这时候该怎么办呢? 一招教你破解: python ...
- python函数闭包的应用_python学习第10天----函数名应用、闭包、迭代器
1.函数名的应用 1)如果直接打印函数名,打印出的为函数的地址 deffunc():print("你好,世界")print(func) 输出: View Code #可将函数赋值给 ...
- 8月30日学习内容整理:命名空间,作用域,函数名本质,闭包
补充: 三元运算:c= a if a>b else b 相当于: if a>b: c=a else: c=b 结构; if条件成立的结果 if 条件 else if条件不成 ...
- python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)
先看一个例子: >>> def foo(): print("foo") >>> def bar(): print("bar" ...
- python中使用“[函数名].[变量名]”声明变量
在<机器学习实战>中,作者使用了一种[函数名].[变量名]的格式声明并引用变量. 示例如下: def createPlot(inTree):fig = plt.figure(1, face ...
- 查看变量类型的python内置函数名_查看变量类型的Python内置函数是()
查看变量类型的Python内置函数是() 答:type() 3[单选题]马克思主义同中国实际相结合的第二次历史性飞跃的理论成果是() 答:C.中国特色社会主义理论体系 在Word编辑状态中,按下列哪个 ...
- Python技巧——根据函数名获得函数对象
有时我们需要将一个文件的信息(类.函数及变量)保存到文件,我们不能直接保存函数对象,而是将其转化为fn.__name__,问题来了,当我们想通过读取文件的形式重新配置这些类.函数时,该如何把这些字符串 ...
最新文章
- 新建JRapid项目(idea创建maven多模块项目)
- PO、VO、FormBean的思考
- 你真的懂switch吗?聊聊switch语句中的块级作用域
- 数学建模之运筹学问题
- PAT (Basic Level) 1045 快速排序(思维)
- 关于idea的git账号与电脑的git账号不一致的问题。已解决!
- echarts画图实例讲解
- 『编程题全队』Alpha 阶段冲刺博客集合
- python 恢复删除的文件_如何恢复已删除的python文件(一看就会的恢复软件)
- 八、OpenDaylight应用基础开发(ODL控制器初级开发流程总结)
- 至高心法 - SpringCloud Alibaba (二)Nacos 服务注册与配置中心
- Excel筛选重复数据
- 传染病模型(1)——SI模型及matlab详解
- 云服务器oa系统,oa系统放到云服务器云服务器
- freemarker中local和assign标签区别
- 使用TabLayout+ViewPager+Fragment实现切页展示
- 换服务器要重新百度站长验证站点吗6,百度站长工具教程一:如何使用百度站长平台验证网站 – 陆琳玲SEO博客...
- UE4 Unlua源码解析12 - Lua与UE4的混合GC
- 是敌是友?科技巨头间错综复杂的关系
- JS一维数组排序(冒泡法)
热门文章
- JSON数据和Java对象的相互转换
- python pyppeteer自定义chromium目录
- Java常用软件教程
- Chrome 技术篇-console控制台检测xpath、css唯一性
- C++ leetCode 判断一个整数是否为回文数 9. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- C++ ,leetcode 43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式
- jquery/css实现步骤条
- CTFshow 信息收集 web6
- 梯度下降原理及在线性回归、逻辑回归中的应用
- js css3实现tab,div+css+js实现tab页