python基础20-迭代器

今日学习

常见内置函数

[参考](内置函数 — Python 3.10.5 文档)

abs() aiter() all() any() anext() ascii()
bin() bool() breakpoint() bytearray() bytes()
callable() chr() classmethod() compile() complex()
delattr() dict() dir() divmod()
enumerate() eval() exec()
fileter() float() format() frozenset()
getattr() globals()
hasattr() hash() help() hex()
id() input() int() isinstance() issubclass iter()
len() list() locals()
map() max() memoryview() min()
next()
object() oct() open() ord()
pow() print() property()
range() repr() reversed() round()
setattr() slice() sorted() staticmethod() str()|set() sum() supper()
tuple() type()
vars()
zip()
import()

常见的内置函数

内置函数:提前定义好的 直接使用即可 很多内置函数的功能都非常的好用
    
# 1.abs()  求绝对值
# print(abs(-99))  # 99
--------------------------------------------------------
# 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(10))  # 0b1010
# print(oct(10))  # 0o12
# print(hex(10))  # 0xa
-----------------------------------
# 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 = 'jason'
# def index():
#     print('from index')
# print(callable(name))  # False
# print(callable(index))  # True
# 7.chr()  ord()  # 依据ASCII码表实现字符与数字的转换
# print(chr(65))  # A     65~90
# print(chr(97))  # a     97~122
# print(ord('A'))  # 65
# print(ord('a'))  # 97
-------------------------------------------
# 8.dir()  # 获取对象内部可以通过句点符获取的数据
# print(dir(str))
------------------------------------------
# 9.divmod()  # 获取除法之后的整数和余数
"""
手上有很多数据 每页展示10条 需要多少页
    通过代码自动计算

总数据         每页展示            需要多少页
 100            10                  10
 99             10                  10
 101            10                  11
 898            10                  ???
"""
# real_num, more = divmod(898, 10)
# if more:
#     real_num += 1
# print('总页数:%s' % real_num)
------------------------------------------------------
# 10.enumerate()  # 枚举
# name_list = ['jason', 'kevin', 'oscar', 'jerry']
# 需求:循环打印出数据值并且对应的索引值
# for i, j in enumerate(name_list, 100):  # 默认是从0开始 可以自定义
#     print(i, j)
----------------------------------------------------------
# 11.eval()  exec()  # 能够识别字符串中python代码并执行
# res = 'print(123)'
# eval(res)  # 不识别复杂结构的代码 只能识别最简单的
# exec(res)  # 能够识别复杂结构的代码
# res1 = "for i in range(10):print(i)"
# eval(res1)
# exec(res1)
-----------------------------------------------------
# 12.hash()  # 返回一串随机的数字(哈希值)
# print(hash('jason'))
# print(hash('123'))
----------------------------------------------------
# 13.help()  # 查看帮助信息
# help(len)
-----------------------------------------------------
# 14.isinstance()  # 判断某个数据是否属于某个数据类型
# print(isinstance(123,int))  # True
# print(isinstance(123,str))  # False
---------------------------------------------
# 15.pow()  # 幂指数
# print(pow(2, 3))  # 8
-----------------------------------------------------
# 16.round()  # 大致:四舍五入  可以课下百度查询详细说明
# print(round(98.3))
# print(round(98.6))
  • 内置函数分类

    • 数学运算

    • abs:求数值的绝对值

    >>> abs(-2)
    2
    

    ♦ divmod:返回两个数值的商和余数abs:求数值的绝对值

     >>> divmod(5,2)
     (2, 1)
     >> divmod(5.5,2)
     (2.0, 1.5)
    

    ♦ max:返回可迭代对象中的元素中的最大值或者所有参数的最大值

    >>> max(1,2,3) # 传入3个参数 取3个中较大者
    3
    >>> max('1234') # 传入1个可迭代对象,取其最大元素值
    '4'
    >>> max(-1,0) # 数值默认去数值较大者
    0
    >>> max(-1,0,key = abs) # 传入了求绝对值函数,则参数都会进行求绝对值后再取较大者
    -1
    

    ♦ min:返回可迭代对象中的元素中的最小值或者所有参数的最小值

    >>> min(1,2,3) # 传入3个参数 取3个中较小者
    1
    >>> min('1234') # 传入1个可迭代对象,取其最小元素值
    '1'
    >>> min(-1,-2) # 数值默认去数值较小者
    -2
    >>> min(-1,-2,key = abs)  # 传入了求绝对值函数,则参数都会进行求绝对值后再取较小者
    -1
    

    ♦ pow:返回两个数值的幂运算值或其与指定整数的模值

     >>> pow(2,3)
     >>> 2**3
     >>> pow(2,3,5)
     >>> pow(2,3)%5
    

    ♦ round:对浮点数进行四舍五入求值

      >>> round(1.1314926,1)
      1.1
      >>> round(1.1314926,5)
      1.13149
    

    ♦ sum:对元素类型是数值的可迭代对象中的每个元素求和

    # 传入可迭代对象
    >>> sum((1,2,3,4))
    10
    # 元素类型必须是数值型
    >>> sum((1.5,2.5,3.5,4.5))
    12.0
    >>> sum((1,2,3,4),-10)
    0
    
    • 类型转换

    ♦bool:根据传入的参数的逻辑值创建一个新的布尔值

    >>> bool() #未传入参数
    False
    >>> bool(0) #数值0、空序列等值为False
    False
    >>> bool(1)
    True
    

    ♦ int:根据传入的参数创建一个新的整数

    >>> int() #不传入参数时,得到结果0。
    0
    >>> int(3)
    3
    >>> int(3.6)
    3
    

    ♦ float:根据传入的参数创建一个新的浮点数

    >>> float() #不提供参数的时候,返回0.0
    0.0
    >>> float(3)
    3.0
    >>> float('3')
    3.0
    

    ♦ complex:根据传入参数创建一个新的复数

      '''
      遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
      寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
      '''
    >>> complex() #当两个参数都不提供时,返回复数 0j。
    0j
    >>> complex('1+2j') #传入字符串创建复数
    (1+2j)
    >>> complex(1,2) #传入数值创建复数
    (1+2j)
    

    ♦ str:返回一个对象的字符串表现形式(给用户)

    >>> str()
    ''
    >>> str(None)
    'None'
    >>> str('abc')
    'abc'
    >>> str(123)
    '123'
    

    ♦ bytearray:根据传入的参数创建一个新的字节数组

    >>> bytearray('中文','utf-8')
    bytearray(b'\xe4\xb8\xad\xe6\x96\x87')
    

    ♦ bytes:根据传入的参数创建一个新的不可变字节数组

    >>> bytes('中文','utf-8')
    b'\xe4\xb8\xad\xe6\x96\x87'
    

    ♦ memoryview:根据传入的参数创建一个新的内存查看对象

    >>> v = memoryview(b'abcefg')
    >>> v[1]
    98
    >>> v[-1]
    103
    

    ♦ ord:返回Unicode字符对应的整数

    >>> ord('a')
    97
    

    ♦ chr:返回整数所对应的Unicode字符

    >>> chr(97) #参数类型为整数
    'a'
    12
    

    ♦ bin:将整数转换成2进制字符串

    >>> bin(3) 
    '0b11'
    

    ♦ oct:将整数转化成8进制数字符串

    >>> oct(10)
    '0o12'
    

    ♦ hex:将整数转换成16进制字符串

    >>> hex(15)
    '0xf'
    

    ♦ tuple:根据传入的参数创建一个新的元组

    >>> tuple() #不传入参数,创建空元组
    ()
    >>> tuple('121') #传入可迭代对象。使用其元素创建新的元组
    ('1', '2', '1'
    

    ♦ list:根据传入的参数创建一个新的列表

    >>>list() # 不传入参数,创建空列表
    [] 
    >>> list('abcd') # 传入可迭代对象,使用其元素创建新的列表
    ['a', 'b', 'c', 'd']
    
    

    ♦ dict:根据传入的参数创建一个新的字典

    >>> dict() # 不传入任何参数时,返回空字典。
    {}
    >>> dict(a = 1,b = 2) #  可以传入键值对创建字典。
    {'b': 2, 'a': 1}
    >>> dict(zip(['a','b'],[1,2])) # 可以传入映射函数创建字典。
    {'b': 2, 'a': 1}
    >>> dict((('a',1),('b',2))) # 可以传入可迭代对象创建字典。
    {'b': 2, 'a': 1}
    

    ♦ set:根据传入的参数创建一个新的集合

    >>>set() # 不传入参数,创建空集合
    set()
    >>> a = set(range(10)) # 传入可迭代对象,创建集合
    >>> a
    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    

    ♦ frozenset:根据传入的参数创建一个新的不可变集合

    >>> a = frozenset(range(10))
    >>> a
    frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
    

    ♦ enumerate:根据可迭代对象创建枚举对象

    >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    >>> list(enumerate(seasons))
    [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    >>> list(enumerate(seasons, start=1)) #指定起始值
    [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
    

    ♦ range:根据传入的参数创建一个新的range对象

      '''
      遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
      寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
      '''
    >>> a = range(10)
    >>> b = range(1,10)
    >>> c = range(1,10,3)
    >>> a,b,c # 分别输出a,b,c
    (range(0, 10), range(1, 10), range(1, 10, 3))
    >>> list(a),list(b),list(c) # 分别输出a,b,c的元素
    ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 4, 7])
    >>
    

    ♦ iter:根据传入的参数创建一个新的可迭代对象

    '''
      遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
      寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    >>> a = iter('abcd') #字符串序列
    >>> a
    <str_iterator object at 0x03FB4FB0>
    >>> next(a)
    'a'
    >>> next(a)
    'b'
    >>> next(a)
    'c'
    >>> next(a)
    'd'
    >>> next(a)
    Traceback (most recent call last):
      File "<pyshell#29>", line 1, in <module>
        next(a)
    StopIteration
    

    ♦ slice:根据传入的参数创建一个新的切片对象

    >>> c1 = slice(5) # 定义c1
    >>> c1
    slice(None, 5, None)
    >>> c2 = slice(2,5) # 定义c2
    >>> c2
    slice(2, 5, None)
    >>> c3 = slice(1,10,3) # 定义c3
    >>> c3
    slice(1, 10, 3)
    

    ♦ super:根据传入的参数创建一个新的子类和父类关系的代理对象

      '''
      遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
      寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
      '''
    #定义父类A
    >>> class A(object):
        def __init__(self):
            print('A.__init__')
    
    #定义子类B,继承A
    >>> class B(A):
        def __init__(self):
            print('B.__init__')
            super().__init__()
    
    #super调用父类方法
    >>> b = B()
    B.__init__
    A.__init__
    

    ♦ object:创建一个新的object对象

    >>> a = object()
    >>> a.name = 'kim' # 不能设置属性
    Traceback (most recent call last):
      File "<pyshell#9>", line 1, in <module>
        a.name = 'kim'
    AttributeError: 'object' object has no attribute 'name'
    

可迭代对象

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')  # 文件对象是可迭代对象

迭代器对象

作用:
	迭代器对象给我们提供了一种不依赖于索引取值的方式
	正是因为有迭代器对象的存在 我们才能对字典、集合这些无序类型循环取值
	
	1.如何判断迭代器对象
	内置有__iter__和__next__的对象都称为迭代器对象
------------------------------------------------	
2.可迭代对象与迭代器对象的关系
	可迭代对象调用__iter__方法之后就会变成迭代器对象
	迭代器对象调用__iter__方法无论多少次还是迭代器对象本身
------------------------------------------------------
3.迭代器对象迭代取值
	 # res = 'jason'.__iter__()  # res已经是迭代器对象
    # print(res.__next__())  # j
    # print(res.__next__())  # a
    # print(res.__next__())  # s
    # print(res.__next__())  # o
    # print(res.__next__())  # n
    # 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.迭代器反复使用
         l = [11, 22, 33, 44]
        # 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能够自动处理该错误 让循环正常结束
posted @ 2022-07-11 19:16  名字长的像一只老山羊  阅读(46)  评论(0编辑  收藏  举报