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 函数名的使用、闭包、迭代器相关推荐

  1. python函数名的运用,闭包,迭代器

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

  2. python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...

    python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...

  3. python考试时函数名记不到怎么办?

    python考试时函数名记不到怎么办 不知道各位同学有没有在python或者机器学习.人工智能实操考试中忘记了导入的包的函数名称.同时又不允许百度查询,这时候该怎么办呢? 一招教你破解: python ...

  4. python函数闭包的应用_python学习第10天----函数名应用、闭包、迭代器

    1.函数名的应用 1)如果直接打印函数名,打印出的为函数的地址 deffunc():print("你好,世界")print(func) 输出: View Code #可将函数赋值给 ...

  5. 8月30日学习内容整理:命名空间,作用域,函数名本质,闭包

    补充: 三元运算:c= a if a>b else b  相当于:  if  a>b: c=a else: c=b 结构;  if条件成立的结果  if  条件  else  if条件不成 ...

  6. python 字符串转函数名_Python 使用函数名(字符串)调用函数(4种方法)

    先看一个例子: >>> def foo(): print("foo") >>> def bar(): print("bar" ...

  7. python中使用“[函数名].[变量名]”声明变量

    在<机器学习实战>中,作者使用了一种[函数名].[变量名]的格式声明并引用变量. 示例如下: def createPlot(inTree):fig = plt.figure(1, face ...

  8. 查看变量类型的python内置函数名_查看变量类型的Python内置函数是()

    查看变量类型的Python内置函数是() 答:type() 3[单选题]马克思主义同中国实际相结合的第二次历史性飞跃的理论成果是() 答:C.中国特色社会主义理论体系 在Word编辑状态中,按下列哪个 ...

  9. Python技巧——根据函数名获得函数对象

    有时我们需要将一个文件的信息(类.函数及变量)保存到文件,我们不能直接保存函数对象,而是将其转化为fn.__name__,问题来了,当我们想通过读取文件的形式重新配置这些类.函数时,该如何把这些字符串 ...

最新文章

  1. 新建JRapid项目(idea创建maven多模块项目)
  2. PO、VO、FormBean的思考
  3. 你真的懂switch吗?聊聊switch语句中的块级作用域
  4. 数学建模之运筹学问题
  5. PAT (Basic Level) 1045 快速排序(思维)
  6. 关于idea的git账号与电脑的git账号不一致的问题。已解决!
  7. echarts画图实例讲解
  8. 『编程题全队』Alpha 阶段冲刺博客集合
  9. python 恢复删除的文件_如何恢复已删除的python文件(一看就会的恢复软件)
  10. 八、OpenDaylight应用基础开发(ODL控制器初级开发流程总结)
  11. 至高心法 - SpringCloud Alibaba (二)Nacos 服务注册与配置中心
  12. Excel筛选重复数据
  13. 传染病模型(1)——SI模型及matlab详解
  14. 云服务器oa系统,oa系统放到云服务器云服务器
  15. freemarker中local和assign标签区别
  16. 使用TabLayout+ViewPager+Fragment实现切页展示
  17. 换服务器要重新百度站长验证站点吗6,百度站长工具教程一:如何使用百度站长平台验证网站 – 陆琳玲SEO博客...
  18. UE4 Unlua源码解析12 - Lua与UE4的混合GC
  19. 是敌是友?科技巨头间错综复杂的关系
  20. JS一维数组排序(冒泡法)

热门文章

  1. JSON数据和Java对象的相互转换
  2. python pyppeteer自定义chromium目录
  3. Java常用软件教程
  4. Chrome 技术篇-console控制台检测xpath、css唯一性
  5. C++ leetCode 判断一个整数是否为回文数 9. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
  6. C++ ,leetcode 43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式
  7. jquery/css实现步骤条
  8. CTFshow 信息收集 web6
  9. 梯度下降原理及在线性回归、逻辑回归中的应用
  10. js css3实现tab,div+css+js实现tab页