3 24迭代器生成器作業

2022-08-17 22:57:15 字數 3127 閱讀 4464

編寫課上講解的有參裝飾器

def auth(db_type):

def inner(*args, **kwargs):

name = input('name: ').strip()

pwd = input('pwd: ').strip()

if db_type == 'file':

print('檔案驗證登入')

if (name, pwd) == ('egon', '123'):

print('登入成功')

res = func(*args, **kwargs)

return res

else:

print('使用者名稱或密碼錯誤')

elif db_type == 'file':

print('檔案驗證登入')

if (name, pwd) == ('egon', '123'):

print('登入成功')

res = func(*args, **kwargs)

return res

else:

print('使用者名稱或密碼錯誤')

return inner

@auth('file')

def index():

print('123')

index()

還記得我們用函式物件的概念,製作乙個函式字典的操作嗎

來來來,我們有更高大上的做法,在檔案開頭宣告乙個空字典

然後在每個函式前加上裝飾器,完成自動新增到字典的操作

cmd_dict = {}

def inner(*args, **kwargs):

index = len(cmd_dict) + 1

cmd_dict[str(index)] = (tips, func)

return inner

for func in my_func.values():

func()

def login():

print('this is login')

def register():

print('this is register')

while 1:

for k, v in cmd_dict.items():

print(f'-'.center(20, '-'))

cmd = input('請輸出編號:').strip()

if cmd not in cmd_dict:

print('重新輸入')

continue

func = cmd_dict.get(cmd)[1]

func()

編寫日誌裝飾器,實現功能如:一旦函式f1執行,則將訊息2017-07-21 11:12:11 f1 run寫入到日誌檔案中,日誌檔案路徑可以指定。注意:時間格式的獲取

import time

def my_log(file_path):

def inner(*args, **kwargs):

now = time.strftime('%y-%m-%d %h:%m:%s')

msg = f' run\n'

with open(file_path, 'at', encoding='utf-8') as f:

f.write(msg)

res = func(*args, **kwargs)

return res

return inner

@my_log('log.txt')

def f1():

print('i am f1')

f1()

4、基於迭代器的方式,用while迴圈迭代取值字串、列表、元組、字典、集合、檔案物件
my_obj = '2333'

my_obj_i = my_obj.__iter__()

while true:

try:

print(my_obj_i.__next__())

except stopiteration:

break

my_obj = [1,2,3]

my_obj_i = my_obj.__iter__()

while true:

try:

print(my_obj_i.__next__())

except stopiteration:

break

my_obj = (4,5,6)

my_obj_i = my_obj.__iter__()

while true:

try:

print(my_obj_i.__next__())

except stopiteration:

break

my_obj = 

my_obj_i = my_obj.__iter__()

while true:

try:

print(my_obj_i.__next__())

except stopiteration:

break

my_obj = 

my_obj_i = my_obj.__iter__()

while true:

try:

print(my_obj_i.__next__())

except stopiteration:

break

with open('aaa.txt', mode='rt', encoding='utf-8')

while true:

try:

print(f.__next__())

except stopiteration:

break

5自定義迭代器實現range功能

def my_range(start, end, step=1):

while start < end:

yield start

start += step

g = my_range(1,5)

for i in g:

print(i)

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器,生成器

迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...

迭代器 生成器

迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...