От Руководство по стилю для Кода Python :
предпочтительный способ обернуть длинные линии при помощи подразумеваемого продолжения строки Python в круглых скобках, скобках и фигурных скобках. Длинные линии могут быть повреждены по нескольким строкам путем обертывания выражений в круглых скобках. Они должны использоваться в предпочтении к использованию обратной косой черты для продолжения строки.
Обратные косые черты могут все еще время от времени быть соответствующими. Например, долго, несколько с операторами не могут использовать неявное продолжение, таким образом, обратные косые черты приемлемы:
with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read())
Другой такой случай с операторами контроля.
Удостоверяются, что расположили длительную строку с отступом соответственно. Предпочтительное место для повреждения вокруг бинарного оператора после оператор, не перед ним. Некоторые примеры:
class Rectangle(Blob): def __init__(self, width, height, color='black', emphasis=None, highlight=0): if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong' or highlight > 100): raise ValueError("sorry, you lose") if width == 0 and height == 0 and (color == 'red' or emphasis is None): raise ValueError("I don't think so -- values are %s, %s" % (width, height)) Blob.__init__(self, width, height, color, emphasis, highlight)
РЕДАКТИРОВАНИЕ: PEP8 теперь рекомендует противоположное соглашение (для повреждения при бинарных операциях) используемый Математиками и их издателями улучшить удобочитаемость.
стиль Donald Knuth повреждения прежде бинарный оператор выравнивает операторы вертикально, таким образом уменьшая рабочую нагрузку глаза при определении, какие объекты добавлены и вычтены.
От PEP8: Должен разрыв строки прежде или после бинарного оператора? :
Donald Knuth объясняет традиционное правило в своей серии Computers и Typesetting: "Хотя формулы в рамках абзаца всегда повреждаются после бинарных операций и отношений, отображенные формулы всегда повреждаются перед бинарными операциями" [3].
Следование традиции от математики обычно приводит к большему количеству читаемого кода:
# Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
В коде Python, допустимо повредиться, прежде или после бинарного оператора, пока соглашение последовательно локально. Для нового кода предлагается стиль Knuth.
[3]: Donald Knuth TeXBook, страницы 195 и 196
Это разумный подход, хотя я бы предпочел:
foreach (var key in dict.Keys.ToList())
{
dict[key] = false;
}
Вызов ToList ()
выполняет эту работу, поскольку он извлекает и (временно) сохраняет список ключей, поэтому итерация работает.
Вы можете просто вытащить ToList () и выполнить итерацию непосредственно по элементам словаря
Dictionary<string, bool> dict = GetDictionary();
foreach (var pair in dict)
{
dict[pair.Key] = false;
}
Я описал разницу между решениями Билли и Рида. Polaris878, обратите внимание на результаты и помните, что преждевременная оптимизация - это корень всего зла; -)
Я переписал решения на VB (потому что сейчас я программирую на этом языке) и использовал ключи типа int (для простоты) , иначе это точно такой же код. Я запустил код со словарем из 10 миллионов записей со значением «истина» для каждой записи.
Исходное решение Billy Witch Doctor:
Dim keys = dict.Keys.ToList
For i = 0 To keys.Count - 1
dict(keys(i)) = False
Next
Прошедшие миллисекунды: 415
Решение Рида Копси:
For Each key In dict.Keys.ToList
dict(key) = False
Next
Прошедшие миллисекунды : 395
Итак, в этом случае foreach на самом деле быстрее .
Если вы не используете логические объекты с тремя состояниями, вы можете использовать HashSet
и вызвать Clear ()
, чтобы установить значение "false".
Сделайте так, как сейчас .. .. foreach выполняется медленно. foreach может быть чище, но вы слишком сильно снижаете производительность, используя его.
Edit:
http://www.codeproject.com/KB/cs/foreach.aspx
http: // www .madprops.org / blog / for-vs-foreach-performance /