【问题标题】:Passing of variables between two functions in PythonPython中两个函数之间的变量传递
【发布时间】:2013-11-06 16:43:48
【问题描述】:

有没有办法在 Python 中的两个函数之间传递变量而不必使用另一个函数,比如 main() ?

def fun1 (arg1:int) -> None: 
    random1 =  10 * arg1
    return(random1)

def fun2 (bounds:tuple) -> int: 

    random2 = fun1 (random1)

    if random2 > bounds [1] or random2 > bounds [2]: 
        return (random2)

    else: 
        pass

基本上,我试图将变量 random 从 fun1 传递到 fun2。但是 Eclipse 一直说:“未定义的变量:随机”。

有什么想法吗?

【问题讨论】:

  • 你想传递什么值 fun1()?未定义 random 值。
  • 注意:您可以完全删除else: pass 行。
  • 你的函数定义def fun1 (arg1:int) -> None:看起来不像是有效的python,是吗?

标签: python python-3.x parameter-passing


【解决方案1】:

在函数之外(在函数定义之前),您可以通过分配一些东西来声明random 的实例。 (例如:random = none)然后,在您希望使用它的每个功能中,它都可以使用。如有必要,您甚至可能想要包含该行

global random

在每个使用它的函数中,以便清楚地表明您正在使用全局变量。 (当然,就其本质而言,使用全局变量并不容易维护,并且违背了面向对象和过程编程的做法。)

【讨论】:

  • 谢谢!这正是我想要的。但是出于好奇,有没有更好的方法将一个变量的值传递给另一个函数?
  • @tradt 在这种情况下什么是“更好”?它确实是一个全局变量,如果它不被传递就可以使用。
  • @tradt:Python 中的函数参数是通过对象引用传递的,因此除非传入的变量是可变对象,否则调用者对该参数所做的任何更改都不会被调用者看到.因此,如果您将字符串、数字或其他不可变对象分配给该变量,则全局变量是您在一个函数中更改另一个函数将使用的变量的唯一选择。 (顺便说一句,我在答案中添加了一个定义全局变量实例的示例。)
  • @RobH:谢谢,我想我现在明白了。在主要使用函数式编程语言之后仍然很难适应 Python。
  • @Simeon Visser:更好的是,可能有一种方法可以在不使用全局变量的情况下将 fun1 的值传递给 fun2。但我想没有;如果 fun1 没有返回任何值,只是用来定义一个变量。
【解决方案2】:

random第一次使用时,fun2中没有定义:

def fun2 (bounds:tuple) -> int: 

    random = fun1 (random) # what value should be passed to fun1 here?

【讨论】:

  • 我正在尝试使用 fun1 来存储变量“随机”的值。因此,如果需要,以后可以在另一个函数 (fun2) 中使用这个值。有没有办法全局存储变量的值?
猜你喜欢
  • 1970-01-01
  • 2019-09-12
  • 2020-06-06
  • 1970-01-01
  • 2019-06-28
  • 2013-04-09
  • 2013-03-07
相关资源
最近更新 更多