【问题标题】:How to pass an input of a function into another function without the input being asked twice?如何在不询问两次输入的情况下将函数的输入传递给另一个函数?
【发布时间】:2021-01-29 14:58:41
【问题描述】:

如何在不询问两次输入的情况下将函数的输入传递给另一个函数。我的代码如下所示:

def function():
    signal_0 = 1
    signal_1 = input("0 or 1?")
    select = 0
    output = (not select and signal_0) or (select and signal_1)
    return output, select

def connection(func): 
    eingang = func()[0]
    return eingang 


print(function())
print(connection(function))

我希望发生的是,print(connection(function)) 不再询问input("0 or 1?")

它应该已经在function 中询问了输入,所以如果我在connection(function) 中有1 作为输入signal_1 = 1

【问题讨论】:

  • “它不再问...”是什么意思?当我运行它时,它会问我...
  • 每次运行function,它都会要求输入。如果你不希望这种情况发生,你需要做一些事情,比如在函数之外请求输入,并将signal_1 作为参数传入。

标签: python function input


【解决方案1】:

一个简单的方法是:

def function(flag=1):
    signal_0 = 1
    if flag==0:
        signal_1 = input("0 or 1?")
    select = 0
    output = (not select and signal_0) or (select and signal_1)
    return output, select

def connection(func): 
    eingang = func()[0]
    return eingang 


print(function(0))


print(connection(function))

【讨论】:

    【解决方案2】:

    您可以使用global variable

    signal_1 = None
    
    def function():
        global signal_1
        signal_0 = 1
        signal_1 = input("0 or 1?") if not signal_1 else signal_1
        select = 0
        output = (not select and signal_0) or (select and signal_1) # check if the value is already initialized. If yes then don't take input
        return output, select
    
    def connection(func): 
        eingang = func()[0]
        return eingang 
    
    
    print(function())
    print(connection(function))
    

    【讨论】:

    • 使用全局变量通常不受欢迎,因为它们会导致命名空间污染。
    • 是的,这是真的@DapperDuck
    【解决方案3】:

    您需要确保以下几点:

    1. 实例化一个全局变量 - 以保存输入 - 为无。
    2. 在“function”内部,使用关键字“global”对全局范围内的变量进行操作。
    3. 在“函数”内部创建一个条件:检查全局变量是否仍然具有“无”值 - 如果从未调用函数,就会出现这种情况。

    以下是一个示例实现:

    signal_1= None
    
    def function():
        global signal_1
        signal_0 =0
        signal_1 = input("0 or 1?") if signal_1==None else signal_1
        select = 0
        return (not select and signal_0) or (select and signal_1), select
    
    

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多