【问题标题】:Calling a function from inside a function从函数内部调用函数
【发布时间】:2017-03-05 14:36:05
【问题描述】:
from numpy import *
from matplotlib.pyplot import *



c = 299792458 # m/s 
lamda = 643.5 *10**-9 # m

def read_file(filename):
    text_array = loadtxt(filename)
    time = text_array[:, 0]
    obs_lambda = text_array[:, 1]
    flux = text_array[:, 2]
    return [flux,time,obs_lambda]


def rad_vel(data):
    v_r = zeros(len(data[2]))
    for i in range(len(data[2])):
        v_r = c*(((data[2][i] - lamda))/(lamda))
    print v_r
    plot(data[1],v_r)
    show()
    return v_r

    test1 = read_file("test.txt")
    print test1

当我调用该函数时,它是 v_r 和时间的维度差异。 len(time) 或 len(data[2]) 是一个具有 5087 个元素的 数组,但 v_r 是一个 标量。不能真正理解 v_r 是一个标量吗?

【问题讨论】:

  • 你为什么要嵌套另一个函数?在任何情况下,rad_vel 都无法访问,因为它位于封闭函数的 return 语句之后。你到底在做什么?
  • 我还能如何调用 rad_vel() 中的 read_file(filename) 来传输时间和 obs_lambda?
  • 我猜你想从read_file返回rad_vel。这可行,但我不建议在这种情况下实际使用该模式。
  • 你应该有完全独立的(不是嵌套的)函数rad_velread_file。然后,您可以互相呼叫。
  • 是的,我想绘制 (time,v_r)

标签: python function plot nested nested-function


【解决方案1】:

除了其他值,您还必须返回内部函数

return [rad_vel,flux,time,obs_lambda]

test1 = read_file("test.txt")

test1[0]('test.txt')

【讨论】:

    【解决方案2】:

    没有文件或模块我无法尝试,但这里有一个使用类的。

    from numpy import *
    from matplotlib.pyplot import *
    def readFileData(filename): # Reads file
        text_array = loadtxt(filename)
        ...
        flux = ... # array read from .txt
        time = ... # array read from .txt
        obs_lambda = ... # array read from .txt
        return [flux,time,obs_lambda]
    
    def rad_vel(data): # Finds radial velocity
        for i in range(len(data[2])):
            v_r = data[2][i] - 2
        plot(data[1],v_r)
        show()
        return v_r
    textData=readFileData("test.txt")
    print(rad_vel(textData))
    

    【讨论】:

    • v_r 应该是一个列表。
    • 在不知道需要哪些模块或文本文件是什么样的情况下,很难判断它是否有效。我所做的只是将这两个函数放入类中。
    • 我对类不是很熟悉,所以最好只使用函数
    • 是的 v_r 是一个列表
    • 谢谢!类基本上可以让你创建一个对象,你可以创建如何与它交互的函数。我看看能不能把它做成函数,但是没有文本文件就很难测试了。
    【解决方案3】:

    如果我理解正确,这里可能是您想要的。我猜你想要一个辅助函数

    def read_file(filename): # Reads file
        def rad_vel(flux,time,obs_lambda): # Finds radial velocity
    
            # should you declare v_r in here? 
            v_r = 0  
    
            for i in range(len(obs_lambda)):
                v_r = obs_lambda[i] - 2
            plot(time,v_r)
            show()
            return v_r
    
        text_array = loadtxt(filename)
        ...
        flux = ... # array read from .txt
        time = ... # array read from .txt
        obs_lambda = ... # array read from .txt
        return rad_vel(flux,time,obs_lambda)
    

    【讨论】:

    • 对于 1 个函数看起来不错,但在我的程序中,read_file() 中有 3-4 个函数。那么它可能会变得更复杂
    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多