在一个py脚本里调用另一个py脚本的问题
各位大虾好!小虾遇到了一个问题。
假设我有这样的一个脚本,叫one.py,内容如下:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
a = [1, 2, 3, 4, 5, 6, 7]
b = []
c = []
d = []
def JJJ():
global x
x = i + 4
def QQQ():
global y
y = i * 2
def KKK():
global z
z = x - y
if __name__ == "__main__":
for i in a:
JJJ()
b.append(x)
QQQ()
c.append(y)
KKK()
d.append(z)
print("======================")
print (b)
print (c)
print (d)
启动之后,是可以获得正确的结果的:
[root@zabbix opt]# python one.py
======================
[5, 6, 7, 8, 9, 10, 11]
[2, 4, 6, 8, 10, 12, 14]
[3, 2, 1, 0, -1, -2, -3]
[root@zabbix opt]#
现在我打算写一个two.py,在two.py里获取到b、c、d的值,于是乎我就写了一个two.py:
!/usr/bin/env python
# -*- coding: UTF-8 -*-
import one
from one import a,b,c,d,JJJ,QQQ,KKK
for i in a:
JJJ()
b.append(x)
QQQ()
c.append(y)
KKK()
d.append(z)
print ("======================")
print (b)
print (c)
print (d)
结果执行的时候,出现这个错误:
[root@zabbix opt]# python two.py
======================
[]
[]
[]
Traceback (most recent call last):
File "two.py", line 7, in <module>
JJJ()
File "/opt/one.py", line 12, in JJJ
x=i+4
NameError: global name 'i' is not defined
于是我就把i添加到from one import a,b,c,d,JJJ,QQQ,KKK里,结果再启动。成了这样:
[root@zabbix opt]# python two.py
======================
[]
[]
[]
Traceback (most recent call last):
File "two.py", line 4, in <module>
from one import i,a,b,c,d,JJJ,QQQ,KKK
ImportError: cannot import name i
请问我哪里错了?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你的代码很难理解,并且看不出目的何在
在函数里使用循环变量就是很奇怪的事情,应该当作参数传进去,
从报错可以看出,三个空列表证明了,代码确实执行了,
报错的原因是因为,参与运算要用到的变量i在one.py的 if name == '__main__' 模块下面,不会被导入,
虽然在two.py中也有一个i变量,但是他不会参与运算。因为他引用的是one.py模块中的i
你的one.py里的i是放在if name == "__main__":里的。if name == "__main__":的意思是,非引用情况下,就是说one.py作为主程序、你直接执行one.py时执行下面的代码。当你在two.py引用one.py时,if name == "__main__":就不成立了,你就得不到i。
你想通过impor引用i,但是i不是one.py的全局变量,无法引用。
现在,如果是我,我就给JJJ,QQQ,KKK三个方法添加一个参数,如:
def QQQ(i):
你要用这个方法的时候,把参数传进去就好了。