真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中iter函數(shù)的使用方法

小編給大家分享一下Python中iter函數(shù)的使用方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)公司專注骨干網(wǎng)絡(luò)服務(wù)器租用十載,服務(wù)更有保障!服務(wù)器租用,成都電信服務(wù)器托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問(wèn)。靈活、實(shí)現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。

Python 3中關(guān)于iter (object[, sentinel)] 方法有兩個(gè)參數(shù)。

使用iter (object)這種形式比較常見(jiàn),iter (object, sentinel)這種形式一般較少使用。

1.iter (object)

Python官方文檔對(duì)于這種形式的解釋很容易理解。

此時(shí),object必須是集合對(duì)象,且支持迭代協(xié)議(iteration protocol)或者支持序列協(xié)議(sequence protocol)。

說(shuō)白了,也就是實(shí)現(xiàn)了__iter__() 方法或者 __getitem__() 方法

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

2.iter (object, sentinel)

Python官方文檔對(duì)于這種形式的解釋是:如果傳遞了第二個(gè)參數(shù),則object必須是一個(gè)可調(diào)用的對(duì)象(如函數(shù))。此時(shí),iter創(chuàng)建了一個(gè)迭代器對(duì)象,每次調(diào)用這個(gè)迭代器對(duì)象的__next__()方法時(shí),都會(huì)調(diào)用object。

如果__next__的返回值等于sentinel,則拋出StopIteration異常,否則返回下一個(gè)值。

   class TestIter(object):        def __init__(self):            self.l=[1,2,3,4,5]            self.i=iter(self.l)        def __call__(self):  #定義了__call__方法的類的實(shí)例是可調(diào)用的            item = next(self.i)            print ("__call__ is called,which would return",item)            return item        def __iter__(self): #支持迭代協(xié)議(即定義有__iter__()函數(shù))            print ("__iter__ is called!!")            return iter(self.l)    t = TestIter()  # t是可調(diào)用的    t1 = iter(t, 3)  # t必須是callable的,否則無(wú)法返回callable_iterator    print(callable(t))    for i in t1:        print(i) # 它每次在調(diào)用的時(shí)候,都會(huì)調(diào)用__call__函數(shù),并且最后輸出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

在文件讀取時(shí)使用:

import os import hashlib def bytes2human(n):    # 文件大小字節(jié)單位轉(zhuǎ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函數(shù)的使用方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站欄目:Python中iter函數(shù)的使用方法
標(biāo)題鏈接:http://weahome.cn/article/jpogdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部