Неисполненная строка (заблокированная & ldquo; if false & rdquo;) по-прежнему влияет на результаты [дубликат]

import string
fp=open('text.txt','r')
file_list=fp.readlines()
print file_list
freqs = {}
for line in file_list:
    line = filter(lambda x: x in string.letters, line.lower())
    for char in line:
        if char in freqs:
            freqs[char] += 1
        else:
            freqs[char] = 1

print freqs
0
задан sawa 6 March 2019 в 08:10
поделиться

1 ответ

[это] ошибка или особенность?

Ни. Это ... особенность. Что происходит, когда синтаксический анализатор видит присвоение локальной переменной в коде, он идет вперед и добавляет имя в области видимости (начиная с этой линии, возможно, затенение и другие названия, как ваш метод здесь). Со значением по умолчанию nil. Если фактическое назначение не то и не выполняется, новая локальная переменная остается в объеме и по-прежнему имеет значение nil.

Это отражено в https://docs.ruby-lang.org/en/2.5.0/syntax/assignment_rdoc.html#label-Local+Variables+and+Methods .

0
ответ дан Ixio 6 March 2019 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: