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中,一个函数就是一个作用域. 局部变量放置在其作用域中,根据作用域来区分,函数属于你,函数属于我. 定义完成后,作用域已经生成,使用时顺着作用域链向上查找. 函数定义完成后,不管被在哪儿被 ...
随机推荐
- [knowledge][bigdata] nosql
几款主流nosq数据库对比:http://www.cnblogs.com/vajoy/p/5471308.html Redis VS MongoDB:http://www.jianshu.com/p/ ...
- [daily][dpdk] 内核模块(网卡驱动)无法卸载
由于程序的异常退出, 内核的引用计数没有被清除(我猜的). 所以驱动不能被卸载掉, 强制也不行. 如下: [root@localhost ~]# insmod /opt/scorpion/KingKo ...
- 不看好运维竖井产品模式,优云打造融合化运维PaaS平台
2018年1月13号中国双态运维用户大会上,优云软件总裁刘东海接受了36Kr记者的专访,期间谈到了新时代下的企业运维模式,新兴技术和传统运维的融合以及优云未来的发展方向等问题.以下为访谈实录: 优云软 ...
- 按键控制led驱动
内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 key_drv.c : #include<linux/module.h> #include<linux/ker ...
- 域PC脱域
SID是什么意思SID 只是安全标识符的缩写而已.SID 的全称是“安全标识符(Security Identify)”,是为域或本地计算机中创建的每个帐户分配的唯一 ID 字符串(例如,S-1-5-2 ...
- mysql 查询优化杂谈
一.把某些判断移动到应用层 我们需要在一张表里面删除某种类型的数据,大概的表结构类似这样: CREATE TABLE t ( id INT, tp ENUM ("t1", &quo ...
- 前端 html button标签
就是一个按钮标签 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- 前端 HTML body标签相关内容 常用标签 分割线 <hr>
分割线 <hr> <hr>标签用来在HTML页面中创建水平分隔线,通常用来分隔内容 <!DOCTYPE html> <html lang="en&q ...
- Linux ls 排序
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/hongweigg/article/details/37693029 在Linux中查看文件,有时须要 ...
- SQL存储过程分页
CREATE PROC ZDY_FY(@Pages INT, @pageRow INT) --@Pages第几页 @pageRow每页显示几行 AS BEGIN DECLARE @starNum IN ...