编程初学者在这里
我正在尝试在函数中提取一个 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 语句而不是全局变量,但如果你想使用全局变量,你应该在函数外部声明它们。