在函数内部分配全局变量并不起作用

时间:2014-11-01 15:56:07

标签: python

我是Python编程的新手,并且遇到全局变量问题。 我有这样的代码:


import ...

sentiment_words = {} #global variable

def getTweetSentiment(tweet_text): sentiment = 0 words = extractWordsFromTweet(tweet_text) for word in words: if word in sentiments_words: sentiment += sentiments_words[word] #sentiment_words is empty return sentiment

def main(): global sentiment_words sentiment_words = loadSentiments(open(sys.argv[1])) #setting new value

当我调用getTweetSentiment函数时,它看不到sentiment_words中的任何变量。能帮助我理解应该如何以正确的方式写出来吗?

2 个答案:

答案 0 :(得分:1)

尝试使用课程。它比使用全局变量更好。

您可以通过sentimentTweet.sentiment_words方式访问sentiment_words。

您的代码如下:

class sentimentTweet:
    def __init__(self,d={}):
        sentiment_words = d

    def getTweetSentiment(self,tweet_text):
        sentiment = 0
        words = extractWordsFromTweet(tweet_text)
        for word in words:
            if word in self.sentiments_words:
                sentiment += self.sentiments_words[word] #sentiment_words is empty
        return sentiment

sTwitter= sentimentTweet(loadSentiments(open(sys.argv[1]))) #u r creating an instance of the class and loading it 
print sTwitter.sentiment_words #Check, Try to print sentiment_words values 

如果您有推文文字。您可以通过这种方式运行您的函数getTweetSentiment

t= "tweet_text" #I'm not sure how do you use this variable    
returnedSentiment= sTwitter.getTweetSentiment(t) #This is how you run your function
print t

答案 1 :(得分:0)

您实际上是否在任何时候调用main()函数?根据您提供的代码,它看起来不像您,这意味着loadSentiments()将无法运行,因此sentiment_words将保持不变(即它将保持定义为{} })。

与C / C ++ / Java不同,Python程序不以main()函数/方法开头。相反,程序从第一行运行到最后一行,因此您需要在文件底部添加以下内容:

if __name__ == "__main__":
    main()

这将确保在直接执行文件时调用main()函数。