常见内置函数与迭代器
常见内置函数
1.abs # 求绝对值,将负数变为整数,并且得出的值只有正数
print(abs(-999)) # 999
2.all # 当在经历条件判断时所有的返回值为True时那么判定为True,反之则为False,和and类似。
print(all(0, 1, 2, 3, 4, 5)) # False
3.any # 当经历条件判断时任意一个返回值为True那么返回值就是True,和or类似
print(any(0,1, 2,3,4,5)) # True
4.basestring # 用来判断一个对象是否是str或者是unicode的实例
isinstance('holle world',basestring) # True
5.bin # 将十进制转为二进制模式
print(bin(10)) # 0b1010
6.oct # 将十进制转为八进制模式
print(oct(10)) # 0o12
7.hex # 将十进制转为十六进制模式
print(hex(10)) # 0xa
8.bool # 老熟人 布尔值
True False
9.bytearray # 可变的字节序列,相当于bytes的可变版本如果 source 为整数,则返回一个长度为 source 的
初始化数组;如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;如果 source 为可迭代
类型,则元素必须为[0 ,255] 中的整数;如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始
化 bytearray。
bytearray() # bytearray(b'')
bytearray([1,2,3]) # bytearray(b'\x01\x02\x03')
bytearray('runoob', 'utf-8') # bytearray(b'runoob')
res = bytes('我生君未生,君生我已老','utf-8')
print(res) # b'\xe6\x88\x91\xe7\x94\x9f\xe5\x90\x9b\xe6\x9c\xaa\xe7\x94\x9f\xef\xbc\x8c
\xe5\x90\x9b\xe7\x94\x9f\xe6\x88\x91\xe5\xb7\xb2\xe8\x80\x81'
res1 = str(res, 'utf8')
print(res1) # 我生君未生,君生我已老
10.callable # call在it专业名词中是调用的意思,需要加括号才能使用 able是否的意思,那么就是指这个内容
是否可以被调用
name = 'joseph'
def func():
print('from func')
print(callable(name)) # False
print(callable(func)) # True
11.chr # 一句ascii码表实现数字与字符之间的转换
print(chr(90)) # Z
print(chr(65)) # A
12.classmethod # 指定一个类的方法也叫类方法
class C: # 这个是cv过来的我也看不懂
@classmethod
def f(cls, arg1, arg2, ...): ...
13.cmp # 用于比较两个对象(x, y)
如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
14.compile # 将一个字符串编译成字符代码
compile(source, filename, mode[, flags[, dont_inherit]])
'''
ource -- 字符串或者AST(Abstract Syntax Trees)对象
filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值
mode -- 指定编译代码的种类。可以指定为 exec, eval, single
flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象
flags和dont_inherit是用来控制编译源码时的标志
'''
15.cpmplex #用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为
字符串,则不需要指定第二个参数
class complex([real[, imag]])
16.delattr # 删除属性
delattr(object, name) # 删除目标变量名
17.dict # 老朋友了 我们的字典
18.dir # 获取对象内部可以使用的内置方法
print(dir(str))
19.divmod # 获取除法之后的整数和余数,我们在定制页面有多少野的时候经常用到这个,确定这一页展示多少数据,
不够就填够了就这样
"""
手上有很多数据 每页展示10条 需要多少页
通过代码自动计算
总数据 每页展示 需要多少页
100 10 10
99 10 10
101 10 11
898 10 ???
"""
real_num, more = divmod(99999, 25)
if more:
real_num += 1
print('总页数是:%s' % real_num) # 4000
20.enumerate # 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据
和数据下标,一般用在 for 循环当中
l1 = ['joseph', 'trump', 'joe', 'jones']
for i , k in enumerate(l1, 25):
print(i, k)
# 25 joseph 26 trump 27 joe 28 jones
21.eval # 能够识别字符串中简单的的python代码并执行
res = 'print(321)'
eval(res) # 321
22.exec # 能够识别略微复杂的代码并执行
res1 = for i in range(5):print(i)
exec(res1) # 0, 1, 2, 3, 4
23.file # 也是老朋友了 通过这个创建一个文件
file(name[, mode[, buffering]])
24.filter # 过滤我们不需要的元素
25.float # 这个同样也是老朋友了浮点数
26.format # 额格式化输出和%S类似
27.frozenset # 返回一个冻结的集合,该集合不能在被增加或减少任何元素
class frozenset([iterable])
28.getattr # 返回一个对象的属性值
getattr(object, name[, default])
29.globals # 会以字典类型返回当前位置的全部全局变量
globals()
30.hash # 获取取一个对象(字符串或者数值等)的哈希值
hash(object)
31.help # 查看帮助信息
help()
34.id # 也算是老朋友了吧地址
35.input # 额输入老朋友
36.int # 整型额可以将底层是整数类型的进制数的对象改为整型
37.isinstance # 判断某个数据是否属于某个类型
38.issubclass # 用于判断参数 class 是否是类型参数 classinfo 的子类
issubclass(class, classinfo)
39.iter # 生成迭代器
iter(object[, sentinel])
40.len # 老朋友判断xx的长度
41.list # 额列表
42.locals # 函数会以字典类型返回当前位置的全部局部变量
43.long # 将数字或字符串转换为一个长整型 # 貌似py3已经将这个删除了
44.map # 映射说新也新说不新也能说
45.max # 取最大值,老朋友
46.min # 取最小值和上面那个是兄弟俩也是老朋友
47.memoryview #返回给定参数的内存查看对象,看不懂
memoryview(obj)
48.next # 返回迭代器的下一个项目
49.object # 嵌入到主调函数中的函数称为内置函数,又称内嵌函数
object()
50.oct # 函数将一个整数转换成 8 进制字符串
51.open # 打开老朋友
52.ord # 返回十进制
print(ord(Z)) # 90
print(ord(A)) # 65
53.pow # 幂指数
print(pow(2, 4)) # 16
54.print # 打印认识最久没有之一
55.property # 是在新式类中返回属性值
56.range # 范围老冤种好久不见
57.raw_input # 将所有输入作为字符串看待,返回字符串类型
raw_input([prompt])
58.reduce # 求和
59.repr # 将对象转化为供解释器读取的形式
60.reversed # 返回一个反转的迭代器颠倒
61.round #四舍五入在py中由于数字不敏感其实被默认为五舍六入
62.set # 集合
63.setattr # 对应函数 getattr(),用于设置属性值,该属性不一定是存在的
64.slice # 实现切片对象,主要用在切片操作函数里的参数传递
65.sorted # 对所有可迭代的对象进行排序操作
66.staticmethod # 返回函数的静态方法
67.str #字符串
68.sum # 方法对序列进行求和计算
69.super # 解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉
及到查找顺序(MRO)、重复调用(钻石继承)等种种问题
70tuple # 元组
71.type # 类型
72.unichr # 数 和 chr() 函数功能基本一样, 只不过是返回 unicode 的字符 # python3也不支持
73.unicode # 编码
74.vars # 返回对象object的属性和属性值的字典对象
75.xrange # 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器
76.zip # 拉链,缝合
77.__import__ # 如果一个模块经常变化就可以使用 __import__() 来动态载入
![image](https://img2022.cnblogs.com/blog/2904194/202207/2904194-20220711185811352-2143892174.png)
可迭代对象
1.迭代的本质
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,
而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的
量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求
某一数学问题的解。对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程
序中的循环,直到满足某条件为止,亦称为迭代。
2.迭代器类型
while True:
print('我是自己一个人循环重复的')
像这种的循环结构不能叫做迭代,只能叫做循环自己因为他没有在上一个值的基础上进行变化只是不断往复的
循环一个数值
count = 0
while c <10:
print(c)
c += 1 # 0 1 2 3 4 5 6 7 8 9
像是这样的会不断根据上一个数值产生变化的数值叫做可迭代对象
3.如何判断是否可迭代
在内置中有__iter__方法的都是可迭代对象
1.内置是什么,内置其实就是我们可以在各种类型的后面使用句点符调用内置方法的东西叫做内置
2.__xxxx__,像是以双下划线开头并且以双下划线结尾的方法统一被叫做双下xxxx
int # 整型不是可迭代对象
float # 浮点型不是可迭代对象
str.__intr__(__next__) # 字符串是可迭代对象
list.__intr__(__next__) # 列表是可迭代对象
dict.__intr__(__next__) # 字典是可迭代对象
tuple.__intr__(__next__) # 元组是可迭代对象
set.__intr__(__next__) # 集合是可迭代对象
bool # 布尔值不是可迭代对象
def index(): # 函数名不是可迭代对象
print()
f = open(r'01 考题讲解.py','r',encoding='utf8')
f.__intr__(__next__) # 文件对象是可迭代对象
4.可迭代对象:字符串,列表,字典,元组,集合,文本文件(文本文件不需要使用__xintr____next__,也可以直接
使用__next__),可迭代对象都可以使用for循环
5.不可迭代对象:整数,浮点数,布尔值,函数名
![image](https://img2022.cnblogs.com/blog/2904194/202207/2904194-20220711185906149-91267278.png)
迭代器对象
1.可迭代对象与迭代器之间的关系
可迭代对象使用__intr__就会转变为迭代器对象,而在迭代器对象中使用__intr__或__next__都不会转变
为可迭代对象这个过程不可逆
2.迭代器对象迭代取值
res = 'joseph'.__intr__() # 将这个字符串有可迭代对象转为迭代器对象并赋值给res变量名
print(res.__next__()) #j
print(res.__next__()) # o
print(res.__next__()) # s
print(res.__next__()) # e
print(res.__next__()) # p
print(res.__next__()) # h
print(res.__next__()) # 如果多出一个的话就会直接报错
dic1 = {'name':'joseph','age':21} # 新建一个字典
res = d1ic.__iter__() # 将可迭代对象转迭代器对象
print(res.__next__()) # name
print(res.__next__()) # age
3.迭代器注意事项
迭代器的反复使用
l = [11, 22, 33, 44]
print(l.__iter__().__next__()) # 11 每次都是产生了一个新的迭代器对象,并不会像上方一样
每次取一个值因为他每次都是单独拿上方的l重新来一次转变
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__())
4.迭代器的特殊
无论是可迭代对象和迭代器对象都是会帮你节省系统占用的,在不使用的情况下不会运行只会直接帮你建一个
内存地址里面不方东西当你需要执行的时候才会进行传入运行
![image](https://img2022.cnblogs.com/blog/2904194/202207/2904194-20220711190004317-753927992.png)
for循环的本质
1.for循环的语法结构
for 变量名 in 可迭代对象:
2.在for循环中in会直接将后面的值变成可迭代对象也就是自动在后方加一个__intr__
3.后面开始循环的时候也会直接在前面附加一个(__next__)让他在迭代器中迭代
4.由于我们在实验的时候再继续往下写的时候会直接报错,我们的for循环就自动帮我们修复了这个bug让他循环完成不
会报错或者说修复报错
![image](https://img2022.cnblogs.com/blog/2904194/202207/2904194-20220711190122122-136803192.png)