常见内置函数、可迭代对象以及迭代器对象

常见内置函数

"""
    内置函数:提前定义好的,直接使用即可,很多内置函数的功能都非常好用
"""
# 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自动处理改错误,让循环正常结束
posted @ 2022-07-11 16:29  荀飞  阅读(85)  评论(0编辑  收藏  举报