温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中iter函数的使用方法

发布时间:2020-10-28 09:30:28 阅读:1342 作者:小新 栏目:编程语言
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

小编给大家分享一下Python中iter函数的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Python 3中关于iter (object[, sentinel)] 方法有两个参数。

使用iter (object) 这种形式比较常见,iter (object, sentinel) 这种形式一般较少使用。

1.iter (object)

Python官方文档对于这种形式的解释很容易理解。

此时,object必须是集合对象,且支持迭代协议(iteration protocol)或者支持序列协议(sequence protocol)。

说白了,也就是实现了__iter__() 方法或者 __getitem__() 方法

l = [1, 2, 3]
  for i in iter(l):
      print(i)

2.iter (object, sentinel)

Python官方文档对于这种形式的解释是:如果传递了第二个参数,则object必须是一个可调用的对象(如函数)。此时,iter创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用object。

如果__next__的返回值等于sentinel,则抛出StopIteration异常,否则返回下一个值。

    class TestIter(object):
 
        def __init__(self):
            self.l=[1,2,3,4,5]
            self.i=iter(self.l)
        def __call__(self):  #定义了__call__方法的类的实例是可调用的
            item = next(self.i)
            print ("__call__ is called,which would return",item)
            return item
        def __iter__(self): #支持迭代协议(即定义有__iter__()函数)
            print ("__iter__ is called!!")
            return iter(self.l)
 
    t = TestIter()  # t是可调用的
    t1 = iter(t, 3)  # t必须是callable的,否则无法返回callable_iterator
    print(callable(t))
    for i in t1:
        print(i)
# 它每次在调用的时候,都会调用__call__函数,并且最后输出3就停止了。
 
True
__call__ is called,which would return 1
1
__call__ is called,which would return 2
2
__call__ is called,which would return 3

在文件读取时使用:

import os
import hashlib
 
 
def bytes2human(n):
    # 文件大小字节单位转换
    symbols = ('K', 'M', 'G', 'T', 'P', 'E')
    prefix = {}
    for i, s in enumerate(symbols):
        # << 左移” 左移一位表示乘2 即1 << 1=2,二位就表示4 即1 << 2=4,
        # 10位就表示1024 即1 << 10=1024 就是2的n次方
        prefix[s] = 1 << (i + 1) * 10
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = float(n) / prefix[s]
            return '%.2f%s' % (value, s)
    return "%sB" % n
 
 
def get_md5(file_path):
    """
    得到文件MD5
    :param file_path:
    :return:
    """
    if os.path.isfile(file_path):
        file_size = os.stat(file_path).st_size
        md5_obj = hashlib.md5()  # hashlib
        f = open(file_path, 'rb')  # 打开文件
        read_size = 0
        while read_size < file_size:
            read_byte = f.read(8192)
            md5_obj.update(read_byte)  # update md5
            read_size += len(read_byte)
        hash_code = md5_obj.hexdigest()  # get md5 hexdigest
        f.close()
        print('file: [{}] \nsize: [{}] \nmd5: [{}]'.format(
            file_path, bytes2human(read_size), hash_code))
        return str(hash_code)
 
 
def get_filemd5(file_path):
    # 使用迭代器读取文件获得MD5
    if os.path.isfile(file_path):
        file_size = os.stat(file_path).st_size
        md5_obj = hashlib.md5()  # hashlib
        f = open(file_path, 'rb')  # 打开文件
        read_size = 1024
        for chunk in iter(lambda: f.read(read_size), b''):  # 使用迭代器读取文件获得MD5
            md5_obj.update(chunk)
        hash_code = md5_obj.hexdigest()  # get md5 hexdigest
        f.close()
        print('file: [{}] \nsize: [{}] \nmd5: [{}]'.format(
            file_path, bytes2human(file_size), hash_code))
        return str(hash_code)
 
 
if __name__ == '__main__':
 
    md5 = get_md5(
        r'C:\README.md')
    md5_1 = get_filemd5(
        r'C:\README.md')
 
 
------------------------输出
 
file: [C:\README.md]
size: [941B]
md5: [d22b8f76dcd8cfbfd4669d9d8101077e]
file: [C:\README.md]
size: [941B]
md5: [d22b8f76dcd8cfbfd4669d9d8101077e]

以上是Python中iter函数的使用方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×