如何从函数外部调用函数中的变量?

时间:2019-02-13 12:56:02

标签: python

我意识到这可能被标记为重复项,但是没有其他问题与我的问题有关。我在各种函数中都有变量,需要分别调用。我收到错误function pos has no 'stn' member

我已经尝试过使用全局变量,但是这有点儿困难,并不是最简单的...

def pos():
    stn = int((latest))
pos()

with open('current_data.json', 'w') as outfile:
    data['data'].append({
    'lineone': pos.stn,
    }
)

我希望将这些变量写入json(我没有包括jso n导入和文件设置,因为它与问题无关)...但是我只收到此错误Function 'pos' has no 'stn' member; maybe 'stn_other'?,其中stn_otherpos函数中的另一个变量。我会很感激的。

3 个答案:

答案 0 :(得分:1)

尽管这通常是不好的做法,但您需要将stn设为功能对象pos属性

def pos():
    pos.stn = int((latest))

否则,当pos返回时,stn将超出范围并被标记为垃圾回收。

答案 1 :(得分:1)

如果将值分配给函数内部的局部变量,则在函数返回时它将消失。但是您希望它继续存在。因此在我看来,您希望pos是类的实例,而不是函数。当您执行pos.stn时,肯定会是这样。

class Pos:
    def __init__(self, latest='0'):
        self.stn = int(latest)      

然后,当您创建此类的实例时,

>>> pos = Pos()

数据保留在pos内:

>>> print (pos.stn)
0

答案 2 :(得分:1)

您需要return函数的结果pos()。我并不是建议您编写一个将函数转换为int的函数-它只会增加可用内置函数的开销:

import json 

latest = '10'

def pos(latest):
    stn = int(latest)
    return stn

json_data = {'data':[]} # this is something you have in advance
json_data['data'].append(pos(latest))  

with open('current_data.json', 'w') as outfile:
    json.dump(json_data, outfile, indent=4)

产生current_data.json

{
    "data": [
        10
    ]
}