【问题标题】:Pass two variables from different functions into a new function将来自不同函数的两个变量传递给一个新函数
【发布时间】:2018-10-21 15:56:32
【问题描述】:

我四处寻找可以帮助解决我的情况的解决方案,但找不到任何我能理解的简单或基本技术。如果有任何您认为可以为我指明正确方向的有用网站或帖子,请发布。

我制作了两个相同但用于不同目的的功能,例如登录系统 - 每个用户一个功能。 在每个函数中,都有一个我想“传递”给新函数的变量(这与其他函数完全不同)。

我尝试过使用 return 和 global 函数,但它们不起作用,而且我认为我没有正确使用它们。下面是我的情况的一个更简单的例子:

def pizza():
   topping = input("fav topping: ")
def pizza1():
   topping1 = input("fav topping: ")
def something(topping,topping1):
   print("user1's fav topping is",topping)
   print("user1's fav topping is",topping1)
pizza()
pizza1()
something()

我希望“topping”和“topping1”进入“something”功能。 这段代码不是我真正的编码情况,而是一个更简单的版本,因此需要使用函数并传递这些变量

谢谢

【问题讨论】:

  • 您可能会发现通读Defining Functions 上的 Python 教程部分会有所帮助……
  • return topping in pizza,然后将其传递给something

标签: python python-3.x


【解决方案1】:

您的函数不返回任何内容。如果您的目的是为函数的返回分配一个变量:

def pizza():
    return input("fav topping: ")
def pizza1():
    return input("fav topping: ")
def something(topping1,topping2):
    print("user1's fav topping is",topping)
    print("user1's fav topping is",topping1)

topping1 = pizza()
topping2 = pizza1()
something(topping1,topping2)

当你在函数中声明一个变量时,它只存在于局部空间中,不能在全局空间中调用。下面的示例显示了当您将其声明为全局变量时会发生什么。

def pizza():
    global topping
    topping = input("fav topping: ")
def pizza1():
    global topping1
    topping1 = input("fav topping: ")
def something():
    print("user1's fav topping is",topping)
    print("user1's fav topping is",topping1)
pizza()
pizza1()
something()

>> fav topping: 1
fav topping: 2
user1's fav topping is 1
user1's fav topping is 2

一旦您将其声明为global,函数something 中的局部空间将能够将它们用作全局变量,即使您没有在函数中传递它们。

【讨论】:

    【解决方案2】:

    您需要做的就是让您的函数返回一个值。然后使用它返回的值来调用新函数。

    def pizza():
       topping = input("fav topping: ")
       return topping
    
    def pizza1():
       topping1 = input("fav topping: ")
       return topping1
    
    def something(topping, topping1):
       print("user1's fav topping is",topping)
       print("user1's fav topping is",topping1)
    
    val = pizza()
    val1 = pizza1()
    something(val, val1)
    

    如果您希望pizza 函数调用pizza1,然后pizza1 调用something,您可以将代码重组为:

    def pizza():
       topping = input("fav topping: ")
       pizza1(topping)
    
    def pizza1(prev_topping):
       topping = input("fav topping: ")
       something(prev_topping, topping)
    
    def something(topping, topping1):
       print("user1's fav topping is",topping)
       print("user1's fav topping is",topping1)
    
    pizza()
    

    【讨论】:

    • 说我决定从“pizza1”函数中调用“something”函数,从“pizza”函数中调用“pizza”函数然后我将如何传递变量?
    • 好吧,如果您期望 something() 函数传入两个变量,那这真的没有意义。您可以使用全局变量,但不建议使用这些变量,因为它开始起作用使用得越多就越复杂。您可以做的是让pizza() 调用pizza1() 将其顶部传递给pizza1() 函数。或者由于此代码的结构是披萨的配料,您可以将配料存储在传递给something 的列表中。
    • 您能否将其作为代码添加到您的答案中,以便我了解其结构?谢谢
    • @user836420 我又添加了一个示例,但是对于如何调用函数和传递变量,您可以使用许多选项。最好对函数进行结构化,以便它们可重用且模块化以用于手头的任务。
    【解决方案3】:

    你要做的第一件事是:命名静态变量

    static topping
    static topping1
    

    然后,当您调用函数时,您必须在 () 中写入要打印的变量。

    def something(a,b):
        print(a)
        print(b)
    something(a,b)
    

    最后一行代码告诉程序打印变量 a 和 b。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多