通过 lst.__iter__()拿到lst.的迭代器

1.函数名第一类对象
函数名就是变量名
1.函数名可以像变量一样互相赋值.
2.可以作为函数的参数,进行传递
3.可以作为返回值返回
4.可以作为集合的元素进行存储
-----------------------------------------------------
def 函数名(形参):
  函数体 函数名(实参) # ()表示调用 #实参必须和形参对得上 函数名的内存地址:
def func():
print('呵呵')
print(func) 结果:
<function func at 0x1101e4ea0>
-----------------------------------------------------
def func_1():
print("这⾥是函数1")
def func_2():
print("这⾥是函数2")
print("这⾥是函数1")
return func_2 fn = func_1() # 执⾏函数1. 函数1返回的是函数2, 这时fn指向的就是上⾯函数2
fn()
-----------------------------------------------------
----------------------------------------------------- 2.闭包(函数的嵌套,返回函数名)
闭包:内层函数对外层函数(非全局)的变量的引用
用__closure__检测函数是否闭包 函数名.__closure__返回cell就是闭包,返回None就不是闭包 作用:
1.保护变量
2.常驻内存
基本写法:
def outer():
a = 10
def inner():
return a
return inner -----------------.__closure__检测函数是否闭包------------------------------------
def func1():
name = "alex"
def func2():
print(name) # 闭包
func2()
print(func2.__closure__) # (<cell at 0x10c2e20a8: str object at
0x10c3fc650>,)
func1() ----------------在函数外调用内部函数-----------------------------
def outer():
name = 'alex'
def inner(): #内部函数
print(name)
return inner fn = outer() #访问外部函数,获取到内部函数的函数地址
fn() #访问内部函数
-------------------多层嵌套--------------------------
def func1():
def func2():
def func3():
print('嘿嘿')
return func3
return func2 func1()()() ----------------------------------------------------- 3.迭代器
1. Iterable: 可迭代对象. 内部包含__iter__() 函数
2. Iterator: 迭代器. 内部包含__iter__() 和 __next__() 函数 特点:
1.节省内存
2.惰性机制(只有执行__next__()才会取值)
3.只能向前,不能反复 dir() 查看数据可以执行的方法,查看内置属性
isinstance() 判断XX对象是否是XXX类型
-------------------------dir()----------------------------
print(dir(dict))
print(dir(open('a.txt'))) #打印内容有 __iter__表示可迭代, 对象中有__iter__代表对象遵守可迭代协议
   print('__iter__' in dir(str)) #可迭代True,不可迭代False
----------------------isinstance()-------------------------------
l = [1, 2, 3]
l_iter = l.__iter__() #__iter__()获取迭代器
from collections import Iterable
from collections import Iterator
print(isinstance(l, Iterable)) # True
print(isinstance(l, Iterator)) # False
print(isinstance(l_iter, Iterable)) # True
print(isinstance(l_iter, Iterator)) # True ----------------------------------------------------------------------------
# 迭代器给所有的数据类型提供了一种统一的遍历的方式(可迭代协议), Iterable, __iter__()
# lst = [1, 2, 3, 4, 5]
# # print("__iter__" in dir(lst))
# # print("__next__" in dir(lst)) -----------用迭代器中的__next__()获取迭代器中的元素------------------------------------------
s = '我爱健身'
c = s.__iter__() #获取迭代器
print(c.__next__()) #使用迭代器进行迭代,获取第一个元素 我
print(c.__next__()) #爱
print(c.__next__()) #健
print(c.__next__()) #身
print(c.__next__()) #StopIteration --------------※※使用while循环和迭代器模拟for循环※※重要,必须掌握---------------------------------------
# for i in [1, 2, 3]:
# print(i) lst = [1, 2, 3]
lst_iter = lst.__iter__()
while 1:
try:
i = lst__iter.__next__()
print(i)
except StopIteration:
break ----------------------------------------------------- for循环内部用的是迭代器
lst = [1, 2, 3]
it = lst.__iter__()
while1:
try:
it.__next__()
except StopIteration:
break -------函数名可以当做函数的参数------------------------------------
def func1():
print("我是一个单纯的函数") def func2(abc): # abc接收到的是一个函数的内存地址
abc() # 执行func1, func1()
print("我是func2", abc) # a = "苹果" func2(func1)
-----------------------------------------------------
# def panpan():
# print("我是潘潘. 我喜欢 ")
#
# def xiaoping():
# print("我是小萍萍. 我喜欢 ")
#
# def xiaohua():
# print("我是小花花. 我喜欢 ")
#
# def daguanren():
# print("大官人喜欢xxxx")
#
# def wangpo(nv, nan): # 核心业务逻辑
# nv()
# nan()
#
# wangpo(xiaohua, daguanren) # 王婆代理了大官人和潘潘 ----------------------查找初始函数名 .__name__ -------------------------------
def chi():
print("我是吃") a = chi
haha = a
hehe = haha
bilibili= hehe bilibili()
print(bilibili.__name__) # 函数名
-----------------------------------------------------
在外界访问内部函数,函数执行完毕后临时空间消失.在内部函数中访问外层函数
中的变量,那这个变量将不会消亡,将会常住内存中,供后面的的程序使用.
# 闭包的应用.保护变量, 常驻内存
from urllib.request import urlopen def func():
# 闭包. content会常驻内存
content = urlopen("http://www.xiaohuar.com/").read()
def inner():
return content
return inner print("加载中...")
g = func() # 网络请求
print("加载完毕")
print(g())
print(g())
print(g()) -----------------------函数的注释------------------------------
def play(wanjv1, wanjv2, wanjv3):
'''
这是一个表示玩儿的函数,可以玩玩具1,玩具2,玩具3,返回心情
:param wanjv1: 玩具1
:param wanjv2: 玩具2
:param wanjv3: 玩具3
:return: 开心
'''
print("我要玩儿荡秋千")
return "开心" # play("独木桥", "独轮车", "独眼龙")
print(play.__doc__) # document 查看注释
print(str.join.__doc__)
-----------------------------------------------------

Day11--Python--函数名,闭包,迭代器的更多相关文章

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

    一.函数名 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量,单纯print()出的是一个内存地址. def func(): print('你说你有点难追') print(func ...

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

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

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

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

  4. day_10 函数名,闭包,迭代器

    1. 函数名的使用 1.函数名是一个变量,函数名储存的是函数的内存地址 2.函数名可以赋值给其他变量 3.函数名可以当容器类对象的元素 4.函数名可以当其他函数的参数 5.函数名可以做函数的返回值 2 ...

  5. python day11 ——1. 函数名的使⽤ 2. 闭包 3. 迭代器

    ⼀. 函数名的运⽤. 1.函数名的内存地址 def func():    print("呵呵") print(func) 结果: <function func at 0x11 ...

  6. Python基础之 函数名,闭包,和迭代器

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

  7. python基础 (函数名,闭包,和迭代器)

    1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...

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

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

  9. day12 python函数名的应用 闭包 迭代器

    day12 python   一.函数名的应用(是第一类对象)     函数名的命名规范和变量是一样的     函数名其实就是变量名 def func():     print('i am funct ...

随机推荐

  1. MySQL系列:视图基本操作(3)

    1. 视图简介 1.1 视图定义 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表. 视图可以从已存在的视图的基础上定义. 数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表 ...

  2. Javaweb小结之——JavaBean+持久层

    数据持久层学习了JDBC.连接池以及DBUtil 思考一下,在学会使用SSM框架之前,还是先多使用DBUtil吧 数据库持久层的JDBC.连接池和DBUtil,这个链接给我了一些参考https://b ...

  3. css多列居中

    https://jingyan.baidu.com/article/36d6ed1f67d58f1bcf488393.html

  4. java静态工厂

    本文摘自:https://www.jianshu.com/p/ceb5ec8f1174 本文略长,所以先来个内容提要 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器 ...

  5. 一、VS2017支持Github

    选择 工具-->扩展和更新,搜索GitHub,安装GitHub的VS插件 安装完插件,打开视图-->团队资源管理器,我们可以看到Git插件菜单.通过菜单我们可以新建Git存储库,可以提交修 ...

  6. NC部门考勤月报定制sql

    SELECT t_1.pk_psndoc pk_psndoc, t_1.pk_group pk_group, t_1.pyear pyear, t_1.month month, t_1.code ps ...

  7. Root test & Ratio test

    几何级数(Geometric Series/Geometric Progression) Root test与Ratio test都依赖于几何级数求和理论,因此这里先讨论该理论. 在数学上,几何级数, ...

  8. Nginx 完整安装篇

    第一步安装各种编译库如c++编译库等 yum install -y gcc //安装GCC ...安装过程省略 yum install -y gcc-c++ //安装C++库用来编译c++ ...安装 ...

  9. Civil 3d设置横断面图样式

    一位网友提出这样一个问题: 在使用SectionView.StyleName属性时, 会抛出异常:need to override property StyleName. 我测试的结果一样, 同时测试 ...

  10. HTC Vive 基础入门 基于Unreal Engine 4引擎

    主要以讲解介绍HTC Vive设备以及Unreal继承的Steam VR Plugin为主 使用最新的虚幻引擎与Plugin完成VR环境的搭建 然后完成一个基本的VR Games. 任务5: 04-配 ...