,試圖實現C-Python中的for循環試驗後,下面的功能被開發:爲什麼我的本地人不在rof之外更新?
import sys
def rof(init, cond, post):
init, cond, post, context = compile(init, '<rof>', 'exec'), \
compile(cond, '<rof>', 'eval'), \
compile(post, '<rof>', 'exec'), \
sys._getframe(1)
context = context.f_globals, context.f_locals
exec(init, *context)
while eval(cond, *context):
yield None
exec(post, *context)
正如任何程序員都知道,需要被測試了新的功能,以確保它的工作原理:
設置
class Employee:
def __init__(self, employee_id, category, hired, salary, years):
vars(self).update(locals())
def __repr__(self):
return '{}({})'.format(self.__class__.__name__,
', '.join(map(repr, self)))
def __iter__(self):
yield self.employee_id
yield self.category
yield self.hired
yield self.salary
yield self.years
database = [Employee(123, 'P', 2014, 2000, 0),
Employee(234, 'F', 2000, 20000, 14),
Employee(123, 'F', 2010, 10000, 4)]
的代碼運行,而無需在某些情況下錯誤(如下面的一個):
試驗1
for _ in rof('a = 0', 'a < len(database)', 'a += 1'):
employee_id = database[a].employee_id
for _ in rof('b = len(database) - 1', 'b > a', 'b -= 1'):
if database[b].employee_id == employee_id:
print(database[b], 'is being removed.')
del database[b]
然而,當循環是一個單獨的功能,這是行不通的。
試驗2
def remove_duplicates(database):
a = b = int
for _ in rof('a = 0', 'a < len(database)', 'a += 1'):
employee_id = database[a].employee_id
for _ in rof('b = len(database) - 1', 'b > a', 'b -= 1'):
if database[b].employee_id == employee_id:
print(database[b], 'is being removed.')
del database[b]
remove_duplicates(database)
一個錯誤,而不是(TypeError: list indices must be integers, not type
)generatated。
我們都同意,這個代碼不Python的,但任何人都可以找出是什麼原因造成的問題,以及如何解決它?
請問什麼原因究竟是什麼你想達到這種行爲? –
請包含完整的Traceback。 – dano
你想用'a = b = int'達到什麼目的?我確信這就是它的根本原因。 –