【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器
1, 函数名的应用,第一类对象
函数名可以像变量一样进行使用
1.赋值
def func():
print("你吃了么?")
# print(func)
# a = func # 函数名就是一个变量
# print(a)
# func()
# a() # 就是一个函数的调用
def a():
print("我吃了")
func = a
func()
2.作为list元素
a = 8
b = 7
c = 1
d = 3
lst = [a, b , c, d]
print(lst)
def f1():
print("我是马化腾")
def f2():
print("我是马云")
def f3():
print("我是马赛克")
def f4():
print("我是马蔚华")
lst = [f1(), f2(), f3(), f4()]
print(lst)
3.作为参数
# 还可以作为函数的参数
def func(food):
print("吃", food)
a = "火锅"
func(a)
def func(fn):
fn()
def gn():
print("我是火锅, 刚才有人要吃我")
func(gn) # 可以把函数作为参数, 传递给另一个函数
4.作为返回值
def func():
def inner():
print("火锅不让吃了. 吃了上火")
return inner
ret = func() # 这里func()执行之后获取到的是inner函数
ret() # 这里是让inner函数执行
2, 闭包
内部函数访问外部函数的局部变量.
好处:
1.安全
2.常驻内存. 提高效率
name = "wusir" # 变量写在全局是不安全的
def abc():
global name
name ="呵呵"
abc()
def func():
name = "alex" # 常驻内存 防止其他程序改变这个变量
def inner():
print(name) # 在内层函数中调用了外层函数的变量,叫闭包, 可以让一个局部变量常驻内存
return inner
ret = func()
ret() # 执行的是inner()
ret()
ret()
ret()
ret()
# 闭包的好处
from urllib.request import urlopen
def but():
content = urlopen("http://www.h3c.com/cn/").read()
def inner():
print("你好啊")
# return content # 在函数内部使用了外部的变量 . 闭包
print(inner.__closure__) # 查看inner是否是闭包, 如果有东西就是闭包, 没东西就不是闭包
return inner
print("加载中........")
fn = but() # 这个时候就开始加载校花100 的内容
# 后⾯需要⽤到这⾥⾯的内容就不需要在执⾏⾮常耗时的⽹络连接操作了
content = fn() # 获取内容
print(content)
content2 = fn() # 重新获取内容
print(content2)
3, 迭代器
可迭代对象(Iterable):内部包含__iter__().
迭代器(Iterator): 内部含有__iter__() __next__()
str, list, tuple, set, dict
f, range
s = "北京欢迎您"
for c in s:
print(c)
for i in 123:
print(i)
# 可迭代对象: str, list, tuple, set, f, dict
# 所有的以上数据类型中都有一个函数__iter__(), 所有包含了__iter__()的数据类型都是可迭代的数据类型 Iterable
# dir()来查看一个对象,数据类型中包含了哪些东西
lst = [1,2,3] # list
# print(dir(lst))
s = "王尼玛"
print("__iter__" in dir(s))
print("__iter__" in dir(lst))
print("__iter__" in dir(123))
list是一个Iterable.可迭代的
lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
获取迭代器
it = lst.__iter__()
# 迭代器往外拿元素. __next__()
print(it.__next__()) # 皇阿玛
print(it.__next__()) # 皇额娘
print(it.__next__()) # 容嬷嬷
print(it.__next__()) # 紫薇
print(it.__next__()) # 迭代到最后一个元素之后. 再进行迭代就报错了
lst = ["皇阿玛", "皇额娘", "容嬷嬷", "紫薇"]
# 模拟for循环
it = lst.__iter__()
while True:
try:
name = it.__next__()
print(name)
except StopIteration: # 拿完了
break
lst = [1, 2, 3]
from collections import Iterable # 可迭代的
from collections import Iterator # 迭代器
# isinstence(对象, 类型) 判断xx对象是否是xxx类型的
print(isinstance(lst, Iterable))
print(isinstance(lst, Iterator))
it = lst.__iter__()
print(isinstance(it, Iterable)) # 判断是否是可迭代的 迭代器一定是可迭代的
print(isinstance(it, Iterator)) # 迭代器里面一定有__next__(), __iter__()
print("__iter__" in dir(lst)) # 确定是一个可迭代的
print("__next__" in dir(lst)) # 确定不是一个迭代器
f = open("01 今日内容大纲",mode="r", encoding="utf-8")
print(isinstance(f, Iterable))
print(isinstance(f, Iterator))
迭代器的特点:
1.省内存
2.惰性机制
3.只能向前.
lst = ["哈哈", "呵呵"]
it = lst.__iter__()
it.__next__()
print(it.__next__())
print("我要吃黄瓜")
print(it.__next__())
【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器的更多相关文章
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- day12 python函数名的应用 闭包 迭代器
day12 python 一.函数名的应用(是第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 def func(): print('i am funct ...
- 11.Python初窥门径(函数名,可迭代对象,迭代器)
Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- 跟着太白老师学python day11 函数名的应用 globals(), locals()
1. 函数名就是内存地址 def func(): ') print(func) >>>> <function func at 0x00000000003DC1E0> ...
- day 12 函数名的应用 闭包 迭代器
今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 #再函数名后面添加() 才是对函数的调用, 否则打印的是函数的内存地址 1.赋值 2.作为list元素 3.作为参数 d ...
- 学习笔记《简明python教程》
学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
随机推荐
- Python 将一个已知的 utc时间字符串 转换为东八区时间
先获取一个utc格式的时间 utc_time = datetime.datetime.utcnow() print(utc_time) 输出 2018-06-24T08:59:39Z 这里我们假设目前 ...
- Kafka Java 客户端开发
依赖包导入 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.1 ...
- webpack快速入门——实战技巧:webpack模块化配置
首先在根目录,新建一个webpack_config文件夹,然后新建entry_webpack.js文件,代码如下: const entry ={}; //声明entry变量 entry.path={ ...
- Swinject 源码框架(一):基本原理
 核心是 Container类.它提供了两类方法,register 和 resolve. 为了找到在 resolve 时,能够找到对应的方法,内部维护了一个叫做services 的字典.key 是根 ...
- TCP-IP 端口号
FTP服务器的TCP端口号 21 Telnet服务器的TCP端口号 23 TETP(简单文件传输协议)服务器的UDP端口号 69 任何TCP/IP实现所提供的服务都用1-1023之间的端口号 至 ...
- POJ 2301
#include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("a ...
- POJ 1129
#include<iostream> #include<stdio.h> #include<string> #define MAXN 60 using namesp ...
- web前端导出csv文件
前言 导出文件,使用最多的方式还是服务器端来处理.比如jsp 中使用response 的方式. 但是,有时候可能就想使用web 前端是否也可以把页面上的内容导出来呢? 比如说,导出页面的一个表格. 这 ...
- (转)inspect — Inspect live objects
原文:https://docs.python.org/3/library/inspect.html 中文:https://www.rddoc.com/doc/Python/3.6.0/zh/libra ...
- NMS—卷积神经网络
1-传统的NMS NMS,非极大值抑制,在很多计算机视觉问题中有着重要应用,尤其是目标检测领域. 以人脸检测为例,通常的流程为3步: (1)通过滑动窗口或者其它的object proposals方法产 ...