如何在不使用return的情况下将值传递给函数?

2024-04-18 03:55:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一组函数,它们互相调用价格选项。其中一个函数运行了一段时间来优化某些参数(使用Nelder Mead)。在这个函数中,计算了一个值,我想在其他一些函数中使用它,但是我不想通过return语句传递它。我认为使用全局var将是完美的。

现在,奇怪的是:当我通过import *加载我作为包编写的函数时,我无法访问一个函数创建的全局变量。如果我使用带有函数定义的脚本,在Python控制台中运行它来定义函数,然后调用函数,那么全局变量构造就可以正常工作了。问题可能是什么?为什么我将函数加载/定义为包还是“手动”?

作为包加载时出错:NameError: name 'h_out' is not defined

global h_out
h_out=None
import hngoption

prices = timeseries[data.Date[i]:].head(30)
output = hngoption.params(prices) 

params() calls function LogLike() as part of its computations which contains:

def LogLike(B, r):
        # (...)
        for i in range(N - 3, -1, -1):
            h[i] = B[0] + B[2] * h[i + 1] + B[1] * pow(Z[i + 1] - B[3] * sqrt(h[i + 1]), 2)
            Z[i] = (ret[i] - r - B[4] * h[i]) / (h[i] ** 0.5)
            L[i] = -log(h[i]+ 0.000000000000001) - (ret[i] ** 2) / h[i]

        LogL = VecSum(L)

        global h_out       #IMPORTANT PART
        h_out = h[0]

        if ((B[0] < 0) | (B[1] < 0) | (B[2] < 0) | (B[3] < 0) | (B[4] < 0)):  # (B[2]+B[1]*pow(B[3],2)>=1))

            return 1e50
        else:
            return -LogL  # Minimize -Log-Like(Beta)

全对数函数:

^{pr2}$

Tags: 函数importreturn定义价格paramsoutglobal
2条回答

您可以使用以下类型的参数来携带结果。在

def test(a):
    a[0]=a[0]+2

>>> a = [2]
>>> test(a)
>>> a
[4]

from somemodule import *将当时存在的somemodule中的全局变量绑定到当前模块中的类似命名变量。尚未创建的变量不会被导入。当前模块现在有自己对对象的引用,如果重新分配另一个模块中的变量,则这些对象不会受到影响。在

若要解决您的问题,请在全局范围内为h_out分配一些默认值,以便其他模块在您的函数完成之前引用它时不会出错。并通过模块访问变量以获取共享值,而不是执行通配符导入。在

在somemodule.py在

h_out = None

def LogLikeDeep(B, r):
    global h_out       #IMPORTANT PART
    h_out = h[0]

使用

^{pr2}$

相关问题 更多 >