Day11--Python--函数名,闭包,迭代器
通过 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--函数名,闭包,迭代器的更多相关文章
- python中的函数名,闭包,迭代器
一.函数名 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量,单纯print()出的是一个内存地址. def func(): print('你说你有点难追') print(func ...
- python --- 11 第一类对象 函数名 闭包 迭代器
一 .函数名的运用 ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址 ③ 函数名可以赋值给其他变量 ④函数名可以当做容器类 ...
- python之路---11 第一类对象 函数名 闭包 迭代器
二十九. 1.函数名的运用 ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址 ③ 函数名可以赋值给其他变量 ④函数名可以当 ...
- day_10 函数名,闭包,迭代器
1. 函数名的使用 1.函数名是一个变量,函数名储存的是函数的内存地址 2.函数名可以赋值给其他变量 3.函数名可以当容器类对象的元素 4.函数名可以当其他函数的参数 5.函数名可以做函数的返回值 2 ...
- python day11 ——1. 函数名的使⽤ 2. 闭包 3. 迭代器
⼀. 函数名的运⽤. 1.函数名的内存地址 def func(): print("呵呵") print(func) 结果: <function func at 0x11 ...
- Python基础之 函数名,闭包,和迭代器
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
- python基础 (函数名,闭包,和迭代器)
1.函数名作用 函数名本质上就是函数的内存地址或对象. 1.可以被引用 2.可以被当作容器类型的元素 3.可以当作函数的参数和返回值 4.如果记不住的话,那就记住一句话,就当普通变量用 2.闭包 什么 ...
- python之函数名,闭包、迭代器
一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...
- day12 python函数名的应用 闭包 迭代器
day12 python 一.函数名的应用(是第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 def func(): print('i am funct ...
随机推荐
- 从主机A得到id_rsa.pub文件,在主机B创建用户danny加入该文件,实现主机A免密登录主机B
操作步骤: 1.主机A 生成公钥id_rsa.pub文件并导出该文件 root@mytest:~# ssh-keygen Generating public/private rsa key pair. ...
- RestTemplate proxy 设置方式
RestTemplate restTemplate = new RestTemplate(new SimpleClientHttpRequestFactory() {{ setProxy(new ja ...
- linux硬盘的分区、格式化、挂载以及LVM
linux硬盘的分区.格式化.挂载以及LVM 多块硬盘的组合: 硬盘分两种:ide和scsi. ide硬盘: /dev/hda 第一块IDE硬盘 /dev/hdb 第二块IDE硬盘 ... /de ...
- linux 地址解析协议 arp
随便转载,保留出处:http://www.cnblogs.com/aaron-agu/ arp –na #查看 arp –s 123.253.68.209 00:19:56:6F:87:D4 #添加
- 错误模块名称: KERNELBASE.dll错误
今天在部署一个C/S程序的时候出了bug,日志都没有记载:本地调试当然是没问题的,所以不是代码问题,百度之发现KERNELBASE.dll这个文章说的比较靠谱,仔细研究了自己的配置文件后,果然是配置文 ...
- 一、VScode构建.NET应用程序
一.准备工具 1.安装.NET SDK(软件开发工具包) https://microsoft.com/net/core 2.安装VScode并安装 3.安装VS Code C# extension(即 ...
- 【python练习题】程序4
# 题目:输入某年某月某日,判断这一天是这一年的第几天? import time year = input('输入年份: \n') month = input('输入月份: \n') day = in ...
- Microsoft Azure Machine Learning Studio
随着机器学习(ML)成为软件行业的主流,重要的是要了解它的工作原理,并将其置于开发栈中.了解如何为您的应用程序构建ML服务,您可以确定您的ML应用程序中的机会,实施ML,并与您的团队的ML专业人士清楚 ...
- 配置Web.config 元素CustomErrors
一.customErrors 元素 属性 说明 defaultRedirect 指定出错时将浏览器定向到的默认 URL.如果未指定该属性,则显示一般性错误. 可选的属性. URL 可以是绝对的(如 w ...
- hdu-3294(最长回文子串)
题意:给你一个字符和一个字符串让你求出最长回文子串并且输出来,答案需要根据给出的字符转换一下,就是将给出的字符认定为a,然后依次向后推: 解题思路:manacher模板+一些处理 代码: #inclu ...