在 Python 中的函数中为 for 循环



编程初学者在这里

我正在尝试在函数中提取一个 for 循环的变量以用于"Di = "方程,如下所示:

def fun1():
global de, ep
with open("Di_Tub.csv", "r") as f3:
reader3 = csv.reader(f3, delimiter=';')
i3 = 0
for row3 in reader3:
i3 = i3 + 1
if i3 >= 1:
if row3[0] == DN:
if row3[1] == SCH:
de = float(row3[2])
ep = float(row3[3])
f3.close()
fun1()
Di = (de - 2*ep)/1000

我得到的是这个错误:

Di = (de - 2*ep)/1000
NameError: name 'de' is not defined

我做错了什么?

当您将全局对象标记为全局时,您需要在函数外部具有全局对象:

de = 0.0
ep = 0.0
def fun1():
global de, ep
with open("Di_Tub.csv", "r") as f3:
reader3 = csv.reader(f3, delimiter=';')
i3 = 0
for row3 in reader3:
i3 = i3 + 1
if i3 >= 1:
if row3[0] == DN:
if row3[1] == SCH:
de = float(row3[2])
ep = float(row3[3])
# f3.close() # you don't need this, "with open" does this for you
fun1()
Di = (de - 2*ep)/1000 # this will now work

你应该在函数外部定义变量 所以它应该是:

global de, ep
def fun1():
with open("Di_Tub.csv", "r") as f3:
reader3 = csv.reader(f3, delimiter=';')
i3 = 0
for row3 in reader3:
i3 = i3 + 1
if i3 >= 1:
if row3[0] == DN:
if row3[1] == SCH:
de = float(row3[2])
ep = float(row3[3])
f3.close()
fun1()
Di = (de - 2*ep)/1000

我建议你使用 return 语句而不是全局变量,但如果你想使用全局变量,你应该在函数外部声明它们。

最新更新