【问题标题】:Can i use an equation as a parameter in python我可以在python中使用方程作为参数吗
【发布时间】:2020-02-09 04:09:59
【问题描述】:

我正在用 python 制作一个图形创建程序,需要将一个方程作为参数传递给函数(根据创建图形的需要),在该方程中,我需要一些在函数运行时发生变化的变量。

感谢您帮助它的 mutch。

我试图找到解决方案,但我不是那么好,所以我不明白,如果可以的话,还有什么解释。

#inside a class and this is also simplified.
def function(self, e):
    x = 0
    for i in range(100):
        print(e)
        x += 1

classObj.function(x * 2)


我希望您能够在 e 参数中添加 x 变量,以便我可以使其更灵活,但该变量是为循环创建的函数。

【问题讨论】:

  • x * 2 不是等式;这是一种表达方式。该表达式在 function 被实际调用之前被评估; e 是该评估的结果
  • 谢谢,但你知道如何使用一个函数,但其​​中有不同的表达式。如果你知道我很高兴你回答了。
  • 以我有限的知识,做def function(self, x, operator, e)是否可以接受,然后你可以定义x,e,甚至是*或+之类的运算符。

标签: python function variables parameters


【解决方案1】:

在调用函数之前评估参数表达式。

如果你想传递动态的东西,使用回调函数。如果函数很简单,可以写成 lambda。

def function(self, f):
    for i in range(100):
        print(f(i))

classObj.function(lambda x: x * 2)

【讨论】:

    【解决方案2】:

    由于您还没有定义x,当您调用classObj.function() 时会抛出错误。您可以将等式作为字符串传递并调用exec()eval()

    例如:

    def function(self, e):
        x = 0
        for i in range(100):
            print(exec(e))
            print(eval(e))# does same thing as above line
            x += 1
    
    classObj.function("x * 2")
    

    eval()exec() 的区别在于eval()eval使用一个表达式,但exec() 可以运行大量代码。我建议只使用必要的东西,所以exec() 将是矫枉过正。

    也许请参阅 this post 将表达式传递给函数,但我不确定这是否是您想要的。

    【讨论】:

      【解决方案3】:

      我不确定我是否正确理解了您的问题,但在 Python 中,您可以将函数作为参数传递。为了描述它,我们说函数是一等公民,或者说一种语言支持更高阶的函数。

      以下是如何实现它的示例:

      class YourClass:
          def function(self, e):
              x = 0
              for i in range(100):
                  result = e(x)  # you can call a function passed as a parameter
                  print(result)  # do something with a result
                  x += 1
      
      
      def multiply_by_2(x):
          return x * 2
      
      
      def add_2(x):
          return x + 2
      
      
      obj = YourClass()
      obj.function(multiply_by_2)  # just use function name without parenthesis
      obj.function(add_2)  # you can also pass different function!
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多