如何在脚本之间来回传递信息

2024-06-28 22:15:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在两个脚本之间来回传递信息。一种是获取用户输入,另一种是对用户输入进行一些修改,然后返回到第一种,打印出修改

#del2

def fun():
    return int(user_input)+1

#script to run

user_input=input('some number')
from del2 import fun

print(fun())

因此,当我们运行脚本时,用户会给出一些输入,下一行会运行另一个脚本,它会在用户输入的值上添加一个值1,然后我们打印出修改后的值。但是,您似乎无法在一个脚本中定义变量,并将已定义的变量转移到另一个脚本。因此,当我尝试上面的方法时,我得到了这个错误:NameError: name 'user_input' is not defined。我试过看其他关于这方面的帖子,但它们都使用tkinter,而且都有点太复杂/让我难以理解。所以我做了一个非常简单的例子,试图了解这一切是如何运作的

编辑: 我不想再发帖子了,因为它是关于同一个问题的。如果我必须定义每个函数使用的每个输入,那么如果您有多个输入,那么它将变得非常拥挤。即

#del2
def fun(user_input):
    return int(user_input)+1

def fun2(user_input2):
    return int(user_input2)+1

def fun3(user_input3):
    return int(user_input3)+1

def fun4(user_input4):
    return int(user_input4)+1

def fun5(user_input,user_input2,user_input3,user_input4):
    return fun(user_input)+fun2(user_input2)+fun3(user_input3)+fun4(user_input4)

#script to run

user_input=input('some number')
user_input2=input('some number')
user_input3=input('some number')
user_input4=input('some number')
from del2 import fun5

print(fun5(user_input,user_input2,user_input3,user_input4))

有没有更好的方法来做到这一点,所以fun5不会变得非常长,如果你有多个输入


Tags: 用户脚本numberinputreturndefsomeint
2条回答

您可以使用global关键字和由不同函数访问的导入模块中的全局变量来执行此操作。举一个简单的例子,只需对全局存储的总数进行相加或相减:

# tally.py
total = 0

def add(n):
    global total
    total += n

def subtract(n):
    global total
    total -= n

# test_tally.py
import tally
tally.add(5)
tally.subtract(1)
print(tally.total)

然而,global variables are bad。我们通常不考虑在模块之间来回传递数据。导入模块在导入时全部执行,因此数据只能传递给导入模块内的函数或其他对象

相反,模块通常包括classes,可用于生成可存储状态的对象。数据可以传递到这些对象并存储在其中。然后,对象可以对数据进行操作,并通过调用对象的不同方法返回不同的结果。这应该是这样写的:

# tally.py
class Tally(object):
    def __init__(self):
        self.total = 0
        
    def add(self, n):
        self.total += n
        
    def subtract(self, n):
        self.total -= n

# test_tally.py
from tally import Tally
tally = Tally()
tally.add(3)
tally.subtract(4)
print(tally.total)

You need to define fun so it takes the variable as a parameter: def fun(user_input) then pass that variable to the imported function.

另外,如果您希望在调用user_input函数后更改fun()的值,则需要执行以下操作:

#del2

def fun(user_input): 
    return int(user_input) + 1

#要运行的脚本

user_input = input('some number')
from del2 import fun

user_input = fun(user_input)
print(user_input)

编辑: fun()函数不仅仅用于user_input。因此,您可以对其他变量使用相同的fun()函数

#del2

def fun(any_input): # i changed the variables name just to be clear
    return int(any_input) + 1

#要运行的脚本

user_input = input('some number')    
user_input2 = input('some number')

from del2 import fun


user_input = fun(user_input)
user_input2 = fun(user_input2)
print(user_input + ", " + user_input2)

您可以将输入变量添加到数组中,并执行如下操作

#del2

def fun(any_input): 
    return int(any_input) + 2
def fun1(any_input): 
    return int(any_input) * 2
def fun2(any_input): 
    return int(any_input) // 2 
def fun3(any_input): 
    return int(any_input) - 2

def fun5(input_array): 
    functions = [fun, fun1, fun2, fun3]
    final = 0
    if len(input_array) != 4:
        raise Exception("Not enough functions for inputs")
    for i in range(len(input_array)):
        final += functions[i](input_array[i])
    return final

#要运行的脚本

user_inputs = []
user_inputs.append(input('some number 0: ')) #you can use a for loop here too
user_inputs.append(input('some number 1: '))
user_inputs.append(input('some number 2: '))
user_inputs.append(input('some number 3: '))

from del2 import fun5

user_inputs = fun5(user_inputs)
print(user_inputs)

相关问题 更多 >