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的更多相关文章

  1. Python全栈之路----函数----返回值

    函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...

  2. python全栈开发-Day13 内置函数

    一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...

  3. python全栈开发笔记---------函数

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  4. Python全栈day14-15-16-17(函数)

    一,数学定义的函数 函数的定义:给定一个数集A,对A施加对应法则f,记作f(A),得到另一数集B,也就是B=f(A).那么这个关系式就叫函数关系式,简称函数.函数概念含有三个要素:定义域A.值域C和对 ...

  5. python全栈开发-Day8 函数基础

    python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需 ...

  6. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  7. python全栈学习--day11(函数高级应用)

    一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...

  8. python全栈学习--day10(函数进阶)

    一,引言 现在我有个问题,函数里面的变量,在函数外面能直接引用么? def func1(): m = 1 print(m) print(m) #这行报的错 报错了:NameError: name 'm ...

  9. python全栈学习--day9(函数初始)

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  10. Python全栈之路----函数----作用域

    Python中,一个函数就是一个作用域. 局部变量放置在其作用域中,根据作用域来区分,函数属于你,函数属于我. 定义完成后,作用域已经生成,使用时顺着作用域链向上查找. 函数定义完成后,不管被在哪儿被 ...

随机推荐

  1. jquery重置表单

    表单一般都有重置功能,在重置表单时需要将各个输入框中的值清空,如果输入框比较多,一个一个清空会比较麻烦,使用jquery的方法直接将表单中的所有输入框全部清空,首先给出一个form表单: <fo ...

  2. Android 出现 activity supporting action_view is not set as browsable报错

    <activity android:name=".ThirdActivity"> <intent-filter> <action android:na ...

  3. 关于flexjson将json转为javabean的使用

    关于flexjson将json转为javabean的使用 import java.sql.Timestamp; import java.util.Date; import flexjson.JSOND ...

  4. 关于安装SVN Service 出错 Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details

    关于安装SVN Service 出错 Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in ...

  5. 10.0-uC/OS-III任务管理

    1.实时应用中一般将工作拆分为多个任务,每个任务都需要是可靠的.任务(也叫做线程)是简单的程序.单CPU中,在任何时刻只能是一个任务被执行. 2.uC/OS-III支持多任务且对任务数量没有限制, 任 ...

  6. 8.1-uC/OS-III多任务应用

    1.app.c: ( 1) .分别为每个任务分配一个OS_TCB. (2). 斥信号量( mutex)是一个内核对象(一个结构体),用于保护共享资源.任务要访问共享资源就必须先获得 mutex. mu ...

  7. 用canvas画三角形的方法

    <canvas id="favoriteRectangle" width="30" height="30"></canva ...

  8. 前端 HTML form表单标签 input标签 type属性 重置按钮 reset

    input type="reset" value="重置" reset重置 还原到默认状态 <!DOCTYPE html> <html lan ...

  9. centos安装Django之二:pip3安装

    前面我们说到了centos安装Django之一:安装openssl,现在我们进入第二阶段pip3安装.两步实现:安装setuptools(pypi),安装pip,下面就和ytkah一起看看配置吧 1. ...

  10. Java设计模式(一)普通工场模式 抽象工场模式

    设计模式 设计模式是前人总结的,为了解决一类问题而总结的代码设计经验. 最初可能为了使用而使用,后面就会发现.非常多没想到的问题由于使用了正确的设计模式已经为你考虑到了.<design patt ...