是否可以从另一个函数中的另一个函数调用变量?

时间:2018-09-20 00:42:40

标签: python gensim

我希望使用像模型这样的变量,该变量已经为gensim训练了某些句子。 例如,我使用gensim word2vec训练一个句子以在另一个函数中找到其向量并将其保存到名为“ model”的变量中。

然后我创建另一个函数来获取每个单词的向量并将其返回。

我的代码如下:

def gen(sentence):
    model = gensim.models.word2vec.Word2Vec([sentence],min_count=1, workers=1, size=3)
    ....
    ....
    return ...

def name(sentence):
    for word in sentence:
        print(model.wv[word])
    return

是否可以将变量从名为“ model”的函数def“ gen”传递给函数def“ name”?我试图使用自我,但无法正常工作。我只想调用变量,因为我不想建立另一个额外的功能来链接它。

2 个答案:

答案 0 :(得分:0)

函数必须共享变量的情况是面向对象编程的经典动机。您可以将这些函数变成具有属性self.model的类的成员,该属性在__init__(self)中初始化为self.model = None

class MyClass(object):

    def __init__(self):
        self.model = None

    def gen(self, sentence):
        self.model = gensim.models.word2vec.Word2Vec([sentence],min_count=1, workers=1, size=3)
        ...

    def name(self, sentence):
        ...

# below is a test
if __name__ == '__main__':
    sentence = 'sadfdsafesafsdf'
    my_obj = MyClass()
    something_returned = my_obj.gen(sentence)
    something_else_returned = my_obj.name(sentence)

然后,通过调用函数gen()修改该变量,并将其用于函数name()

答案 1 :(得分:0)

为什么不能只调用该函数,在另一个函数中,我做了一个基本的例子,不确定是否误解了你

def multiply(c):
    t = add(1, 4)
    c *= t
    return c

def add(a, b):
    t = a + b
    return t

x = multiply(2)
print(x)
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 example.py 
10