【问题标题】:iterative parameter inside a function - Python函数内的迭代参数 - Python
【发布时间】:2020-07-01 08:44:18
【问题描述】:

我正在构建一个接收“块”数据并迭代处理它们的函数。 我的问题是如何保存下一次运行的最后一个参数,同时在第一次运行时仍然对其进行初始化。

示例:

def IterativeFunction(X):      #X is the received vector (chunk of data)

    for i in range(len(X)):
        Y[i] = 0.1 * X[i] + 0.9 * Xn1
        Xn1 = X[i]                     #This is the iterative part

     return(Y)

主函数将接收'Y',然后发送下一个'块'。 因此,我需要 IterativeFunction 再次运行,并将“Xn”初始化为:“Xn1 = X[i](上次运行)”。 我仍然需要在第一次运行时将 Xn1 初始化为“Xn1 = 0”。

建议的解决方案:
我当然可以返回 "Xn1" 并从 "main" 中再次接收它,但我确信有更好的方法来实现这一点。

【问题讨论】:

    标签: python function filter iteration global


    【解决方案1】:

    您可以将Xn1 传递给函数,并在每次调用函数时将Xn1Y 一起返回。第一次,它会丢失或None(或您选择的任何其他默认值),然后您对其进行初始化。

    p.s 请注意,Y 从未初始化,Xn1 在原始代码中也是如此。

    素描-

    def IterativeFunction(X, Xn1=None):
        if Xn1 is None:
           Xn1 = initialize
        for i in range(len(X)):
            Y[i] = 0.1 * X[i] + 0.9 * Xn1
            Xn1 = X[i]
    
         return(Y, Xn1)
    

    【讨论】:

      【解决方案2】:

      你可以使用一个变量来记录你运行了多少次函数,所以第一次运行可以运行一段代码,其余的运行如下:

      run_times = 0
      def IterativeFunction(X):      #X is the received vector (chunk of data)
      run_times += 1
      if run_times == 1:
        for i in range(len(X)):
           Y[i] = 0.1 * X[i] + 0.9 * Xn1
           Xn1 = X[i]                     #This is the iterative part
      else:
         blablah
      
      
       return(Y)
      

      不确定你希望它以哪种方式工作,但你明白了

      【讨论】:

        【解决方案3】:

        感谢以上回答。我把你的想法合并成这样:

        def Main_function():
        
           #init
           Xn1 = 0
           
           #Code part
           ...code code code...
        
           call IterativeFunction( VectorX , Xn1)
        
           end 
        
        def IterativeFunction( VectorX , Xn1):
           
           for i in range(len(X)):
              Y[i] = 0.1 * X[i] + 0.9 * Xn1
              Xn1 = X[i]                    
           return (Y , Xn1)
        

        我的问题是关于实现这一点的其他方法,比如全局参数?还是这是最推荐的解决方案?

        【讨论】:

        • 全局参数通常被认为是代码异味,除非你正在编写一个快速的脏脚本。顺便说一句,如果其他答案对您有所帮助,那么即使您不想接受任何特定的答案,也可以为他们投票是一种很好的礼仪。
        猜你喜欢
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 2012-10-04
        • 2011-02-24
        • 2018-03-29
        • 2013-05-20
        相关资源
        最近更新 更多