首页 > 其他分享 >概要15

概要15

时间:2022-10-14 17:33:26浏览次数:44  
标签:__ .__ 15 概要 迭代 res l1 print

今日内容回顾

目录

  • 重要内置函数
  • 常见内置函数
  • 可迭代对象
  • 迭代器对象
  • 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

相关文章

  • day15学习分享 内置参数
    目录今日内容概要今日内容详细作业讲解重要内置函数常见内置函数可迭代对象迭代器对象for循环本质异常捕获/处理今日内容概要作业讲解重要内置参数常见内置参数可......
  • Python基础15
    今日内容概要重要内置函数常见内置函数可迭代对象迭代器对象for循环的本质异常今日内容详细重要内置函数1.zip() zip函数是可以接收多个可迭代对象,然后把每......
  • AtCoder Regular Contest 150 B Make Divisible 贪心 整除分块
    给出一个A和B想要找到一个X和Y使得\(A+X|B+Y\).同时使得X+Y最小求出X+Y的最小值。值域是\([1,10^9]\)直接枚举X不太行会被某种数据卡掉。考虑正解:先固定K另\(\frac{B......
  • LeetCode 1115. Print FooBar Alternately
    原题链接在这里:https://leetcode.com/problems/print-foobar-alternately/题目:Supposeyouaregiventhefollowingcode:classFooBar{publicvoidfoo(){f......
  • 工作总结!日志打印的15个建议
    前言大家好,我是程序员田螺。日志是快速定位问题的好帮手,是撕逼和甩锅的利器!打印好日志非常重要。今天我们来聊聊日志打印的15个好建议~1.选择恰当的日志级别常见的日志级......
  • MySQL日志15连问
    前言大家好,我是田螺哥。金九银十已经来了,整理了15道经典MySQL日志面试题,希望对大家有帮助。1.redolog是什么?为什么需要redolog?redolog是什么呢?redolog是重做日......
  • 面试必备:虾皮服务端15连问
    前言大家好,我是程序员田螺,最近有位读者去虾皮面试啦,分享一下面试的真题~排序链表对称与非对称加密算法的区别TCP如何保证可靠性聊聊五种IO模型hystrix工作原理延时场景处......
  • 洛谷 题解 P1572 计算分数
    题目描述Csh被老妈关在家里做分数计算题,但显然他不愿意坐这么多复杂的计算。况且在家门口还有Xxq在等着他去一起看电影。为了尽快地能去陪Xxq看电影,他把剩下的计算题......
  • java学习第十一天笔记-字符串215-添加学生对象并遍历键盘分析
      ......
  • CF1015D Walking Between Houses
    CF1015DWalkingBetweenHouses-洛谷|计算机科学教育新生态(luogu.com.cn)容易判断掉两种无解情况:\(s<k\)或\(s>(n-1)k\)。因为每一步的步长范围是\(1\si......