Python全栈-day12-day13-函数4
1.迭代器
1)定义:迭代取值的工具
2)优缺点
优点
a.提供一种不依赖索引取值的方法
b.同时一时刻内存在存在的值只有一个,更加省内存
缺点
a.取值麻烦,只能通过next方法一个一个地往后取
b.一次性读取,无法用len()读取
3)可迭代对象
在python中,但是内置有__iter__方法的对象,如列表、字典、字符串、元组、集合、文件,都是迭代对象
# 字符串
shs = 'hello'
iter_shs=shs.__iter__()
# 利用try进行异常处理
while True:
try:
print(iter_shs.__next__())
except Exception as e:
print('end...')
break
# 文件
file = open(r'db.txt','rt',encoding='utf-8')
file_iter = file.__iter__()
while True:
try:
print(file_iter.__next__(),end='')
except StopIteration:
break
补充知识:
for循环原理:for循环称之为迭代器循环,in后面跟的必须是可迭代对象!!!
循环的过程实际上是通过调用next方法,从迭代器中把值一个一个地取出来
2.生成器
1)定义:函数体内包含yiled的函数
2)满足以上条件时,再次调用函数不会执行函数体内的代码,拿到的返回值就是一个生成器,生成器的本质就是迭代器,拿到的返回值就是一个生成器对象
总结:
1)提供一种自定义的迭代器的方式
可在函数内用关键字yiled,调用函数拿到的结果就是一个生成器即迭代器
2)yiled可以向return一样用于返回值,区别是return只能返回一次,而yiled可但会对次,因为yiled可保存函数执行的状态
def func():
print('first yield...')
yield 1
print('first second...')
yield 2
print('first third...')
yield 3 # func()
# 查看func的类型
print(type(func)) yield_iter = func().__iter__()
print(yield_iter.__next__())
print(yield_iter.__next__())
3.三元表达式
# 三元表达式实现
# 1)
x = 10
y=13
res = x if x>y else y
print(res) # 2)
def max(x,y):
return x if x>y else y
print(max(22,33))
3.函数递归调用
1)在函数调用的过程中,直接或者间接地调用自身
Python中默认最大递归次数为1000
# 查看Python内置的递归调用次数
import sys
print(sys.getrecursionlimit())
# 更改可递归次数
sys.setrecursionlimit(100)
print(sys.getrecursionlimit())
2)递归的两个阶段
a.回溯
b.递推
注意:一定要满足某种条件下结束回溯,否则递归到最大可递归次数
因此递归一定要有明确的结束条件!!!
# 直接调用
def bar():
print('from bar...')
bar()
bar() # 间接调用
def bar1():
print('from bar...')
foo()
def foo():
print('from foo...')
bar1()
try:
bar1()
except Exception as e:
print('超出递归次数')
4.匿名函数lambda
1)定义
匿名的目的就是没有名字,就给匿名函数赋给另外一个值
匿名函数的参数规则、作用域关系与有名函数一样
匿名函数的函数体通常是一个表达式
func=lambda x,y,z=1:x+y+z
print(func(1,2,3))
2)常用到匿名函数的内置方法
# max min sorted map filter reduce
salaries = {
'egon':20000,
'zhang':15000,
'alex':25000,
'boo':15100}
# 求工资最高的 max
print(max(salaries,key=lambda x:salaries[x]))
# 求工资最低的 min
print(min(salaries,key=lambda x:salaries[x])) # 排序 sorted
# 倒序
print(sorted(salaries,key=lambda x:salaries[x],reverse=True))
# 升序
print(sorted(salaries,key=lambda x:salaries[x])) # 重点!!!!!
# 映射 map
nums = [1,5,6,4,8,9]
res = map(lambda x:x*2,nums)
print(list(res)) names = ['zhang','alex','egon','boo']
res = map(lambda x:x+'_sb',names)
print(list(res))
res = map(lambda x:x+'_haha' if x == 'egon' else x+'_sb',names)
print(list(res)) # 合并 reduce
from functools import reduce
res = reduce(lambda x,y:x+y,range(1,101),0)
print(res) l = ['my','name','is','alex','is','sb']
res = reduce(lambda x,y:x+' '+y,l)
print(res) # filter
names = ['zhang_SB','alex_SB','egon_SB','boo']
# 过滤出指定格式
res = filter(lambda x:x.endswith('_SB'),names)
print(list(res)) ages = [7,8,9,10,55,33,10,20,66,44]
res = filter(lambda x:x>30,ages)
print(list(res)) info = {
'zhang1':18,
'zhang2':19,
'zhang3':22
} # # max取出一个值,filter可过滤出多个值
res = filter(lambda x:info[x] < 20,info)
print(list(res))
其他内置方法:
# abs() 把负值转换成正值
print(abs(-1)) # 判断对象是否可调用
print(callable(len)) # 全为真则真
print(all([1,'a',True,{'name':'zhang'}])) # 一个为真则为真
print(any([0,'a',False,{'name':'zhang'}])) # 进制转换
# 十进制转二进制、八进制、十六进制
print(bin(10))
print(oct(10))
print(hex(10)) # 将字符串转换成bytes类型
res = '你好egon'.encode('utf-8')
print(res)
res = bytes('你好egon',encoding='utf-8')
print(res) # 根据ascii表的对应关系将数字转换成数字或者字母转成数字
print(chr(90))
print(ord('Z')) # 查看对象可以调用的内置方法
print(dir('ass')) # divmod()求商和余数
print(divmod(4,2)) # eval()将字符串内的表达式拿出来运行并拿到运行结果
print(eval('55*2')) # 将文本内保存为字符串格式的字典去取出来并且把它转换成字典 # globals()查看全局作用域中的名字与值的绑定关系
# locals()查看局部作用域中的名字与值的绑定关系
x = 11
print(globals()) # hash()哈希,只能应用于可变类型
print(hash('zhang')) # help()查看帮助信息,例如函数
print(help(max))
Python全栈-day12-day13-函数4的更多相关文章
- Python全栈之路----函数----返回值
函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...
- python全栈开发-Day13 内置函数
一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...
- python全栈开发笔记---------函数
一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...
- Python全栈day14-15-16-17(函数)
一,数学定义的函数 函数的定义:给定一个数集A,对A施加对应法则f,记作f(A),得到另一数集B,也就是B=f(A).那么这个关系式就叫函数关系式,简称函数.函数概念含有三个要素:定义域A.值域C和对 ...
- python全栈开发-Day8 函数基础
python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- python全栈学习--day11(函数高级应用)
一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...
- python全栈学习--day10(函数进阶)
一,引言 现在我有个问题,函数里面的变量,在函数外面能直接引用么? def func1(): m = 1 print(m) print(m) #这行报的错 报错了:NameError: name 'm ...
- python全栈学习--day9(函数初始)
Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...
- Python全栈之路----函数----作用域
Python中,一个函数就是一个作用域. 局部变量放置在其作用域中,根据作用域来区分,函数属于你,函数属于我. 定义完成后,作用域已经生成,使用时顺着作用域链向上查找. 函数定义完成后,不管被在哪儿被 ...
随机推荐
- [daily] 使用diff和patch打补丁
diff org new > xxx.patch patch /path/org xxx.patch /path/org是相对路径时, 会报错. 这是一个bug.
- 把MP3保存到数据库中
使用JdbcUtils得到连接con java.sql包下的Interface Blob----其实现类SerialBlob Blob是一个可以存储二进制文件的容器. BLOB常常是数据库中用来存储二 ...
- HTML5上传文件显示进度
下面我们使用Html 5的新特性file api实现上传文件,并显示上传文件进度百分比.意图是这样的,当选择文件时,显示当前文件信息.这里我们是结合Asp.net MVC做为服务端,您也可以是其它的服 ...
- springboot 整合swagger-ui
一.添加maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springf ...
- Django实现邮件发送功能
首先申请邮箱并在设置中申请到授权码,授权码的目的仅仅是让你有权限发邮件,但是不能登录到邮箱进行修改,发送邮件时,可以代替密码 1,配置文件settings.py #邮件服务配置文件 EMAIL_USE ...
- Android 出现 activity supporting action_view is not set as browsable报错
<activity android:name=".ThirdActivity"> <intent-filter> <action android:na ...
- Spring对Bean装配详解
1.Spring提供了三种装配bean的方式: 2.自动装配bean: 3.通过Java代码装配bean 4.通过XML装配bean 前言:创建对象的协作关系称为装配,也就是DI(依赖注入)的本质.而 ...
- iOS 允许po打印frame等内容
终端: 1. touch ~/.lldbinit 2. echo display @import UIKit >> ~/.lldbinit 3. echo target stop-hook ...
- Linux 抓包工具:tcpdump
tcpdump 是一个抓包工具,通常用来分析网络 安装tcpdump命令 [root@mysql test]# yum install -y tcpdump -i 指定网卡 捉取网卡数据包 抓取指定网 ...
- abap 从屏幕输入数据
1: 从屏幕输入数据: 直接定义parameters类型(该类型的变量名不能超过8个字符. REPORT ZHANSEN34. *SELECTION-SCREEN BEGIN OF LINE. * S ...