我希望使用像模型这样的变量,该变量已经为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”?我试图使用自我,但无法正常工作。我只想调用变量,因为我不想建立另一个额外的功能来链接它。
答案 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