我是python的新手,我正在尝试将一些值从一个文件导入另一个文件。 我希望我的“程序”从main_file.py转到其他文件,如calculator.py,然后再回到main_file.py
为此,我决定创建一个变量,previous_runned,其值为's'。 当计算器被激活时,通过命令,它将选择该变量 (然后将它返回给main_file.py,它将检查变量的值,然后跳过它自己脚本的某些行,如果变量previous_runned的值为's')......:
import os
file_path = "calc.py"
os.system(file_path)
...然后calc.py将从main_file.py ...中选择变量:
import previously_runned from main_file
....返回:
File "C:\Users\Kevin\Prog\Calc.py", line 72, in <module>
import main_file
ImportError: No module named main_file
感谢您的帮助!
答案 0 :(得分:5)
执行os.system()
时,它是一个完全独立的Python进程;它不会与实际运行os.system()
调用的Python实例共享任何变量。这意味着,如果您从calc.py更改previous_runned,它将不会反映在您的主文件中。
你真正想要使用的是功能;功能是比模块更好的控制流单元。听起来你可能还没有使用Python,所以我觉得你现在应该坐得紧 - 你正在尝试的是一个很好的迹象表明你做得很好,但是直到你才真正有意义。很舒服地定义和调用函数。
坚持下去! Python非常棒。
答案 1 :(得分:1)
我想要我的&#34;程序&#34;从main_file.py转到其他文件,比如 calculator.py,然后回到main_file.py
这是一个简单的例子,在main.py中开始执行;它从calc.py调用一个函数。函数返回后,执行将返回到main.py的下一行
james@brindle:tmp$cat main.py
import calc
value1 = "10"
value2 = "20"
def main():
sum = calc.add(value1, value2)
print sum
if __name__ == "__main__":
main()
james@brindle:tmp$cat calc.py
def add(value_a, value_b):
print "In ur calc.py, doin ur sumz"
return value_a + value_b
james@brindle:tmp$python main.py
In ur calc.py, doin ur sumz
1020
请注意,main.py
中的calc.py
内部未定义的内容可以从calc.py
访问 - 它反过来使main.py
内的内容可以从{{1}}内部访问{{1}} 1}}。
答案 2 :(得分:0)
正如AdamKG已经指出的那样,你需要功能。您有两个选项,要么使calc.py包含该函数并导入该函数,要么在主文件中包含该函数。例如:
main.py
def calc(var1,var2,var3):
ans1 = var1 + var2
...
return(ans1,ans2,ans3)
var1 = ...
var2 = ...
var3 = ...
ans1,ans2,ans3 = calc(var1,var2,var3)
我可以推荐的最好的python教程/参考可能是官方的: docs.python.org/tutorial /
答案 3 :(得分:0)
我想让我的“程序”从main_file.py转到其他文件,比如calculator.py,然后再回到main_file.py
因此,在main_file.py
中,您import calculator
,然后调用calculator.py
中定义的函数,并将其所需的信息(来自main_file
的变量)作为参数传递给功能。
答案 4 :(得分:0)
os.system()执行作为子shell中的参数提供的命令。这意味着它会生成一个执行命令的新进程,并且不会共享调用进程的变量。使用类和函数可以更好地完成您想要实现的目标。
假设你在同一个文件夹中有calc.py和main.py,这是一个用函数执行此操作的简单示例。请注意,此示例仅用于解释,它使用糟糕的编程实践,如可以避免的全局变量。
<强> calc.py 强>
var1 = None
var2 = None
def set_variables(a,b):
global var1, var2
var1 = a
var2 = b
def calculate(s):
if s=='add':
print var1 + var2
elif s=='sub':
print var1 - var2
elif s=='div':
print var1/var2
elif s=='mul':
print var1*var2
else:
print "Invalid Operation"
<强> main.py 强>
from calc import *
set_variables(4,5)
calculate('add')
raw_input()
您可以看到我们如何从calc.py
调用main.py
中的代码而不会产生任何新进程。
这是使用类的另一个例子。这更清晰,结构更好,不会使用全局变量等不良做法。
<强> calc_class.py 强>
class Calculator:
def __init__(self,s):
#init code
self.s = s
def __str__(self):
return self.s
def add(self,a,b):
return (a + b)
def sub(self,a,b):
return (a-b)
def div(self,a,b):
return (a/b)
def mul(self,a,b):
return (a*b)
<强> main_class.py 强>
from calc_class import *
calc = Calculator('My Calc')
print calc.add(40,2)
print "My name is %s "%calc
用法 -
d:\ vikesh \ personal \ stuff&gt; python main.py
9
d:\ vikesh \ personal \ stuff&gt; python main_class.py
42个
我叫My Calc