重要内置函数、常见内置函数(了解)、可迭代对象、迭代器对象、for循环原理、异常捕获
一、重要内置函数
1. zip
说白了就是压缩几组数据值,说细了就是将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,一般会用
list
或dict
方法输出为对应的类型,当对象为多个的时候,会根据数据值最少的那个参数为输出的个数,多余的部分就不会输出了
# zip
l1 = [11,22,33,44,55]
l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
l3 = [1,2,3,4,5]
res = zip(l1,l2,l3)
print(list(res))
# [(11, 'jason', 1), (22, 'kevin', 2), (33, 'oscar', 3), (44, 'jerry', 4), (55, 'tony', 5)]
l1 = [11,22,33]
l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
l3 = [1, 2, 3, 4]
res = zip(l1, l2, l3)
print(list(res))
# [(11, 'jason', 1), (22, 'kevin', 2),(33, 'oscar', 3)]
当我们使用zip方法压缩后还可以解压,使用方法为:zip(*+变量名):
aa = [(1,2), (2,3), (3,4)]
a, b = zip(*aa)
print(a)
print(b)
(1,2,3)
(2,3,4)
2. filter
filter
函数是筛选的意思:此函数会将可迭代对象中的每一位元素作为参数传递到func
中,如果结果为True
,则将此元素添加到结果列表中,filter
()返回的结果是一个新的列表
表现形式:filter(func,iterable)
其中func
为函数名,可为lambda
匿名函数,iterable
为可迭代对象
# filter
l1 = [11,22,33,44,55,66,77,88]
res = filter(lambda x: x > 40, l1)
print(list(res))
# [44,55,66,77,88]
这里
filter
函数在匿名函数的作用下达成的功能是判断列表l1中的值,如果根据匿名函数的条件得出这个数据值大于40就把记录到结果中用res
输出结果
3.sorted
sort
方法大家一定很眼熟,他是列表的升序排列,到了内置函数sorted
中也一样的作用
表现形式:sorted(iterable,key=None,rever=False)
iterale
-可迭代对象
key
-主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取决自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,(说白了就是弄个函数加了条件)
reverse
-排序规则,reverse
=True
降序,reverse = False
升序(默认)
# sorted
l1 = [21, 12, 53, 64, 76, 32, 11, 22]
res = sorted(l1)
print(res) # 默认升序
# [11,12,21,22,32,53,64,76]
下面是key加入函数的例子:
b = {1: 'ab', 2:'degg', 4:'ght',9:'d'}
res1 = sorted(b.items(), key=lambda i: i[0]) # 指定按字典里面的键排序
print(res1)
[(1,'ab'),(2,'degg'),(4,'ght'),(9,'d')]
res2 = sorted(bitems(), key=lambda i: len(i[1])) # 指定按字典里面的value长度排序,默认从小到大
print(res2)
[(9, 'd'), (1, 'ab'), (4, 'ght'),(2, 'degg')]
res3 = sorted(b.items(), key=lambda i: len(i[1]), reverse=True) # 指定按字典里的value长度排序,同时进行翻转,即按value的长度从大到小排序
print(res3)
[(2, 'degg'), (4, 'ght'). (1, 'ab'), (9, 'd')]
二、常见内置函数(了解)
1.abs
abs
的作用很好理解,就是把数值变成绝对值,也就是变成正数
print(abs(-100))
print(abs(100))
# 100
# 100
2.all
对条件进行判断,如果给定的所有条件都对就返回
True
,否则就返回False
,可以和and
的作用放一起记忆
3.any
对条件进行判断,如果给定的条件里面有一个对就返回
True
,都错的时候返回False
,可以和or
的作用放一起记忆
4.bytes
相当与
encode
的作用,对给定的数据值进行编码,会转换成bytes
(二进制类型)
s1 = '今天周五 内容也很简单'
print(s1.encode('utf8'))
print(bytes(s1, 'utf8'))
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\x91\xa8\xe4\xba\x94 \xe5\x86\x85\xe5\xae\xb9\xe4\xb9\x9f\xe5\xbe\x88\xe7\xae\x80\xe5\x8d\x95'
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\x91\xa8\xe4\xba\x94 \xe5\x86\x85\xe5\xae\xb9\xe4\xb9\x9f\xe5\xbe\x88\xe7\xae\x80\xe5\x8d\x95'
5.bin、oct、hex、int
进制转换的函数,分别是:二进制、八进制、十六进制、十进制
6.callable
用于判断这个变量名加了括号是不是就能调用了,返回的结果是布尔值
name = 'jason'
def index():
print('form index')
print(callable(name)) # False
print(callable(index)) # True
7、chr、ord
根据
ASCII
对应的数值或是根据字符对应的数据值返回结果,chr
是根据数值返回字符,ord
是根据字符返回数据值
8、dir
我们可以通过这个函数查看括号内的对象能调用的方法或函数
print(dir('hello'))
9、divmod
对数值进行整除,并且可以获得余数
res = divmod(100, 2)
print(res) # (50, 0)
res = divmod(100, 3)
print(res) # (33, 1)
前面的结果时整除的结果,后面是余数
10、enumerate
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般结合for循环使用(可以人为指定下表开始的数据值):
print(list(enumerate(["a", "b", "c"])))
[(0, 'a'), (1, 'b'), (2, 'c')]
11、eval和exec
两种函数都是一个作用:把字符串的代码运行
其中eval
只能运行一些简单的代码
exec
可以运行复杂一些的代码,比如开个for
循环
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'))
# 6504587676088172780
13、id、input、isinstance
id
返回对象的唯一标识符,标识符是一个整数(返回对象的内存地址)
input
用于接收外界输入的信息
isinstance
判断一个对象是否是一个已知的类型,类似type()
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
14、map、max、min
map(函数名, 要遍历的数据) # 内部本质就是for循环,再记住两个参数的位置和作用
max # 求出列表中最大值
# l = [1, 2, 10, 30, 5, 6, 7, 8]
# print(max(l))
min # 求出最小值
# print(min(l))
15、open
> 用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写,在之前问文本编辑知识点可以找到详细操作方法,这里就举个例子:
```python
with open() as f1:
pass
f2 = open()
16、pow
返回
xy
(x的y次方) 的值
pow(x, y[, z])
17、range
之前讲for循环的时候介绍过,作用是生成一个工厂,生成数据,python2和python3中的作用有所区别
python2
中的xrange
和python3
的range
作用一样
18、round
对数值进行四舍五入,但是不太准确,可能是五舍六入
19、sum
sum(list)
: 求取list
元素的和
三、可迭代对象
1.可迭代对象
对象内置有__iter__方法的都称为可迭代对象
"""
1.内置方法 通过点的方式能够调用的方法
2.__iter__ 双下iter方法
"""
2.可迭代对象的范围
不是可迭代对象
int float bool 函数对象
是可迭代对象
str list dict tuple set 文件对象
3.可迭代的含义
"""
迭代:更新换代(每次更新都必须依赖上一次的结果)
eg:手机app更新
"""
可迭代在python中可以理解为是否支持for循环
四、迭代器对象
1.迭代器对象
是由可迭代对象调用__iter__方法产生的
迭代器对象判断的本质是看是否内置有__iter__和__next__
2.迭代器对象的作用
提供了一种不依赖于索引取值的方式
正因为有迭代器的存在 我们的字典 集合才能够被for循环
3.迭代器对象实操
s1 = 'hello' # 可迭代对象
res = s1.__iter__() # 迭代器对象
print(res.__next__()) # 迭代取值 for循环的本质
一旦__next__取不到值 会直接报错
4.注意事项
可迭代对象调用__iter__会成为迭代器对象 迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身
五、for循环内部原理
for 变量名 in 可迭代对象:
循环体代码
"""
1.先将in后面的数据调用__iter__转变成迭代器对象
2.依次让迭代器对象调用__next__取值
3.一旦__next__取不到值报错 for循环会自动捕获并处理
"""
六、捕捉异常
1. 什么是异常?
# 异常就是错误发生的信号,如果此信号不做处理,那么,从本行开始之后的代码都不能正常执行了
2. 异常
2.1 Traceback
2.2 XXXError
# 错误的类型
2.3 XXXError冒号后面的内容,报错的详细原因,我们主要看的也是这部分,大致定位错误的原因
3. 异常的种类
1. 语法错误
# 是坚决不允许的,遇到之后要立刻改正,否则,代码不能运行
2. 逻辑错误
# 是可以被允许的,但是,我们写逻辑的时候要尽可能的避免逻辑错误的发生
4. 如何捕捉异常
try:
被监测的代码
except 错误的类型1 as e:
错误处理,e:错误的原因
except 错误的类型2 as e:
错误处理,e:错误的原因
except 错误的类型3 as e:
错误处理,e:错误的原因
except 错误的类型4 as e:
错误处理,e:错误的原因
'''万能异常'''
try:
# print(username)
# print(1/ 0)
# l = [1,2,3,4]
# print(l[6])
d = {'a':1, 'b':2}
print(d['c']) #KeyError
except ZeroDivisionError as e:
print('')
except NameError as e:
print(123)
except IndexError as e:
print(123)
except Exception as e:
print(e) # name 'username' is not defined
"""
try except异常捕捉需要注意
1. try里面被监测的代码尽量少
2. 在明显没有错误的代码不要被捕捉
"""
错误类型
FloatingPointError 浮点计算错误
BaseException 所有异常的基类
SystemExit 解释器请求退出
Exception 常规错误的基类
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
WindowsError 系统调用失败
LookupError 无效数据查询的基类
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
以下为警告类型
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告