【发布时间】:2013-10-21 08:33:20
【问题描述】:
所以我正在研究一个有趣的化学项目,我有一个函数可以从文本文件中初始化一个列表。我想做的是让函数用列表替换自己。所以这是我的第一次尝试,随机会或不会起作用,我不知道为什么:
def periodicTable():
global periodicTable
tableAtoms = open('/Users/username/Dropbox/Python/Chem Project/atoms.csv','r')
listAtoms = tableAtoms.readlines()
tableAtoms.close()
del listAtoms[0]
atoms = []
for atom in listAtoms:
atom = atom.split(',')
atoms.append(Atom(*atom))
periodicTable = atoms
它以这种方式被调用:
def findAtomBySymbol(symbol):
try:
periodicTable()
except:
pass
for atom in periodicTable:
if atom.symbol == symbol:
return atom
return None
有没有办法让它工作?
【问题讨论】:
-
不要让函数用列表替换自己。使用列表和函数是不同的——如何调用列表或切片函数? - 并且尝试以不同的方式处理这种情况是混乱的,正如使用代码所示。此外,“随机”不是一个好的错误描述 - 不吞下所有异常可能会提供更好的失败指示。
-
您可能对"memoization functions" 感兴趣,尽管我自己会这样做:
periodicTable = loadPeriodicTable()(比如在程序开始时),因为这里没有明显的缓存或记忆需求。 -
@user2864740 是的,我想过这样做,但我真的很喜欢探索 python 的复杂性,这让这里的一些用户很烦恼。
-
然后查看显示的各种记忆/缓存答案之一。然而,使用记忆/缓存相同的名称总是绑定到一个函数。因此,它总是像函数一样使用 -
for atom in periodicTable()-(带有函数调用和),不同之处在于后续调用返回缓存的数据,而无需从文件中重新加载。