从入门到自闭之Python三大器--迭代器
函数名的第一类对象(概述):
使用方式:
函数名可以当做值赋值给变量
def func():
print(1)
print (func) #查看函数的内存地址
a = func
print (a) #
函数名可以当做容器中的元素
dic = {"1":login,"2":register,"3":index}
msg = """
1 登录
2 注册
3 主页
"""
choose = input(msg) # 1
if choose.isdecimal():
if dic.get(choose):
dic[choose]()
else:
print("请正确输入!")函数名可以当做函数的参数
def fuc(a):
a()
print(111)
def foo():
print(222)
def f1()
print(333)
fun(f1)
foo()
函数名可以当函数的返回值
def func():
def foo():
print(111)
return foo
a = func()
a()
func()() #foo()
输出结果:111
111
进阶题:
def foo(a):
def func(a):
def f1(a):
print(a)
return "aelx"
return f1(a)
return func(a)
print(foo(5))
输出结果: 5 ,alex
def func(a):
a()
def foo(b):
return b()
def f1(c):
def a():
def f3():
print(3333)
return [f3,a,f1]
print(11)
return f3()
return c(a())
def aa(b):
print(111)
return b
print(f1(aa))
输出结果:
11
3333
111
[<function f1.<locals>.a.<locals>.f3 at 0x00000187D0649C80>, <function f1.<locals>.a at 0x00000187D0649BF8>, <function f1 at 0x00000187D0649AE8>]
def f1(c):
def a():
def f3():
print(3333)
return [f3,a,f1]
print(11)
return f3()
ret = a()
return c(ret)
def aa(b):
print(111)
return b
print(f1(aa))
f-strings
f"{变量名}"
F"{变量名}"
f"""{变量名}"""
print(F"姓名:{input('name:')} 年龄:{input('age:')}")
def foo():
print("is foo")
lst = [1,2,3,4]
dic = {"key1":23,"key2":56}
print(f"""{dic['key1']}""")
print(f"{3+5}")
print(f"{3 if 3>2 else 2}")
print(f"""{':'}""")
msg = f"""{{{{'alex'}}}}""" #必须是偶数
print(msg)
name = "alex"
print(f"{name.upper()}")
print(f"{':'}")
迭代器:是基于上一次停留的位置,进行取值
可迭代对象:
list,tuple,str,set,dict取值方式只能直接看、
只要具有__ iter __()方法就是一个可迭代对象
lst = [1,23,4,5]
for i in lst:
print(i)lst = [1,2,3,4]
lst.__iter__()
dict.__iter__()
迭代器:工具
具有__ iter __ () 和 __ next __ () 两个方法才是迭代器
lst = [1,2,3,4,5]
l = lst.__iter__() # 将可迭代对象转换成迭代器 l.__iter__() # 迭代器指定__iter__()还是原来的迭代器
print(l.__next__()) # 1
print(l.__next__()) # 2
for循环的本质(重点):
while True:
try: #异常处理机制
print(l.__next__())
except StopIteration: #接收到异常提醒就终止
breaklst = []
for i in range(10000):
lst.append(i) l = lst.__iter__() for i in range(16):
print(l.__next__()) print(''.center(50,"*")) for i in range(16):
print(l.__next__()) print(''.center(50,"*"))
for i in range(16):
print(l.__next__())优点:
- 惰性机制:节省空间
缺点:
- 不能直接查看值 -- 迭代器查看到的是一个迭代器的内存地址
- 一次性,用完就没了
- 不能逆行,后退,只能继续执行下一条
空间换时间:容器存储大量的数据,取值快,占用空间大
时间换空间:迭代器就是一个节省了空间,但是取值慢
可迭代对象:具有 iter() 方法的就是一个可迭代对象
迭代器:具有 iter()和next()方法就是一个迭代器
python2和python3中的区别:
- python 3
- iter ()和 __ iter __() 都有
- next () 和 __ next __ () 都有
- Python 2
- iter ()和 __ iter __()
- next ()
- python 3
从入门到自闭之Python三大器--迭代器的更多相关文章
- 从入门到自闭之Python三大器--生成器
1.什么是生成器 核心:生成器的本质就是一个迭代器 迭代器是python自带的的 生成器是程序员自己写的一种迭代器 编写方式: 基于函数编写 推导式编写 def func (): print(&quo ...
- 从入门到自闭之python三大器--装饰器进阶
装饰器的进阶 有参装饰器: # def warpper(func): # def inner(*args,**kwargs): # user = input("user:") # ...
- 从入门到自闭之python三大器--装饰器
开放封闭原则:在不修改源代码及调用方式,对功能进行额外添加就是开放封闭原则 开放:对代码的扩展进行开发 封闭:修改源代码 装饰(额外功能) 器:工具(函数) 普通版: # print(time.tim ...
- Python - 三大器 迭代器,生层器,装饰器
目录 Python - 三大器 迭代器,生层器,装饰器 一. 容器 二. 可迭代对象(iterable) 三. 迭代器 四. 生成器 五. 装饰器 1. 定义 六. 闭包 Python - 三大器 迭 ...
- 详解python三大器——迭代器、生成器、装饰器
迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结果作为下一次迭代的初始值). 可迭代对象(i ...
- Python 入门之 Python三大器 之 装饰器
Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...
- Python 入门之 Python三大器 之 生成器
Python 入门之 Python三大器 之 生成器 1.生成器 (1)什么是生成器? 核心:生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func( ...
- Python 入门之 Python三大器 之 迭代器
Python 入门之 Python三大器 之 迭代器 1.迭代器 (1)可迭代对象: <1> 只要具有__ iter __()方法就是一个可迭代对象 (我们可以通过dir()方法去判断一个 ...
- python三大器
装饰器 装饰器的作用: 装饰器的本质:一个闭包函数 (高阶函数+嵌套函数) 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 闭包原理 装饰器执行流程 带多个参数函数 import ...
随机推荐
- cogs157. [USACO Nov07] 奶牛跨栏 x
157. [USACO Nov07] 奶牛跨栏 ★★ 输入文件:hurdles.in 输出文件:hurdles.out 简单对比时间限制:1 s 内存限制:128 MB 译 by Cm ...
- HGOI20190809 省常中互测2
Problem A 时之终结 构造一个含有$n$个节点的无重边无自环的有向图, 使得从$1$出发,每一次经过一条$(u,v) (u < v)$的边到达节点$n$的方案恰好有$y$种. 对于$10 ...
- 微信支付(公众号)爬坑记,包含 total_fee 失败和 JSAPI 签名验证失败等等
做商城类网站不免会需要做支付功能,目前在中国大陆通用的做法就是使用支付宝支付和微信支付,上一篇博文已经讲个支付宝支付. 这篇文章来讲一讲微信支付,微信支付的方式有很多种,本文主要讲 JSAPI 支付的 ...
- [LOJ3119][CTS2019|CTSC2019]随机立方体:组合数学+二项式反演
分析 感觉这道题的计数方法好厉害.. 一个直观的思路是,把题目转化为求至少有\(k\)个极大的数的概率. 考虑这样一个事实,如果钦定\((1,1,1),(2,2,2),...,(k,k,k)\)是那\ ...
- Spring Boot教程(三十二)多数据源配置与使用(1)
之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.propertie ...
- #pragma once vs #ifndef
最后编辑: 2019-11-20 #pragma once 是一个非标准但被广泛支持的预处理符号, 其主要作用是防止文件重复引入问题. 在头文件中,可以定义 #pragma once 或者 #ifnd ...
- [CSP-S模拟测试]:装饰(状压DP)
题目传送门(内部题114) 输入格式 第一行一个正整数$n$. 接下来一行$n-1$个正整数,第$i$个数为$f_{i+1}$. 接下来一行$n$个数,若第$i$个数为$0$则表示林先森希望$i$号点 ...
- pip & conda 换源
conda换源方法具体参考清华大学镜像站Anaconda 镜像使用帮助 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn ...
- IDEA配置常见配置
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- python3笔记一:python基础知识
一:学习内容 注释 输入输出 标识符 变量和常量 二:注释 1. 单行注释 #:一个井号,代表我注释了这一行 2.多行注释 ''' ''':注释多行,三个单引号 3.多行注释 "" ...