Frage

Im Moment hatte ich noch nie ein Problem mit Whitespace in Python (obwohl ich es nur in zwei Projekten verwendet habe und der einzige Programmierer war). Was sind einige potenzielle Fallstricke mit Whitespace und Einrückung in Python für jemanden, der die Sprache lernt?

War es hilfreich?

Lösung

Ja, es gibt einige Fallstricke, aber in der Praxis ist es die meiste Zeit, dass sie Feind sind Windmühlen des quixotischen Stils, dh imaginär, und nichts, worüber man sich in der Realität Sorgen machen muss.

Ich würde schätzen, dass die Fallstricke eins sind Am wahrscheinlichsten begegnen sind (einschließlich mildernder Schritte identifiziert):

  1. Arbeiten mit anderen AKA -Zusammenarbeit

    a. Wenn Sie andere haben, die sich aus irgendeinem Grund weigern, sich daran zu halten Pep 8, Dann könnte es ein Schmerz werden, Code aufrechtzuerhalten. Ich habe das in der Praxis noch nie gesehen, als ich ihnen auf die fast universelle Konvention für Python hinweist, ist Einklebungspegel == vier Leerzeichen

    b. Holen Sie sich jeden/alle, mit denen Sie zusammenarbeiten, um die Konvention zu akzeptieren, und lassen Sie sie herausfinden, wie sein Editor automatisch (oder noch besser, wenn Sie denselben Editor verwenden, zeigen Sie ihm, wie sie sie konfigurieren können), so dass Kopie und Paste und Zeug funktioniert nur.

  2. Ich muss in einen anderen "anständigen" Redakteur als Ihren aktuellen bevorzugten investieren, wenn Ihr aktueller bevorzugter Editor nicht pythonfreundlich ist -Nicht wirklich eine Fallstrick, eher eine Investitionsanforderung, um die anderen erwähnten Fallstricke zu vermeiden, die mit Kopie und Paste, Refactoring usw. im Zusammenhang mit dem Notepad im Zusammenhang mit dem Notepad im Zusammenhang mit dem Pasten, am Morgen danken.

    a. Ihre Effizienz bei der Bearbeitung des Codes ist unter einem Editor, der versteht, viel höher python

    b. die meisten modern Code -Redakteure verarbeiten Python anständig. Ich selbst bevorzuge GNU -EMACs und die jüngsten Versionen kommen mit ausgezeichneter python-mode Unterstützen Sie aus dem Box. Das sind viel von Andere Redakteure zu erkunden, einschließlich vielen kostenlosen Alternativen und Ides.

    c. Python selbst kommt mit einem "intelligenten" Python -Editor aus der Box. idle. Probieren Sie es aus, wenn Sie nicht vertraut sind, da es wahrscheinlich bereits mit Ihrer Python -Installation erhältlich ist und möglicherweise sogar unterstützt wird python Besser als Ihr aktueller Redakteur. Pycrust ist eine weitere Option für einen in Python implementierten Python -Editor und ist Teil von WXPython.

  3. Einige Umgebungen für Codegenerierung oder Vorlagen mit Python (denken Sie an HTML -Generation oder Python -CGI/WSGI -Apps) können Macken haben

    a. Die meisten von ihnen haben, wenn sie Python berühren, Schritte unternommen, um die Natur von Python als Problem zu minimieren, aber es taucht immer noch hin und wieder auf.

    b. Wenn Sie darauf stoßen, machen Sie sich mit den Schritten vertraut, die die Rahmenautoren bereits unternommen haben, um die Auswirkungen zu minimieren, und lesen Sie ihre Vorschläge (VorschlägeUnd ja, sie werden einige haben, wenn es jemals in ihrem Projekt angetroffen wurde), und es wird einfach sein, die mit Python bezogenen Fallstricke zu vermeiden.

Andere Tipps

Es kann bei einigen Redakteuren verwirrend sein, in denen eine Zeile mit Leerzeichen eingerichtet ist und die nächste mit einer Registerkarte eingerückt ist. Dies ist verwirrend, da die Eindrücke gleich aussieht, aber einen Fehler verursacht.

Auch wenn Ihr Kopiercode, wenn Ihr Editor keine Funktion hat, um ganze Blöcke einzuführen, kann dies ärgerlich sein, um die gesamte Eindrücke zu beheben.

Aber mit einem guten Redakteur und ein bisschen Übung sollte dies kein Problem sein. Ich persönlich mag die Art und Weise, wie Python White Space nutzt.

Das hielt mich tatsächlich eine Weile von Python fern. Als ich aus einem starken C -Hintergrund kam, hatte ich das Gefühl, ohne Sicherheitsgurt zu fahren.

Es war erschwerend, als ich versuchte, eine Snippet -Bibliothek in meinem Editor mit Boilerplate und häufig verwendeten Klassen zu füllen. Ich lerne am besten mit Beispiel, also habe ich so viele interessante Ausschnitte wie möglich mit dem Ziel gepackt, ein nützliches Programm beim Lernen zu schreiben.

Nachdem ich mich an die Gewohnheit gemacht hatte, alles neu zu formen, was ich mir geliehen habe, war es nicht so schlimm. Aber es fühlte sich immer noch wirklich unangenehm an. Ich musste mich an eine dynamisch typisierte Sprache und Einrückungsvereinigung gewöhnen, die meinen Code steuert.

Es war ein ziemlicher Sprung für mich :)

Wenn ich mir C- und Java -Code ansehe, ist er immer gut eingerückt.

Stets. Schön. Eingerückt.

Offensichtlich verbringen C- und Java -Leute viel Zeit damit, ihre Whitespace richtig zu machen.

So auch Python -Programmierer.

Whitespace -Blockgrenzwerte erzwingen eine bestimmte Menge an Codeformatierung, was einige Programmierer zu irritieren scheint. Einige in unserem Geschäft scheinen von der Haltung zu sein, dass sie zu beschäftigt sind, oder können sich nicht darum kümmern, auf Formatierungsstandards zu achten, und eine Sprache, die sie zwingt, sie roh zu reiben. Manchmal haben die gleichen Leute, wenn andere nicht den gleichen Mustern befolgen, lockige Zahnspangen auf eine neue Linie zu setzen;)

Ich finde, dass der Python -Code aus dem Web häufiger "lesbar" ist, da diese geringfügige Formatierungsanforderung vorhanden ist. IMO, diese Anforderung ist eine sehr nützliche Funktion.

IIRC, verwenden Haskell, Ocaml (#Light) und F# auch Whitespace auf die gleiche Weise? Aus irgendeinem Grund habe ich keine Beschwerden über diese Sprachen gesehen.

Vor langer Zeit, in weitem, weit weg, gab es Sprachen (wie RPG), die von der Säulenstruktur von Stanzkarten abhängig waren. Dies war ein mühsames und nerviges System und führte zu vielen Fehlern, und neuere Sprachen wie Basis, Pascal usw. wurden ohne diese Abhängigkeit entworfen.

Eine Generation von Programmierern wurde in diesen Sprachen geschult und sagte wiederholt, dass die Freiheit, irgendetwas irgendwohin zu bringen, ein wunderbares Merkmal der neueren Sprachen war, und sie sollten dankbar sein. Die Freiheit wurde verwendet, missbraucht und kalibriert (vgl. IOCC) für viele Jahre.

Jetzt hat das Pendel begonnen, zurück zu schwingen, aber viele Menschen erinnern sich noch daran, dass das Zwangslayout in irgendeiner Weise schlecht ist und sich dagegen widersetzt.

IMHO, das, was Sie tun müssen, ist, mit Sprachen zu ihren eigenen Bedingungen zu arbeiten und sich nicht von schmecken, gratfreien Schlachten aufhalten zu lassen.

When python programmers don't follow the common convention of "Use 4 spaces per indentation level" defined in PEP 8. (If your a python programmer and haven't read it please do so)

Then you run into copy paste issues.

Some people say that they don't like python indentation, because it can cause errors, which would be immensely hard to detect in case if tabs and spaces are mixed. For example:

1 if needFrobnicating:
2    frobnicate()
3 update()

Depending on the tab width, line 3 may appear to be in the same block as line 2, or in the enclosing block. This won't cause runtime or compile error, but the program would do unexpected thing.

Though I program in python for 10 years and never seen an error caused by mixing tabs and spaces

Pick a good editor. You'd want features such as:

  1. Automatic indentation that mimics the last indented line
  2. Automatic indentation that you can control (tabs vs. spaces)
  3. Show whitespace characters
  4. Detection and mimicking of whitespace convention when loading a file

For example, Vim lets me highlight tabs with these settings:

set list
set listchars=tab:\|_
highlight SpecialKey ctermbg=Red guibg=Red
highlight SpecialKey ctermfg=White guifg=White

Which can be turned off at any time using:

set nolist

IMO, I dislike editor settings that convert tabs to spaces or vice versa, because you end up with a mix of tabs and spaces, which can be nasty.

I used to think that the white space issues was just a question of getting used to it.

Someone pointed out some serious flaws with Python indentation and I think they are quite valid and some subconcious understanding of these is what makes experienced programs nervious about the whole thing:-

  • Cut and paste just doesnt work anymore! You cannot cut boiler plate code from one app and drop it into another app.
  • Your editor becomes powerless to help you. With C/Jave etc. there are two things going on the "official" curly brackets indentation, and, the "unnofficial" white space indentation. Most editors are able reformat hte white space indentation to match the curly brackets nesting -- which gives you a string visual clue that something is wrong if the indentation is not what you expected. With pythons "space is syntax" paradigm your editor cannot help you.
  • The sheer pain of introducing another condition into already complex logic. Adding another if then else into an existing condition involves lots of silly error prone inserting of spaces on many lines line by hand.
  • Refactoring is a nightmare. Moving blocks of code around your classes is so painful its easier to put up with a "wrong" class structure than refactor it into a better one.

If you use Eclipse as your IDE, you should take a look at PyDev; it handles indentation and spacing automatically. You can copy-paste from mixed-spacing sources, and it will convert them for you. Since I started learning the language, I've never once had to think about spacing.

And it's really a non-issue; sane programmers indent anyway. With Python, you just do what you've always done, minus having to type and match braces.

Pitfalls

  • It can be annoying posting code snippets on web sites that ignore your indentation.

  • Its hard to see how multi-line anonymous functions (lambdas) can fit in with the syntax of the language.

  • It makes it hard to embed Python in HTML files to make templates in the way that PHP or C# can be embedded in PHP or ASP.NET pages. But that's not necessarily the best way to design templates anyway.

  • If your editor does not have sensible commands for block indent and outdent it will be tedious to realign code.

Advantages

  • Forces even lazy programmers to produce legible code. I've seen examples of brace-language code that I had to spend hours reformatting to be able to read it...

  • Python programmers do not need to spend hours discussing whether braces should go at the ends of lines K&R style or on lines on their own in the Microsoft style.

  • Frees the brace characters for use for dictionary and set expressions.

  • Is automatically pretty legible

The problem is that in Python, if you use spaces to indent basic blocks in one area of a file, and tabs to indent in another, you get a run-time error. This is quite different from semicolons in C.

This isn't really a programming question, though, is it?

The only trouble I've ever had is minor annoyances when I'm using code I wrote before I settled on whether I liked tabs or spaces, or cutting and posting code from a website.

I think most decent editors these days have a convert tabs-to-spaces and back option. Textmate certainly does.

Beyond that, the indentation has never caused me any trouble.

If your using emacs, set a hard tab length of 8 and a soft tab length of 4. This way you will be alterted to any extraneous tab characters. You should always uses 4 spaces instead of tabs.

One drawback I experienced as a beginner whith python was forgetting to set softtabs in my editors gave me lots of trouble.

But after a year of serious use of the language I'm not able to write poorly indented code anymore in any other language.

No, I would say that is one thing to which I can find no downfalls. Yes, it is no doubt irritating to some, but that is just because they have a different habit about their style of formatting. Learn it early, and it's gonna stick. Just look how many discussions we have over a style matter in languages like C, Cpp, Java and such. You don't see those (useless, no doubt) discussions about languages like Python, F77, and some others mentioned here which have a "fixed" formatting style.

The only thing which is variable is spaces vs. tabs (can be changed with a little trouble with any good editor), and amount of spaces tab accounts for (can be changed with no trouble with any good editor). Voila ! Style discussion complete.

Now I can do something useful :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top