常见内置函数
"""
内置函数:提前定义好的,直接使用即可,很多内置函数的功能都非常好用
"""
# 1. abs() 求绝对值
print(abs(-100)) # 100
# 2.all()与any() 判断容器类型中的数据值对应的布尔值是否为True
# 2.1 all() 所有的数据值都是True的情况下,结果才是True
print(all([0,1,2,3])) # False
print(all())
# 2.2 any() 所有的数据值只要有一个是True,结果才是True
print(any([0,1,2,3])) # True
print(any([1,2,3])) # True
# 3.bin() oct() hex() 十进制转其他进制
print(bin(100)) # 0b1100100
print(oct(100)) # 0o144
print(hex(100)) # 0x64
# 4.int() 类型转换 其他进制转十进制
print(int(0b1100100)) # 100
print(int(0o144)) # 100
print(int(0x64)) # 100
# 5.bytes() 类型转换
'''通过 编码 和 解码 进行字符转换'''
res = '活到老,学到老'.encode('utf8') # 编码
res1 = res.decode('utf8') # 解码
print(res1) # 活到老,学到老
'''通过 bytes() 和 str() 进行字符转换'''
res = bytes('活到老,学到老','utf8')
print(res) # 二进制字符
res1 = str(res,'utf8') # 活到老,学到老
print(res1)
# 6.callable() # call在it专业名词中翻译成调用>>>:加括号执行
# 判断某个变量是否可以加括号调用
name = 'jason'
def index():
pass
print(callable(name)) # False
print(callable(index)) # True
# 7.chr() ord() # 根据ASCII码表实现字符金和数据的转换
print(chr(65)) # A
print(chr(97)) # a
print(ord('A')) # 65
print(ord('a')) # 97
# 8.dir() # 获取对象内部可以通过句点符获取的数据
print(dir(str))
# 9.divmod() # 获取除法之后的整数和余数
real_num,more =divmod(1201,100)
print(real_num,more) # 12 1
if more:
real_num +=1
print(f'总页数{real_num}') # 总页数13
# 10.enumerate() #枚举
name_list = ['jason','kevin','tom','oscar']
for i,j in enumerate(name_list,10):
print(i,j)
"""
输出 10 jason
11 kevin
12 tom
13 oscar
"""
# 11.eval() exec() 能够识别字符串中python代码并执行
res = 'print(123)'
eval(res) # 123
exec(res) # 123 exec()可以识别复杂的代码,但是eval()不可以
# 12.hash() # 返回一串随机的数字(哈希值)
print(hash('jason')) # 5403578395671767
print(hash('123')) # -535807216520021384
# 13.help() # 查看帮助信息
help(len)
# 14.instance() # 判断某个数据是否数据某个数据类型
print(isinstance(123,int)) # True
print(isinstance('123',int)) # False
# 15.pow() # 幂指数
print(pow(3,2)) # 9
# 16.round() # 大致:四舍五入
print(round(98.545,2)) # 98.55
print(round(100.5)) # 100
可迭代对象
# 1.迭代如何理解
迭代就是更新换代,每次迭代都需要基于上一次的成果
# 2.代码演示
# 2.1不属于迭代
while True:
print('hello,world')
# 2.2属于迭代
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(): # 函数名不是可迭代对象
# f = open(r'文件路径','r',encoding='utf8') # 文件对象是可迭代对象
'可迭代对象':
字符串、列表、字典、元组、集合、文件对象(本身就是迭代器对象)
'不是可迭代对象':
整型、浮点型、布尔值、函数名
'可迭代对象能够支持for循环取值'
迭代器对象
'''
作用:
迭代器对象给我们提供了一种不依赖于索引取值的方式
正式因为迭代器对象的存在,我们才能对字典、集合这些无序类型循环取值
'''
# 1.如何判断迭代器对象
内置有__iter__和__next__的对象都称为迭代器对象
# 2.可迭代对象与迭代器对象的关系
可迭代对象调用__iter__方法之后就会变成迭代器对象
迭代器对象调用__iter__方法无论多少次还是迭代器对象本身
# 3.迭代器对象迭代取值
res = 'jason'.__iter__()
print(res.__next__()) # j
print(res.__next__()) # a
print(res.__next__()) # s
print(res.__next__()) # o
print(res.__next__()) # n
print(res.__next__()) # 会报StopIteration错
new_dict = {'name':'jason','pwd':123}
res = new_dict.__iter__()
print(res.__next__()) # name
print(res.__next__()) # pwd
l1 = [11,22,33,44,55,66,77,88]
count = 0
res = l1.__iter__()
while count<len(l1):
print(res.__next__())
count +=1
# 4.补充说明
# 4.1 迭代器反复使用
l1 = [11,22,33,44]
print(l1.__iter__().__next__()) # 11
print(l1.__iter__().__next__()) # 11
print(l1.__iter__().__next__()) # 11
print(l1.__iter__().__next__()) # 11
# 4.2 针对双下方法
res = l1.__iter__()
print(res.__next__()) # 11
print(res.__next__()) # 22
print(res.__next__()) # 33
print(res.__next__()) # 44
# 4.3 迭代器对象特殊的地方
可迭代对象、迭代器对象 通过打印无法直接看出内部数据的情况
这个时候他们都能够帮你节省内存
相当于是一个工厂,你要一个数据就临时给你造一个
for循环的本质
# 语法结构
for 变量名 in 可迭代对象:
for循环体代码
1. for循环会自动将in后面的数据调用__iter__()变成迭代器对象
2.之后每次循环调用__next__()取值
3.最后没有值__next__()会报错,但是for自动处理改错误,让循环正常结束