【发布时间】:2023-02-22 21:42:23
【问题描述】:
我有两个功能:
# function to get number of wanted atom
def atom_number_grabber(sum_formula, wanted_atom):
match = re.match(r"([A-Z][a-z]*)([0-9]*)", sum_formula, re.I)
if match:
items = match.groups()
if items[0] == wanted_atom:
atom_number = items[1]
if not atom_number:
atom_number = "1"
return atom_number
else:
pass
和
#function to iterate over all elements
def iterator(sum_formula_list, atom_number_grabber, wanted_atom):
for sum_formula in sum_formula_list:
return atom_number_grabber(sum_formula, wanted_atom)
但是,当我使用迭代器函数时,它不会遍历列表中的所有元素
test_list = ["C25", "H32", "O8"]
iterator(sum_formula_list = test_list, atom_number_grabber = atom_number_grabber, wanted_atom = "O")
输出:
期望的输出:
8
令我惊讶的是,该函数仅遍历第一个元素;因此,如果我将 wanted_atom 更改为“C”,代码将正常工作:
iterator(sum_formula_list = test_list, atom_number_grabber = atom_number_grabber, wanted_atom = "C")
输出
25
【问题讨论】:
-
for循环中的无条件return将在第一次迭代时结束该循环。 -
谢谢,你是对的!
标签: python loops for-loop jupyter