【问题标题】:calling a function within def() outside of it [duplicate]在 def() 之外调用函数[重复]
【发布时间】:2021-01-13 05:19:10
【问题描述】:

我怎样才能到达 def 函数中的元素。我想使用 def 函数内部的p 来计算mean

import numpy as np 
k= np.array([1,2,3,4,5,6])
def func():
    p = k + 5
    l = k + 25
    
func()
mean = p + 10

【问题讨论】:

  • 大声笑?在那个函数中返回变量怎么样?
  • 请先花点时间学习基本的 Python,然后再做任何涉及 numpy 或类似库的事情。
  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题?”与 Stack Overflow 无关。首先,您需要学习使用当前工具的基本技术。完成函数教程;看看如何将值传入和传出函数。
  • @AndersonGreen 你绝对不应该那样做。这甚至没有真正访问函数外部的局部变量。它在由全局名称引用的对象上创建一个属性。这只是使用可变全局状态的一种令人困惑的迂回方式,一开始是一种不好的做法。相反,函数应该返回调用者需要的数据..

标签: python list function numpy user-defined-functions


【解决方案1】:

函数执行完毕后,函数内所有对变量的引用都会被清除并从堆栈中移除。要获取函数中的值,您必须使用return 关键字。

例子:

def test_return_string():
    return "Hello World"

my_var = test_return_string()  # "Hello world" is returned and stored in my_var
print(my_var)  # Prints "Hello world"

当您没有为函数定义return 语句时。该函数默认返回None

请注意,返回函数将结束其执行。

TL;DR - 要获取变量 p,您只需在函数末尾输入 return p

【讨论】:

    【解决方案2】:
    import numpy as np 
    k= np.array([1,2,3,4,5,6])
    def func(k):
        p = k + 5
        l = k + 25
        return(p,l)
        
    p,l= func(k)
    mean = p + 10
    

    【讨论】:

      【解决方案3】:
      import numpy as np 
      k= np.array([1,2,3,4,5,6])
      def func(k):
          p = k + 5
          l = k + 25
          return p
          
      
      mean = func(k) + 10
      

      在这里,我尝试制作更紧凑的示例,与您的帖子相关的更改更少。

      当你定义一个函数时,通常你希望将一个变量作为参数传递,以使输出与变量相关。所以你def func(variable):,这里是def func(k):。这是第一个“错误”。

      然后,如果您希望函数返回结果,则需要return 语句。这是第二个“错误”。

      最后,如果您想使用函数返回的内容,您需要将结果存储在变量中,或者“就地”使用它。

      func(k) 不打印(在 python shell 中除外)也不给变量赋值。它只是在运行,仅此而已。

      print(func(k)) 在终端中显示结果(对于脚本/python 页面),其中 p = func(k)func(k) 返回的内容分配给变量 p。然后您可以使用p 计算平均值为mean = p + 10。或者你可以直接使用func(k),因为它为你的平均计算提供了与p相同的值(因为p = func(k)

      最后,在你的函数计算中 l 现在似乎没用了。所以也许考虑删除它或在其中使用它。

      【讨论】:

      • 你能简单解释一下你在这里做了什么吗? (我知道这似乎很明显)
      • 嘿!请参阅我的编辑。如果这有帮助,请考虑接受答案;)(我的答案左上角的灰色勾号)
      • 看起来这个问题已经关闭,所以 OP 不能。您的答案出现在我的审核队列中,我投票不删除它。
      • 你确定吗?我很确定即使在问题关闭后我也接受了一些答案(但无法发布新答案)。但我可能错了。无论如何,问题不大;)
      猜你喜欢
      • 2013-12-22
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多