У меня головная боль с глобальной проблемой ссылки на переменные в простой программе подсчета частоты слов. Я проверяю ответы от here и here и python docs; однако, я до сих пор не понял идею глобальной переменной.Как ссылаться на глобальную переменную более чем на одну функцию?
from collections import Counter
with open('c:/Users/Nick/Downloads/sample_file.txt') as f:
words = f.read().lower().split()
c = Counter(words)
total_words = sum(c.values())
def top_n_words(n):
global c
# c = Counter(words)
top_n = c.most_common(n)
print("Top %d words are:" % n)
print("-" * 20)
for w, c in top_n:
# print("%10s: %-10s" % (w, c))
print("{word:>10s}: {counts:<10d}".format(word=w, counts=c))
def word_appears(w):
# global c
c = Counter(words)
print("The word '{word:s}' appears {time:d} times.".format(word = w, time = c[w]))
top_n_words(12)
print("-" * 20)
print("Total words: %d" % total_words)
print("Total words: {t:d}".format(t=sum(c.values())))
word_appears("history")
- В функции
top_n_words
, я заявляю, чтоc
носит глобальный характер. Должен ли я объявить его глобальным в функцииword_appears
? Это не работает. - Почему я не могу ссылаться на
c
в функцииprint
? Оправдывает ли порядокtop_n_words
,word_appears
на окончательную функцию печати? - Что такое хорошая практика для решения такой ситуации?
Я не вижу необходимости ссылаться на него. Это глобальная переменная, если ее можно использовать где угодно. Лучше всего это сделать, чтобы создать две отдельные локальные переменные и поиграть с ними в функции. –
Какую версию вы используете? –
@RickTeachey Я использую python 3.3.5. – Nick