1.迭代器

可迭代的:能够被for循环都是可迭代的,诸如:列表、元组、集合、字典、字符串等

from collections import Iterable

l = [1, 2, 3, 4]

t = (1, 2, 3, 4)

d = {1: 2, 3: 4}

s = {1, 2, 3, 4}

print(isinstance(l, Iterable))

print(isinstance(t, Iterable))

print(isinstance(d, Iterable))

print(isinstance(s, Iterable))

// 输出结果:

True

True

True

True

可迭代协议:内部实现了__iter__方法

print("__iter__" in dir(l))

print("__iter__" in dir(t))

print("__iter__" in dir(d))

print("__iter__" in dir(s))

// 输出结果:

True

True

True

True

迭代器:是访问集合的一种方法,拥有_inter_和_next_方法

a = iter(l) # iter()方法生成迭代器,参数必须是可迭代对象;iter()方法等同"__iter__()"

print(a)

while true:

try:

print(next(a)) # next()方法对迭代器取值,等同于"__next__()"

except StopInteration:

break

// 输出结果:

# 列表迭代器内存地址

1

2

3

4

特点:

1.访问者不需要关心迭代器内部结构,仅需要通过next()方法不断去取下一个内容

2.不能够随机访问集合中的某个值,只能够从头到尾依次访问且不能回退

3.便于循环比较大的数据集合,节省内存

总结:能够被for循环肯定是可迭代对象,但不一定是迭代器

备注:关于for循环是基于迭代器协议的一种遍历方法,先调用可迭代对象的iter()方法将其转化成迭代器,然后使用迭代器协议去实现循环访问

2.生成器

本质:迭代器

定义:一个函数调用时返回一个迭代器,那这个函数就是生成器;如果该函数中包含yield语法,则这个函数会成为生成器函数

生成器函数:一个包含yield语法的函数,yield可以从函数中返回值,不同return(程序结束),调用生成器函数会得到可迭代的对象,每一次获取这个可迭代对象的值,就能推动函数的执行,获取新的返回值,直到函数结束(关于send()方法相同并传递给上一个yield)

列表推导式:list1=['学生%s' %i for i in range(10)]

生成器表达式:list1=('学生%s' %i for i in range(10)])

1.把列表解析的[]换成()得到的就是生成器表达式

2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

3.装饰器

本质:一个闭包函数

功能:在不改变原函数的调用情况下对原函数功能进行扩展

闭包:在一个外函数中定义一个内函数,内函数引用外函数的临时变量,并且外函数的返回值是内函数

闭包函数:内部函数对外部作用域而非全局作用域的引用,该内部函数称之为闭包函数

闭包好处:可以读取函数内部的变量,这些变量的值始终保持在内存中,不会因为外函数调用后回收

装饰器格式:

from functools import wraps

def decorator(func):

@wraps(func) # 帮助查看函数信息的方法

def inner(*args,**kargs):

print("before...")

res = func(*args,**kargs)

print("after...")

return res

returen inner

def sum(a,b):

return a+b

# 使用语法糖:

@decorator ==> sum = decorator(sum) = inner

res_sum = sum(1,2) ==> res_sum = inner(1,2)

多个装饰器:

def wrapper1(func):

def inner():

print('wrapper1 ,before func')

func()

print('wrapper1 ,after func')

return inner

def wrapper2(func):

def inner():

print('wrapper2 ,before func')

func()

print('wrapper2 ,after func')

return inner

@wrapper2

@wrapper1

def f():

print('in f')

f()

// 输出结果:按语法糖顺序优先执行before内容,再去执行after内容

wrapper2 ,before func

wrapper1 ,before func

in f

wrapper1 ,after func

wrapper2 ,after fun

python怎么接外活_Python三大活器相关推荐

  1. python设置mysql外键_python基础教程之MySQL数据库之-foreign key 外键(一

    今日重点:外键 一对多 多对多 一对一 -------------------------------------------------------------------------------- ...

  2. python爬虫40个项目_python三个爬虫项目代码实例

    本篇文章小编给大家分享一下python三个爬虫项目代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 爬取内涵段子: #encoding=utf-8 import ur ...

  3. python比较两个二进制文件_python三种方法判断文件是否为二进制文件

    两种方法判断文件是否为二进制文件,最准确的就是把这两种方法结合起来. (1)方法一: 它首先检查文件是否以BOM开始,如果不在初始8192字节内查找零字节: import codecs file_pa ...

  4. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  5. python闭包函数使用教程_Python闭包装饰器使用方法汇总

    闭包内容: 匿名函数:能够完成简单的功能,传递这个函数的引用,只有功能 普通函数:能够完成复杂的功能,传递这个函数的引用,只有功能 闭包:能够完成较为复杂的功能,传递这个闭包中的函数以及数据,因此传递 ...

  6. python编程模式是什么_python 开发的三种运行模式详细介绍

    Python 三种运行模式 Python作为一门脚本语言,使用的范围很广.有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程.不管怎么说,怎么使用python既取决于 ...

  7. python三大器_Python - 三大器 迭代器,生层器,装饰器

    Python - 三大器 迭代器,生层器,装饰器 在介绍三大器之前先来了解一下容器和可迭代对象... 一. 容器 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, ...

  8. 以下()不是python的数值运算操作符_Python学习(三)——Python的运算符和数值、字符的类中方法...

    Python开发IDE PyCharm,eclipse PyCharm的基础用法 全部选中后 Ctrl+?全部变为注释 运算符 结果为值的运算符 算术运算符: + - * / % // ** 赋值运算 ...

  9. python输入一个三位数_Python 三位一并法

    这两天帮同学解了一些题目,这里总结一下算法. 0x00 题目 请写一个 Python 程序实现实数的「三位一并法」与「四位一并法」.输入一个八进制小数,利用三位一并法将其转换为二进制实数,并输出,再利 ...

最新文章

  1. pymysq向mysql写数据 为什么本地无法查看_从运维角度浅谈MySQL数据库优化,中小企业DBA必会...
  2. SLS:海量日志数据管理利器
  3. 160个Crackme032用ProcessMonitor拆解KeyFile保护
  4. kepler架构GPU新特性--HyperQ
  5. 合肥.NET俱乐部第二期技术沙龙活动预告
  6. ssm使用全注解实现增删改查案例——web.xml
  7. java 冒泡排序的三种写法_冒泡排序的三种实现(Java)
  8. Git使用-.gitignore文件(使一些文件不上传到git)
  9. fast软件_ChinaSoft 2020论坛巡礼 : 系统软件安全技术论坛
  10. 缓存框架 EhCache 使用 2
  11. 基于java+ssm的企业员工考勤系统
  12. 系统分析与设计 HW9
  13. 使用Vendor NDK实现Android Camera preview
  14. 基于XQ6657Z35-EVM开发平台上TI TMS320C6657 TLV320AIC3206音频设计
  15. 转--各种文件后缀名与打开方式大全
  16. 很有意思的几个考验知识广度的问题
  17. 2020计算机考试内容,2020年全国计算机二级OFFICE考试内容
  18. Python-数据类型考试题分析
  19. 微信小程序——推荐简洁和高可用性的插件WxP UI
  20. word中如何在方框中打钩

热门文章

  1. SAP CRM WebClient UI如何将后台存储的timestamp时间戳转换成本地时间
  2. SAP云平台API portal里的discover all功能
  3. SAP CRM中间件调试的一些重要方法
  4. SAP gateway currency transformation from string to ABAP format - deserialization
  5. SAP WebIDE destination的 discovery工作机制 -下拉菜单项是如何被填充的
  6. ABAP作为一门编程语言,是否过时了呢?
  7. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式
  8. 如何从S4HANA的销售订单找到对应的生产订单
  9. highroller赌城java下载,非常有用的链接
  10. dockerhub 拉取地址_DockerHub 镜像仓库的使用详解