今日内容回顾
目录- 重要内置函数
- 常见内置函数
- 可迭代对象
- 迭代器对象
- for循环本质
- 异常捕获处理
重要内置函数
1.map() 映射
1 = [1, 2, 3, 4, 5, 6]
# 给列表中的每一个元素加1
def func(a):
return a + 1
res = map(func, l1) # 循环获取l1列表中每一个元素并传递给func函数再保存返回值
print(res) # <map object at 0x000002598FB4B470>
print(list(res)) # [2, 3, 4, 5, 6, 7]
ret = map(lambda s: s+1, l1) # 循环获取l1列表每一给元素并传递给匿名函数保存返回值
print(list(ret)) # [2, 3, 4, 5, 6, 7]
2.max() \ min()
l1 = [22, 33, 44, 55]
res = max(l1)
print(res) # 55
ret = min(l1)
print(ret) # 22
d = {
'jason':3000,
'Bevin':1000000,
'Ascar':10000000000,
'aerry':88888
}
# 取出数字最大的人
错误用法 print(max(d)) # jason
'''
A-Z: 65-90
a-z: 97-122
'''
def func(k):
return d[k]
print(max(d, key=func)) # Ascar
print(max(d, key=lambda k: d.get(k))) # Ascar
3.reduce() 传多个值返回一个值
# reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
l1 = [22, 33, 22, 44, 77, 55, 88, 99, 33]
res = reduce(lambda a, b: a + b, l1) # a:22 b:33得到55则 a:55 b:22得到77则 a:77 b:44....
print(res) # 473
rel = reduce(lambda a, b: a * b, l1)
print(rel) # 855652058110080
ret = reduce(lambda a, b: a + b, l1, 100) 还可以添加值 # a:100 b:22得到122则 a:122 b:33得到155则a:155 b:22
print(ret) # 573
4.zip() 拉链
l = [11, 22, 33, 44]
name_list = ['jason', 'kevin', 'tony', 'oscar']
# 将l、name_list列表中的数据值组织成元组套列表的形式
'''传统做法'''
new_list = []
for i in range(len(l)):
new_list.append((l[i], name_list[i]))
print(new_list) # [(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'oscar')]
'''zip内置函数做法'''
res = zip(l, name_list)
print(list(res)) # [(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'oscar')]
# 且zip不会限制于列表中的数据值对不上、还支持多个列表
l = [11, 22, 33, 44, 55, 66]
name_list = ['jason', 'kevin', 'tony', 'oscar']
ret = zip(l, name_list)
# print(list(ret)) # [(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'oscar')]
print(dict(ret)) # {11: 'jason', 22: 'kevin', 33: 'tony', 44: 'oscar'}
5.filter() 过滤
l1 = [22, 24, 12, 32, 43, 23, 12, 32]
# 打印出l1列表中数据值大于30的数据列表
'''传统做法'''
new_lis = []
for i in l1:
if i > 30:
new_lis.append(i)
print(new_lis) # [32, 43, 32]
'''fliter内置函数做法'''
res = fliter(lambda x:x > 30, l1)
print(list(res)) # [32, 43, 32]
6.sorted() 排序
l1 = [21, 12, 34, 25, 16, 19, 32, 54]
res = sorted(l1)
print(res) # [12, 16, 19, 21, 25, 32, 34, 54]
# 在列表的内置方法中sort也是排序
l1.sort()
print(l1) # [12, 16, 19, 21, 25, 32, 34, 54] 修改的是列表原值l1
常见内置函数
1.abs() 绝对值
print(abs(-120)) # 100
2.all() 所有数据值对应的布尔值为True结果才是True 否则返回False
print(all([1, 3, 4, 2, 4])) # True
print(all([1, 3, 4, 2, 4, 0])) # Flase
3.any() 所有数据值对应的布尔值有一个为Ture结果就是True 否则返回Flase
print(any([0, {}, ''])) # Flase
print(any([0, {}, '', 1])) # True
4.bin()二进制 oct()八进制 hex()十六进制 int()整型
5.bytes() 转换为bytes类型
s1 = '我爱学习'
print(s1.encode('utf8')) # b'\xe6\x88\x91\xe7\x88\xb1\xe5\xad\xa6\xe4\xb9\xa0'
print(bytes(s1, 'utf8')) # b'\xe6\x88\x91\xe7\x88\xb1\xe5\xad\xa6\xe4\xb9\xa0'
6.callable() 判断名字是否可以加括号调用
s1 = 'jason'
def index():
pass
print(callable(s1),callable(index)) # False True
7.chr() ord()
print(chr(67)) # c
print(ord('c')) # 67
8.dir() 返回括号内对象能够调用的名字方法操作
print(dir('hello'))
9.divmod() 元组 第一个数据为整除数 第二个是余数
res = divmod(100, 3)
print(res) # (33, 1)
ret = divmod(100, 2)
print(ret) # (50, 0)
实例:
"""
总数据 每页展示的数据 总页码
100 10 10
99 10 10
101 10 11
"""
page_num, more = divmod(9999, 20)
# print(divmod(99, 10)) # (9, 9)
if more: # 判断有余数
page_num += 1 # 页码即整除数加1
print('总页码为:', page_num)
10.enumerate() 枚举
# 它第一个打印的是从0开始的数字
l1 = [21, 12, 34, 25]
res = enumerate(l1, start=100)
print(dict(res)) # {100: 21, 101: 12, 102: 34, 103: 25}
print(list(enumerate(l1, start=100))) # [(100, 21), (101, 12), (102, 34), (103, 25)]
11.eval() exec() 能够识别字符串中的python并执行
s1 = 'print("学习使我快乐")'
eval(s1) # 学习使我快乐
exec(s1) # 学习使我快乐
s2 = 'for i in range(100):print(i)'
eval(s2) # 报错 只能识别简单的python代码 具有逻辑性的都不行
exec(s2) # 可以识别具有一定逻辑性的python代码
12.hash() 哈希加密
print(hash('jason')) # 1508682991101765084
13.id() input() isinstance()判断是否属于该数据类型
print(id('jason')) # 内存地址 2297551373008
print(isinstance('哈哈哈', str)) # True
14.map() max() min() zip()
15.open()文件操作
16.pow() 幂次方(次数)
print(pow(2, 3)) # 8
print(pow(3, 2)) # 9
17.range()
18.round() 四舍五入
print(round(99.4)) # 99
print(round(99.5)) # 100
19.sum() 求和
print(sum([12, 13, 12, 14, 54])) # 105
可迭代对象
1.可迭代对象
对象内置有_iter_方法的都称为可迭代对象
'''
内置方法:通过点的方式能够调用的方法
_iter_:双下iter方法
'''
2.可迭代对象的范围
不是可迭代对象:int float bool 函数对象
是可迭代对象:str list dict tuple set 文件对象
3.迭代的含义
'''
迭代:更新换代(每次更新都必须依赖于上一次的结果) 如:软件的更新
'''
# 凡是可作用于for循环的对象都是Iterable(可迭代对象)类型
迭代器对象
1.迭代器对象
是由可迭代对象调用__iter__方法产生的
迭代器对象判断的本质是看是否内置有__iter__和__next__
# 凡是可作用于next()函数的对象都是Iterator(迭代器对象)类型
2.迭代器对象的作用
提供了一种不依赖于索引取值的方式
正因为有来了迭代器的存在 我们的无序的字典、集合才能够被for循环
3.注意事项
可迭代对象调用_iter_会成为迭代器对象 迭代器对象如果还调用_iter_不会有任何变化 还是迭代器对象本身
i = 12 # 没有
f = 11.11 # 没有
s = 'jason' # 有
l = [111,222,333,444] # 有
d = {'username':'jason','pwd':123} # 有
t = (11,22,33) # 有
se = {11,22,33} # 有
b = True # 没有
file = open(r'a.txt','w',encoding='utf8')
s = 'jason'
res = s.__iter__() # 转成迭代器对象
print(res.__next__()) # 迭代器对象执行__next__方法其实就是在迭代取值(for循环)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
d = {'username':'jason','pwd':123}
res = d.__iter__() # 转成迭代器对象
print(res.__next__()) # 迭代器对象执行__next__方法其实就是在迭代取值(for循环)
print(res.__next__())
print(res.__next__()) # 取完元素之后再取会"报错"
# 易错
print(d.__iter__().__next__()) # username
print(d.__iter__().__next__()) # username
print(d.__iter__().__next__()) # username
print(d.__iter__().__next__()) # username
print(d.__iter__().__next__()) # username
print(d.__iter__().__next__()) # username
for循环的本质
for 变量名 in 可迭代对象:
循环体代码
l1 = [1,2,3,4,5,6,7,8,9,11,22,33,44,55]
# 循环打印出列表中每个元素 但是不能使用for循环 __next__() next()
# 1.先将列表转为迭代器对象
# res = l1.__iter__()
# # 2.循环执行__next__取值
# while True:
# print(res.__next__())
'''
1.先将in后面的数据调用_iter_转变成迭对象
2.依次让迭代器对象调用_next_取值
3.一旦_next_取不到值报错 for循环会自动捕获并处理
'''
异常捕获处理
# 什么是异常
代码运行出错会导致异常 俗语bug
bug发生后如果没有解决方案则会到底整个程序结束 们在编写代码的过程中要尽可能避免
# 异常三个重要组成部分
1.t错误位置
翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行
2.XXXError
错误的类型
3.错误详情
错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)
# 错误的种类
1.语法错误
不被允许的 出现了应该立刻修改!!!
2.逻辑错误
可以被允许的 出现了之后尽快修改即可
'''修改逻辑错误的过程其实就是在从头到尾理清思路的过程'''
标签:__,.__,15,概要,迭代,res,l1,print
From: https://www.cnblogs.com/xiao-fu-zi/p/16792378.html