内置函数及迭代器
重要内置函数
1.zip
zip()接受一系列可迭代的对象作为参数,将对象中的对应的元素打包成以一个个tuple,zip()函数返回iterable(可迭代对象)
""" 传入的参数相等,则返回的list的长度和参数长度相同"""
eg:
l1 = [11, 22, 33, 44, 55, 66]
l2 = ['kiki', 'kimi', 'classmate', 'roommate', 'mimi', 'baidu']
l3 = [1, 2, 3, 4, 5, 6]
result = zip(l1,l2,l3)
print(list(result)) # [(11, 'kiki', 1), (22, 'kimi', 2), (33, 'classmate', 3), (44, 'roommate', 4), (55, 'mimi', 5), (66, 'baidu', 6)]
print(list(result)) # [] 第一次迭代遍历完了,第二次遍历只能返回空集
""" 传入的参数不相等,则返回的list的长度和参数长度最短的对象相同"""
eg:
l1 = [11, 22, 33, ]
l2 = ['kiki', 'kimi', 'classmate', 'roommate']
l3 = [1, 2, 3, 4, 5, 6]
result = zip(l1,l2,l3)
print(list(result)) # [(11, 'kiki', 1), (22, 'kimi', 2), (33, 'classmate', 3)]
2.filter
基本语法
filter(function or None, iterable) --> filter object
function:函数 作用是对iterable中的每个元素判断是否符合特定条件
None:不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素
iterable:可迭代对象
代码实现:
eg:
l1 =[11,22,33,44,55,66,77,88]
result = filter(lambda x:x>40,l1)
print(list(result)) # 结果得出都是大于40的数据列表[44, 55, 66, 77, 88]
eg:
l1 =[11,0,33,44,-5,66,77,-88]
result = filter(lambda x:x>40,l1)
print(list(result)) # 返回的是[11, 33, 44, -5, 66, 77, -88] 0默认是False,所有帅选过程中进行了过滤
在filter函数定义中提到,filter函数中参数None表示不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素,
""" for和列表生成式也同样可以实现 """
3.sorted
sort排序
sorted()排序 默认升序
eg:
l1 = [22, 6, 335, 89, 53, 236, 9953, 12, 45]
result = sorted(l1)
print(result) # [6, 12, 22, 45, 53, 89, 236, 335, 9953] 默认升序
常用的内置函数
1.abs() 绝对值
print(abs(-110)) # 110 取绝对值
print(abs(56)) # 56 取绝对值
2.all() 所有数据值对应的布尔值为True结果为是True,否则返回False
print(all([0,1,2,3,4,67])) # False 0默认是False
print(all([1,5,7,True])) # True
3.any() 所有数据之对应的布尔值,有一个为True结果为True,否则返回False
print(any([0, None, '', 1])) # True
print(any([0, '', 1])) # True
print(any([0,False,'',[],{}])) # False
4.bin() oct() hex() int() bool()
print(bin(100)) # 0b1100100
print(oct(100)) # 0o144
print(hex(100)) # 0x64
5.bytes() 编码
s1 = '时间太快了,明天又是周末了'
print(s1.encode('utf8')) # b'\xe6\x97\xb6\xe9\x97\xb4\xe5\xa4\xaa\.....
print(bytes(s1,'utf8')) # b'\xe6\x97\xb6\xe9\x97\xb4\xe5\xa4\xaa\xe5\xbf\x.....
6.callable() 判断一个名字是否可以加括号调用
name = 'kiki'
def index():
print('from index')
print(callable(name)) # False
print(callable(index)) # True
7.chr() ord() 基于ASCll码表做数字与字母的转换
print(chr(65)) # A
print(chr(90)) # Z
print(ord('A')) #65
print(ord('h')) # 104
8.dir() 返回括号内对象能够调用的名字
print(dir('hello')) # ['__add__', '__class__', '__contains__', '__delattr__', '__dir__',.......
9.divmod() 元组 第一个数据为整数,第二个数据是是余数,
result = divmod(100,2)
print(result) # (50,0) 因为100能被2整除
result = divmod(99,2)
print(result) #(49,1) 99除于2得整数49,余数为1
"""
总数 每页展示得数据 总页码
100 10 10
99 10 10
102 10 11
"""
page_num,more = divmod(9999,20)
print(divmod(99,10)) # (9, 9)
if more:
page_num += 1
print('总页码为:',page_num) # 总页码为: 500
10.enumerate() 枚举
l1 = 'hello world'
for i,k in enumerate(l1):
print((i, k),end='') # (0, 'h')(1, 'e')(2, 'l')(3, 'l')(4, 'o')(5, ' ')(6, 'w')(7, 'o')(8, 'r')(9, 'l')(10, 'd')
for a,b in enumerate(l1,start=100):
print(a,b) # 101 e 102 l.......
dict1 = {i:j for i,j in enumerate('happy')}
print(dict1) # {0: 'h', 1: 'a', 2: 'p', 3: 'p', 4: 'y'}
12.hash()
print(hash('kiki')) # 哈希加密
"""
第一次加密:4037269258047698454
第二次加密:7907564079560707150
每次加密都不一样
"""
13.id() input() isinstance()
1.id()
l1 = 12
print(id(l1)) # 140712622557184
2.input()
iuput函数作用:接收来自用户得输入
input返回值类型:输入值的类型为str
值的存储:使用=对输入的值进行存储
3.isinstance()
l1 =1
res= isinstance(l1,int)
print(res) # True
14.map() max() min()
1.map() 映射
map函数也是python中的一个内置函数,map在这里的意思是映射的意思,会根据提供的函数对指定序列做映射。map函数会返回一个迭代器,如果要转换为列表,可以使用 list() 来转换
map(function,iterable), function>>>: 函数 ,iterable>>>: 可遍历对象
l1 = [11,22,33,44,55]
#def function(a):
# return a + 1
result = map(lambda x :x+1,l1)
print(list(result)) # [12, 23, 34, 45, 56]
# print(dict(result)) # {}
# print(tuple(result)) # ()
""" 一般用列表来接收"""
2.max()\min()
eg1:
l1 = [11, 21, 2, 3, 2, 1, 2, 3, 2, 3, 2, 3, 2324, 242, 432, 43246, 456, 46, 345, 55345]
result = max(l1)
print(result) # 55345
eg2:
d1 = {
'kiki': 999,
'kimi': 1234,
'jenny': 3456,
'rose': 888 }
方式一:
def function(a):
return d1.get(a)
res = max(d1,key=function)
print(res) # jenny
方式二:
res = max(d1,key=lambda k:d1.get(k))
print(res) # jenny
"""
A-Z: 65-90
a-z:97-122
"""
15.open()
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
open() 是python的内置函数,可以打开文件对其进行操作
Character Meaning
'r' open for reading (default) 打开可读文件
'w' open for writing, truncating the file first da
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)
16.pow() 幂指数
print(pow(2,3)) # 8
print(pow(2,4)) # 16
print(pow(2,9)) # 512
17.range() xrange()
print(range(100)) # range(0, 100)
18.round()
print(round(67.3)) # 67
print(round(45.8)) # 46
19.sum()
print(sum([12,34,56,67,89])) # 258
21.reduce()
reduce
""" reduce 传多个值 返回一个值 """
from functools import reduce
l1 = [11, 22, 33, 44, 55, 66]
result = reduce(lambda a,b:a*b,l1)
print(result) # 1275523920
"""步骤:
1.导入 reduce
2.获取列表
3.获得a=11,b=22 并相乘得242,再赋值给a
4,a=242,或者b=33,a,b相乘得7986再赋值给a
依次循环,直至结束"""
21.zip()
迭代器
迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次'迭代',而每次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代
通过索引的方式进行迭代取值,实现简单,仅适用于字符串,列表,元组,但没有索引的字典、集合等非序列类型,必须找到一种不依赖索引来进行迭代取值的方式,这就用到了迭代器。
可迭代对象
1.可迭代对象
对象内置有__iter__方法的都称为可迭代对象
1.内置方法 通过点的方式能够调用的方法
2.__iter__ 双下iter方法
2.可迭代对象的范围
可迭代对象
string list dict tuple set 文件对象
不可迭代对象
int float bool 函数对象
3.可迭代的含义
迭代:更新换代(每次更新都必须要依赖上一次的结果)
eg: 手机app更新(版本迭代)
可迭代再python中可以理解为是否支持for循环
迭代器对象
1.迭代器对象
是由可迭代对象调用__iter__方法产生
迭代器对象判断的本质:看内置是否有__iter__和__next__
2.迭代器对象的作用
提供了一种不依赖于索引取值的方式
正因为有迭代器的存在 我们的字典 集合才能够被for循环
3.迭代器对象实操
S1 = 'hello' # 可迭代对象
res = S1.__iter__() # 迭代器对象 本质在调用S1.__iter__(),返回S的迭代器对象 可简写iter(S1)
print(res.__next__()) # h 迭代取值 for循环的本质
print(res.__next__()) # e 可简写next(res)
print(res.__next__()) # l
"""一旦__next__ 取不到值 会直接报错"""
4.注意事项
可迭代对象调用__iter__会成为迭代器对象,迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身
迭代器的优缺点
优点
1.为序列和非序列类型提供了一种统一的迭代取值方式
2.惰性计算: 迭代器对象表示的是一个数据流,需要时才去掉调用__iter__来计算出一个值,迭代器可以存放无限大的数据,但是同一时间内存只能有一个值,但是列表需要把所有的元素都存放在内存中,受内存大小的限制,能存放的数据是有限的
缺点
1.除非取尽,否则无法获取迭代器的长度
2.只能取下一个值,不能回到开始,迭代器产生后的唯一目标就是重复执行next方法直到值取尽
for循坏内部原理
for 变量名 in 可迭代对象:
循环体代码
"""
1.先将in 后面的数据调用__iter__转变成迭代器对象
2.依次让迭代器对象调用__next__取值
3.一旦__next__取不到值报错 for循环会自动捕获并处理
"""
异常处理
1.异常
异常就是代码运行报错,行业俗称叫bug
代码运行中一旦遇到异常会直接结束整个程序的运行,我们在编写代码的过程中要尽可能的避免
2.异常分类
语法错误
不允许出现,一旦出现立刻改正
逻辑错误
允许出现的,因为它一眼发现不了,代码运行之后才可能会出现
3.异常结构
错误位置 # File "D:/PycharmProjects/test15/02 常见内置函数.py", line 89,name = kiki
错误类型 # NameError
错误详情 # name 'kiki' is not defined
标签:__,内置,函数,迭代,对象,result,l1,print
From: https://www.cnblogs.com/zhanglanhua/p/16792833.html