【问题标题】:How should I call functions defined outside of the main function?我应该如何调用在主函数之外定义的函数?
【发布时间】:2014-10-14 22:58:32
【问题描述】:

所以我对 python 还很陌生,我正在研究一种算法,我假设有 2 个函数

func1(x)

func2(x)

已经在主函数之外定义了。

现在我想在一个嵌套在另一个内部的主函数中调用这些函数

类似的东西

def funcmain(func1(func2(x)))

它显然不工作我无法让它工作无论如何我想要的。有什么建议吗?

编辑:我的意思是我想输入一个字符串,我希望它先经过func2,然后从func2的返回值经过func1,最后是返回值func1 要经过 func main。我已经分别测试了每个功能,它们按预期工作,但我似乎无法将它们相互连接在一起

【问题讨论】:

  • 呃...这是无效的语法。当您尝试声明第三个参数时,为什么要调用这些函数?
  • 你不能将函数作为未命名的参数传递
  • 我的意思是我要输入一个字符串,我希望它先经过func2,然后func2的返回值经过func1,最后是func1的返回值通过func main。我已经分别测试了每个功能,它们按预期工作,但我似乎无法将它们相互关联

标签: python algorithm function python-3.x nested


【解决方案1】:

我希望这段代码 sn-p 能帮助你澄清事情。

#!/usr/bin/python

def func1(x):
    return x + 1

def func2(x):
    return x + 2

def main(x):
    print func1(func2(x))

if __name__ == '__main__':
    main(0)

输出为 3。

【讨论】:

    【解决方案2】:

    这是你的意思吗?你的问题不太清楚。我假设 x 也是在某个地方全局定义的。

    def funcmain():
        return func1(func2(x))
    

    【讨论】:

      【解决方案3】:

      具有以下功能:

      def func1(x):
          return x+1
      
      
      def func2(x):
          return x*2
      

      您自己可以这样做:func1(func2(3)) 将返回 3 乘以 2 加 1。这是可行的,因为 func1(func2(3)) 本身实际上返回的是一个值,而不是一个函数。

      但是,因为您试图将其作为主函数的基本参数,如下所示:

      def main(func1(func2(x))): #dont do this, this is what you did, it is bad
          return x*3
      

      它不知道该怎么做,因为 x 没有默认值...

      你可以这样做:

      def main(x=func1(func2(1)):
          return x*3
      

      这将对 1 进行适当的数学运算,然后将其分配为 x(因为正如我们之前所见,func1(func2(3))` 将返回函数的结果而不是函数本身,然后将其乘以 3。因为您默认 x 等于一个值(即 func1(func2(1))

      这仍然是不好的做法,因为您默认使用 func1(func2(1) 出来的任何内容。

      你最终可能想要的是更简单的东西:

      def main(x):
           y = func1(func2(x))
           return y*3
      

      或者甚至比这更简单

      def main(x):
          return x*3
      
      #and then just call it like this
      main(func1(func2(1))
      

      【讨论】:

      • 不要那样做。这是用默认值声明 main 的参数,这似乎不是 OP 想要的。
      • 这与不良做法或“不良”无关-在许多情况下完全可以,但这根本不是OP想要的。引入关键字参数只会让您的答案更加混乱。最后一个示例完全违背了main() 函数(调用其他所有内容的主要入口点)约定的要点。
      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多