November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Friday, August 1st, 2008 05:12 pm
Сколько пробелов питон считает за один уровень отступа?
4? 8? Сколько встретит в первый раз?
А что будет, если пробелов будет некратное число, кажем, 3 или 5?
А если они будут перемешаны с табуляциями?

Вопрос относится не к тому, как надо писать, а к тому, как будет восприниматься уже написанный и криво отформатированный код.
Friday, August 1st, 2008 04:41 pm (UTC)
1 (одын)
первый какой отступ встретился - так и поехали
Friday, August 1st, 2008 04:43 pm (UTC)
в пределах одного блока
Friday, August 1st, 2008 10:00 pm (UTC)
а если там вот так написано:
python () {
    pv = bb.data.getVar("PV",d,1).split('-')
...
    for patch in pv[1:]:
        name.append(patch)
        if patch[0:2] == "rc" or patch[0:3] == "pre":
            patch_uri.append("ftp://ftp.kernel.org/...


причём перед pv и for - 4 пробела, перед name.append и if - одна табуляция , перед patch - табуляция и 4 пробела?
это нормально, или автору сего текста надо пообрывать руки, чтоб он больше не мог писать программы?
Friday, August 1st, 2008 10:05 pm (UTC)
непонтно как он первую строку воспримет. если этот код вбить в интерпретатор - логично что на неё сразу ругается - отступа не должно быть. в теории - работать будет.

Но руки оборвал бы - за грязность невидимых частей.
Friday, August 1st, 2008 10:07 pm (UTC)
python () {
А что это за brace после функции?
Saturday, August 2nd, 2008 10:59 am (UTC)
насколько я пониимаю, это не совсем питон. это включаемый файл от bitbake с вкраплениями питона
Friday, August 1st, 2008 10:09 pm (UTC)
А автор сего текста наверное копипастил, ибо придумати ситуацию, в которой получится смешать инденты лично я не могу.
Saturday, August 2nd, 2008 07:46 am (UTC)
Во-первых, тут нет никаких смешанных идентов. Все абсолютно логично и прямолинейно. Такую индентацию, например, порождал несколько лет назад emacs по умолчанию (я его давно не запускал, может он и сейчас так делает)

Во-вторых, смешанная индентация получается на следующий день после того, как над проектом начинает работать больше одного разработчика, если этот вопрос не специфицирован в стайл гайде или за его соблюдением плохо следят.
Saturday, August 2nd, 2008 09:55 am (UTC)
Как так емакс по умолчанию порождал? три пробела а потом таб?
Saturday, August 2nd, 2008 10:12 am (UTC)
Наоборот -- если в начале строки (на вид) 11 пробелов, в файл пишется таб а потом три пробела.
Friday, August 1st, 2008 10:14 pm (UTC)
Работать будет
Saturday, August 2nd, 2008 10:53 am (UTC)
а вот не работает

NOTE: Handling BitBake files: / (1076/4066) [26 %]ERROR: Error in compiling: 
ERROR: The lines resulting into this error were:
ERROR:  51:IndentationError:'    pv = bb.data.getVar("PV",d,1).split('-')'
ERROR: Printing the environment of the function
ERROR:  0047:    # The patches list may be empty.  This code starts with the base
ERROR:  0048:    # kernel version and steps through the patches.  Because the rc and
ERROR:  0049:    # pre patches actually require the *preceding* kernel version the code
ERROR:  0050:    # fixes that up appropriately.
ERROR:  0051:    pv = bb.data.getVar("PV",d,1).split('-')
ERROR:  0052:    kernel = pv[0].split('.')
ERROR:  0053:    base = pv[0]
ERROR:  0054:    name = [base]
ERROR:  0055:    major = '.'.join(name[0].split('.')[0:2])
make: *** [image] Error 1
Saturday, August 2nd, 2008 11:04 am (UTC)
Питон 2.4? В 2.5 точно смешанные инденты работают - специально вчера проверил. А вот старые версии.. помнится, вроде тоже проблемы с этим испытывал
Saturday, August 2nd, 2008 01:52 pm (UTC)
2.5.1
Saturday, August 2nd, 2008 07:55 am (UTC)
В питоне считается (во всяком случае по умолчанию, но, кажется, это нигде не переключается), что табуляции имеют классический смысл: если считать, что колонки нумеруются с 0, TAB сдвигает текущую колонку на ближайшую позицию, кратную 8.

Таким образом, сдвиги тут -- 4, 4, 8, 8, 12. Текстовый редактор просто заменяет в начале строчки пробелы на табуляции, минимизируя число байт. Это классическое поведение.
Friday, August 1st, 2008 04:44 pm (UTC)
Python does not (yet!) provide an intelligent input line editing facility, so you have to type a tab or space(s) for each indented line. In practice you will prepare more complicated input for Python with a text editor; most text editors have an auto-indent facility. When a compound statement is entered interactively, it must be followed by a blank line to indicate completion (since the parser cannot guess when you have typed the last line). Note that each line within a basic block must be indented by the same amount.

http://docs.python.org/tut/node5.html#SECTION005200000000000000000
Saturday, August 2nd, 2008 09:28 am (UTC)
один пробле - уже отступ.

Смесь всего и вся восприниматься будет максимального грамотно.
На разные отступы (одна строка 3, другая 4) в пределах одного блока кажется даже warning'и выдаются. На смешение пробелов и табуляций в одном исходнике вроде тоже.

Для душевного спокойствия лучше всё привести в единообразие, в пределах одного файла.

У нас еще заведено vim-line добавлять
# vim: set ts=4 sts=4 sw=4 et :

(подавляющее большинство разработчиков vim пользуют), я когда регулярно кодил, добавлял emacs-line
Saturday, August 2nd, 2008 11:00 am (UTC)
проблема в том, что там файлов четыре с половиной тысячи, и в скольких из них такая гадость, я не знаю :(
Saturday, August 2nd, 2008 11:13 am (UTC)
ндэ.

Я бы начал с поиска исходников с табуляциями от начала строк и подумал о масштабе бедствия.
Потом посмотреть чего рассказывает python -t/-tt

дальше так сходу не знаю, по результатам...