python——常见内置函数、可迭代对象与迭代器对象


一、常见内置函数

内置函数,提前定义好的 直接使用即可 很多内置函数的功能都好用

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条,需要多少页?
通过代码自动计算!

总数据每页展示需要多少页
1001010
981010
81109
99910???
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能够自动处理该错误 让循环正常结束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值