一、常见内置函数
内置函数,提前定义好的 直接使用即可 很多内置函数的功能都好用
1.abs()
求绝对值
print(abs(-78)) #78
2.all()与any()
判断容器类型中的所有数据对应的布尔值是否为True
all()
所有的数据值都为True的情况下,结果才是True
print(all([1,2,3,4,5,0])) #False
print(all([1,2,3,4,5])) #True
any()
所有的数据值只要有一个为True,结果就是True
print(any([1,2,3,4,5,0])) #True
print(any([1,2,3,4,5])) #True
3.bin() oct() hex()
十进制转其他进制
print(bin(20)) #0b10100
print(oct(20)) #0o24
print(hex(20)) #0x14
4.int()
类型转换 其他进制转十进制
print(int(0b1010))
print(int(0o12))
print(int(0xa))
5.bytes()
类型转换
res = '劳动最光荣'.encode('utf8')
print(res)
res1 = res.decode('utf8')
print(res1)
res = bytes('现在有多苦 将来就有多轻松','utf8')
print(res)
res1 = str(res,'utf8')
print(res1)
6.callable()
call在IT专业名词中翻译成 调用>>>:加括号执行
判断某个变量是否可以加括号调用
name = 'david'
def index():
print('from index')
print(callable(name)) # False
print(callable(index)) # True
7.chr() ord()
依据ASCII码表实现字符与数字的转换
print(chr(65)) # A A~Z:65~90
print(chr(97)) # a a~z:97~122
print(ord('A')) # 65
print(ord('a')) # 97
8.dir()
获取对象内部可以通过句点符获取的数据
print(dir(str))
9.divmod()
获取除法之后的整数和余数
手上有很多数据,每页展示10条,需要多少页?
通过代码自动计算!
总数据 | 每页展示 | 需要多少页 |
---|---|---|
100 | 10 | 10 |
98 | 10 | 10 |
81 | 10 | 9 |
999 | 10 | ??? |
int_num , more = divmod(999,10)
if more:
int_num += 1
print('总页数:%s'% int_num) #总页数:100页
10.enumerate()
枚举
name_list = ['jason', 'kevin', 'oscar', 'jerry']
需求: 循环打印出数据值并且对应的索引值
for i, j in enumerate(name_list, 100): # 默认是从0开始 可以自定义
print(i, j) # 100 jason ; 101 kevin ; 102 oscar ; 103 jerry
11.eval() exec()
能够识别字符串中python代码并执行
res = 'print(123)'
eval(res)
不识别复杂结构的代码 只能识别最简单的
exec(res)
能够识别复杂结构的代码
res1 = "for i in range(10):print(i)"
exec(res1) #0 1 2 3 4 5 6 7 8 9
res1 = “for i in range(10):print(i)”
eval(res) 错误
12.hash()
返回一串随机的数字(哈希值)
print(hash('ella')) # -8158860637019053658
print(hash('111')) # -6582946232358485528
13.help()
查看帮助信息
help(sorted)
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
14.isinstance()
判断某个数据是否属于某个数据类型
print(isinstance(123,int)) # True
print(isinstance(123,str)) # False
15.pow()
幂指数
print(pow(2, 3)) # 8
16.round()
大致:四舍五入(不推荐使用)
round( x [, n] )
x -- 数值表达式。 n -- 数值表达式,表示从小数点位数。
print(round(98.335, 2)) # 98.33
print(round(98.6326,3)) # 98.633
简单的说就是,round(98.335, 2) 的结果,不论我们从python2还是3来看,结果都应该是98.34的,结果它偏偏是98.33,为什么?这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。那么在机器中保存的98.335这个数字就比实际数字要小那么一点点。这一点点就导致了它离98.33要更近一点点,所以保留两位小数时就近似到了98.33。
二、可迭代对象
1.什么是迭代
迭代就是更新换代 每次迭代相当于在上一次的结果上进行改变
eg:手机上软件每次更新就相当于版本的迭代
2.代码演示
不属于迭代
while True:
print('你好呀!')
属于迭代
n = 0
while n < 10:
print(n)
n += 1
3.如何判断可迭代对象
内置有__iter__方法的都叫做可迭代对象
1.内置是什么意思?
通过句点符直接能够点出来的东西都叫内置
2.xxx 针对双下划线开头双下划线结尾的方法
统一读作双下xxx
# int # 整型不是可迭代对象
float # 浮点型不是可迭代对象
str # 字符串是可迭代对象
list # 列表是可迭代对象
dict # 字典是可迭代对象
tuple # 元组是可迭代对象
set # 集合是可迭代对象
bool # 布尔值不是可迭代对象
def index(): # 函数名不是可迭代对象
print()
f = open(r'01 考题讲解.py','r',encoding='utf8') # 文件对象是可迭代对象
可迭代对象
字符串 列表 字典 元组 集合 文件对象(本身就是迭代器对象)
不是可迭代对象
整型 浮点型 布尔值 函数名
可迭代对象能够支持for循环取值
三、迭代器对象
作用:
迭代器对象给我们提供了一种不依赖于索引取值的方式
正是因为有迭代器对象的存在 我们才能对字典、集合这些无序类型循环取值
1. 如何判断迭代器对象
内置有__iter__和__next__的对象都称为迭代器对象
2. 如何判断迭代器对象
可迭代对象调用__iter__方法之后就会变成迭代器对象
迭代器对象调用__iter__方法无论多少次还是迭代器对象本身
3. 如何判断迭代器对象
res = 'david'.__iter__() # res已经是迭代器对象
print(res.__next__()) # d
print(res.__next__()) # a
print(res.__next__()) # v
print(res.__next__()) # i
print(res.__next__()) # d
print(res.__next__()) # 没有了直接报错
d1 = {'name':'jason','pwd':123}
res = d1.__iter__()
print(res.__next__())
print(res.__next__())
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
# 需求:不使用for循环 依次打印出列表中所有的数据值
# 1.先将列表变成迭代器对象
res = l1.__iter__()
# 2.定义一个计数器
count = 0
# 3.编写while循环
while count < len(l1):
print(res.__next__())
count += 1
4.补充说明
4.1.迭代器反复使用
# print(l.__iter__().__next__()) # 11 每次都是产生了一个新的迭代器对象
# print(l.__iter__().__next__()) # 11
# print(l.__iter__().__next__()) # 11
# print(l.__iter__().__next__()) # 11
res = l.__iter__()
print(res.__iter__().__next__()) # 11 每次使用的都是一个迭代器对象
print(res.__iter__().__next__()) # 22
print(res.__iter__().__next__()) # 33
print(res.__iter__().__next__()) # 44
4.2.针对双下方法
res = l.__iter__() # 可以简写iter(l)
res.__next__() # 可以简写next(res1)
4.3.迭代器对象特殊的地方(******)
可迭代对象 迭代器对象 通过打印操作无法直接看出内部数据的情况
这个时候他们都能够帮你节省内存
相当于是一个工厂 你要一个数据就临时给你造一个
四、for循环的本质
语法结构:
for 变量名 in 可迭代对象:
for循环体代码
1.for会自动将in后面的数据调用__iter__()变成迭代器对象
2.之后每次循环调用__next__()取值
3.最后没有值__next__()会报错 for能够自动处理该错误 让循环正常结束