python函数名的应用、闭包和迭代器
一、函数名的应用(第一类对象)
函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数变量。
1.函数名的内存地址
def func():print("哈哈") print(func) #<function func at 0x000002750A7998C8>
2.函数名可以赋值给其他变量
def func():print("哈哈") print(func) a = func #把函数当成一个变量赋值给另一个变量 a() #函数调用 func() #<function func at 0x00000211E56198C8> #哈哈
3.函数名可以当做容器类的元素
def func1():print("哈哈") def func2():print("哈哈") def func3():print("哈哈") def func4():print("哈哈") lst = [func1,func2,func3] for i in lst:i() # 哈哈 # 哈哈 # 哈哈
View Code
4.函数名可以当函数的参数
def func():print("吃了么") def func2(fn):print("我是func2")fn()print("我是func2") func2(func) #把函数func当成参数传递给func2的参数fu # 我是func2 # 吃了么 # 我是func2
View Code
5.函数名可以当作函数的返回值
def func_1():print("这里是函数1")def func_2():print("这里是函数2")print("这里是函数1")return func_2 fn = func_1() #执行函数1,函数1返回的是函数2,这时fn指向的就是上面的函数2 fn() #执行上面返回的函数 # 这里是函数1 # 这里是函数1 # 这里是函数2
View Code
二、闭包
闭包:在内层函数中访问外层函数的局部变量
优点:
1保护你的变量不受外界影响
2.可以让变量常驻内存
写法:
def outer():
a = 10
def inner():
print(a)
retunt inner
判断方法:
def func():a = 10def inner():print(a)print(inner.__closure__) # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包 func()
三、迭代器
使用dir来查看该数据包含了哪些方法
print(dir(str)) #结果 ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
View Code
用来遍历列表,字符串,元组...等等可迭代对象
可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()
迭代器: Iterable,里面有__iter__()可以获取迭代器,还有__next__()
迭代器的特点:
1.只能向前
2.惰性机制
3.省内存(生成器)
for循环的内部机制
1.首先获取到迭代器
2.使用while循环获取数据
3.it.__next__()来获取数据
4.处理异常 try:xxx except StopIteration:
s = "我是一名小画家" it = s.__iter__() while 1:try:el = it.__next__()print(el)except StopIteration:break # 我 # 是 # 一 # 名 # 小 # 画 # 家
View Code
判断方法:
s = "abc" it = s.__iter__() #第一种方法 print("__iter__" in dir(it)) #输出是Ture说明是可迭代对象 print("__next__" in dir(it)) #输出是Ture说明是迭代器 #第二种方法 from collections import Iterable from collections import Iterator print(isinstance(it,Iterable)) #判断是不是可迭代对象 print(isinstance(it,Iterator)) #判断是不是迭代器
View Code
转载于:https://www.cnblogs.com/qq849784670/p/9455752.html
python函数名的应用、闭包和迭代器相关推荐
- python函数名的运用,闭包,迭代器
一.函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1.函数名的内存地址 1 def func(): 2 print("呵呵") 3 prin ...
- python函数闭包的应用_python学习第10天----函数名应用、闭包、迭代器
1.函数名的应用 1)如果直接打印函数名,打印出的为函数的地址 deffunc():print("你好,世界")print(func) 输出: View Code #可将函数赋值给 ...
- python函数名第一类方法、f-string格式化、迭代器及递归函数
函数第一类方法 函数名可以赋值给其他变量 def func():print(1) a = func a() # 结果:1 函数名可以当做容器类的元素 def func1():print(1) def ...
- python函数名的语法_Python 基础语法六 ——函数
一个程序可以按不同的功能实现拆分成不同的模块,而函数就是能实现某一部分功能的代码块. 1.函数的概述 定义:在Python中,定义个函数要使用 def 语句,一次写出函数名.括号.括号中的参数和冒号( ...
- python函数名与变量名可以一样吗_python--第一类对象,函数名,变量名
一 . 第一类对象 函数对象可以像变量一样进行赋值 , 还可以作为列表的元素进行使用 可以作为返回值返回 , 可以作为参数进行传递 def func(): def people(): print('金 ...
- 8月30日学习内容整理:命名空间,作用域,函数名本质,闭包
补充: 三元运算:c= a if a>b else b 相当于: if a>b: c=a else: c=b 结构; if条件成立的结果 if 条件 else if条件不成 ...
- Python 函数基础与进阶 闭包 聚合与打散
阅读目录 函数基础 基础知识 return 返回值 不可变类型和可变类型的值传递问题 函数的参数 打散和聚合 函数进阶 函数的注释 命名空间 作用域和全局变量 函数的嵌套和作用域链 函数名 闭包 函数 ...
- Python函数名的本质,你有了解过嘛?
函数名实质上就是函数的内存地址 def wrapper():passprint(wrapper) 1.引用是什么? 当我们定义a=1的时候,系统会开辟一块内存空间来保存1,然后用a变量名保存1所在的内 ...
- Python函数名的第一类对象及使用
函数名的第一类对象只是一种称呼,是相对于第二类对象而言的.我们目前用到的函数基本都是第一类对象. 函数名的第一类对象主要有四个方面的应用: 函数名可以当作值赋值给一个变量 函数名可以当做另一个函数的参 ...
最新文章
- Android电影票座位几排几列 数据获取
- R语言glmnet交叉验证选择(alpha、lambda)拟合最优elastic回归模型:弹性网络(elasticNet)模型选择最优的alpha值、模型最优的lambda值,最终模型的拟合与评估
- Qt中树形结构显示目录结构
- “数据库审计”关键词,重回Google第一位置
- 2019年,SD-WAN的回顾与展望
- 成功解决FileNotFoundError: [WinError 2] 系统找不到指定的文件。
- struts练习-表单提交
- 工业4.0的小小思考
- 清除error.log、access.log并限制Apache日志文件大小的方法
- java and dsl_Groovy语法糖以及DSL
- Mybatis(14)多表查询
- java三种功能加强模式
- [福大软工] Z班——Beta现场答辩反馈
- 多模光纤与单模光纤熔接及用哪种光模块的问题。
- 关于视频后期美白的一些事
- 体重 年龄 性别 身高 预测鞋码_用身高和体重数据进行性别分类的实验报告
- 《见识》----吴军博士,读书笔记
- 8种CSS3按钮动画特效【附源码】
- 论文笔记:Intention Oriented Image Captions with Guiding Objects
- Xshell密钥认证
热门文章
- 初次使用uwsgi:no python application found, check your startup logs for errors
- css3 Gradient背景
- 操作可能会破坏运行时稳定性的解决办法
- 为什么模板函数的声明和实现都放在.h文件中
- Response JSON数据返回
- nmon监控Linux服务器系统资源
- form表单target实现当前页表单提交而不进行跳转刷新
- tensorflow随笔——简单的循环神经网络分类实例
- 结合CmakeList来更好地理解windows下的动态库和静态库
- python解析xml存入字典_如何将xml字符串转换为字典?