11.Python初窥门径(函数名,可迭代对象,迭代器)
Python(函数名,可迭代对象,迭代器)
一、默认参数的坑
# 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是.
def func(a,l=[]):
l.append(a)
return l
print(func(1)) # [1]
print(func(2)) # [1,2]
print(func(3)) # [1,2,3]
二、函数名的应用
函数名指向的是函数的内存地址,加上()就执行这个函数
def func(args):
return args
print(func) # <function func at 0x00000000024656A8>
print(func(1)) # 1
函数名是一个变量
def age1(a):
return a
age2=age1
age3=age2
print(age3(1)) # 1
函数名可以作为容器类类型的元素
def func1():
print("in func1")
def func2():
print("in func2")
def func3():
print("in func3")
l=[func1,func2,func3]
print(l) # [<function func1 at 0x00000000024956A8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957B8>]
for i in l:
i()
# in func1
# in func2
# in func3
函数名可以作为函数的实参进行传参
def func(argv):
print(argv)
def func1():
print("in func1")
def func2(argv):
argv()
print("in func2")
a=1
func(a) # 1
func2(func1)
# in func1
# in func2
函数名可以作为函数的返回值
def func1():
print("in func1")
def func2(argv):
print("in func2")
return argv
ret=func2(func1)
print(ret)
# in func2
# <function func1 at 0x0000000001DF56A8>
三、可迭代对象
字面意思分析 : 可以重复迭代的实实在在的东西,list,dict,keys(),values(),tuple,str,set,range,文件句柄这些都属于可迭代对象
专业角度分析 : 内部含有'_ iter _'方法的对象,就是可迭代对象
内置函数 : dir()用来获取对象内部属性的方法,可用来判断对象是否符合可迭代要求.
优点 : 直观,操作方法较多
缺点 : 占用内存(字典除外),不能迭代取值,索引,字典key
四、迭代器
字面意思分析 : 可以重复迭代的工具
专业角度分析 : 内部含有'_ iter_ '并且含有'_ next _'方法的对象,就是迭代器
可迭代对象转化成迭代器用iter(),迭代器可以迭代取值,利用next()进行取值,迭代器一条路走到底,不走回头路
优点 : 非常节省内存,惰性机制
缺点 : 不直观,操作不灵活,效率相对低
l1=[1,2,3,4,5]
obj=iter(l1)
print(next(obj)) # 1
print(next(obj)) # 2
print(next(obj)) # 3
print(next(obj)) # 4
print(next(obj)) # 5
print(next(obj)) # 报错
利用while循环,模拟for循环内部循环可迭代对象机制
先要将可迭代对象转化成迭代器
利用next()对迭代器进行取值
利用异常处理try,处理报错
l1=[1,2,3,4,5]
l2=iter(l1)
while 1:
try:
print(next(l2))
except StopIteration:
pass
五、可迭代对象与迭代器对比
- 可迭代对象是一个操作比较灵活,直观,效率相对较高,但是比较占用内存的数据集
- 迭代器是一个非常节省内存,满足惰性机制,但是效率相对较低,操作不灵活的数据集
11.Python初窥门径(函数名,可迭代对象,迭代器)的更多相关文章
- Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器
Python进阶(三)----函数名,作用域,名称空间,f-string,可迭代对象,迭代器 一丶关键字:global,nonlocal global 声明全局变量: 1. 可以在局部作用域声明一 ...
- 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象
8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...
- Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归
Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...
- python迭代-如何使用生成器函数实现可迭代对象
如何使用生成器函数实现可迭代对象 问题举例: 实现一个可迭代对象的类,它能迭代出给定范围内 的所有素数: pn = PrimeNumbers(1, 30) for x in pn: print(x) ...
- python 迭代器(一):迭代器基础(一) 语言内部使用 iter(...) 内置函数处理可迭代对象的方式
简介 在 Python 中,所有集合都可以迭代.在 Python 语言内部,迭代器用于支持: 1.for 循环2.构建和扩展集合类型3.逐行遍历文本文件4.列表推导.字典推导和集合推导5.元组拆包6. ...
- python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。
1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...
- day12 python函数名的应用 闭包 迭代器
day12 python 一.函数名的应用(是第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 def func(): print('i am funct ...
- python 可迭代对象 迭代器 生成器总结
可迭代对象 只要有魔法方法__iter__的就是可迭代对象 list和tuple和dict都是可迭代对象 迭代器 只要有魔法方法__iter__和__next__的就是可迭代对象 生成器 只要含有y ...
- python14 1.带参装饰器 | wrapper 了了解 # 2.迭代器 ***** # 可迭代对象 # 迭代器对象 # for迭代器 # 枚举对象
## 复习 '''函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 ...
随机推荐
- 移动端 (H5) 调试工具 -- vconsole
最近在改一个移动端项目,在手机上调试贼头疼,什么日志都看不到,分析不了bug问题. 然后我同事给我介绍了一个移动端的调试神器 -- vconsole 有了这个神器,领导再也不用担心我的工作啦!!! 0 ...
- 用vector代替实现二维数组
vector可以用来模拟数组,当然也可以用来模拟二维数组: 定义如:vector<int>a[100]; 相当于定义了一个100行的数组,当每行的大小是不确定的 模板应用如下: #in ...
- Python爬虫 —— 抓取美女图片(Scrapy篇)
杂谈: 之前用requests模块爬取了美女图片,今天用scrapy框架实现了一遍. (图片尺度确实大了点,但老衲早已无恋红尘,权当观赏哈哈哈) Item: # -*- coding: utf-8 - ...
- python的模块导入问题
以下内容参考:http://www.xinxingjiaocheng.com/online/item/7/89 1.给模块起个别名 如果一个模块的名字很长很长,就像这样comput_the_value ...
- 虫草医药网站html模板
虫草医药网站html模板是一款宝王虫草医药网站模板html源码整站下载. 模板地址:http://www.huiyi8.com/sc/8783.html
- html5--1.10绝对路径和相对路径
html5--1.10绝对路径和相对路径 学习要点: 绝对路径和相对路径 1.绝对路径 需要指出链接资源的绝对位置,与你的HTML文档的位置无关: 1. 服务器中的位置:href="http ...
- tensorflow kmeans 聚类
iris: # -*- coding: utf-8 -*- # K-means with TensorFlow #---------------------------------- # # This ...
- OP趋势系统
经过3年多时间的摸索,经历过熊市牛市的历练,终于完成坚持已久的OP趋势系统的实践,接下来,我将在股灾后,每天都分享OP趋势系统的信号,可以很负责任的说,经过10年历史数据的测试,加上3年的实盘,更加坚 ...
- codeforces 609D D. Gadgets for dollars and pounds(二分+贪心)
题目链接: D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 mega ...
- <十七>UML核心视图动态视图之时序图
一:时序图 --->时序图是用于描述按时间顺序排列的对象之间的交互模式. --->它按照参与交互的对象所具有的“生命线”和他们相互发送的消息来显示这些对象. --->时序图包含对象和 ...