Ich hatte kürzlich die Gelegenheit, einen Vortrag über gute und schlechte C-Programmierpraktiken zu hören. Dabei wurde insbesondere das Thema der Dekodierung von
lustig aussehendem Programmcode (
Emoticons in C) angesprochen. Dann gab es eine Debatte über die Angemessenheit der Verwendung eines derart verwirrenden Codes, um die Fähigkeiten eines Kandidaten für eine Programmiererposition während der Interviews zu testen. Der Streit führte nicht zu einem Konsens.
Betrachten Sie eine mögliche Frage zu
Emoticons während eines Interviews für eine Position, die Kenntnisse der Programmiersprache Python impliziert.

Herausforderung
Es gibt zwei Ausdrücke:
_+_
_|_
Welcher dieser beiden Ausdrücke führt mit größerer Wahrscheinlichkeit zu Fehlern und warum?
AusdrucksnotizenEs sollte beachtet werden, dass diese Ausdrücke schlecht gelesen werden. Solche Ausdrücke sollten nicht im Arbeitscode verwendet werden, sondern können nur als Puzzle verwendet werden.
Sie müssen sich auch daran erinnern, dass die
Emoticons in der Aufgabe nicht
pythonisch geschrieben
sind (entsprechen nicht dem
PEP 8- Stilstandard ).
Lösung
In Python ist der Unterstrich kein
Schlüsselwort , daher kann er im Allgemeinen verwendet werden, um Variablen bestimmte Werte zuzuweisen.
Die Aufgabe reduziert sich auf die Berücksichtigung von Fehlerfällen während des Hinzufügens und mit "bitweise oder" (der Kürze halber einfach "oder") einer Variablen. Das heißt, Suchen nach in Python integrierten Typen (Klassen), für die eine Operation implementiert ist, und Suchen nach integrierten Typen, in denen eine andere Operation implementiert ist.
In der Python-Konsole kann leicht überprüft werden, ob Unterstrichwerte vorhanden sind, z.
Es gibt keinen Fehler bei der Auswertung jedes Ausdrucks >>> _ = 10 >>> _+_ 20 >>> _ = 10 >>> _|_ 10
Es gibt keinen Fehler bei der Auswertung des ersten Ausdrucks >>> _ = '10' >>> _+_ '1010' >>> _ = '10' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'str' and 'str'
Es gibt keinen Fehler bei der Berechnung des zweiten Ausdrucks >>> _ = {1, 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'set' and 'set' >>> _|_ {0, 1}
Bei der Berechnung jedes Ausdrucks ist ein Fehler aufgetreten >>> _ = {1: 0} >>> _+_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> _|_ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for |: 'dict' and 'dict'
Die Magie von Python besteht darin, dass die Implementierung von Ergänzungen und "oder" und anderen Operatoren in den sogenannten
"magischen Methoden" erfolgt, die für die erforderlichen Klassen beschrieben wurden.
Dies ist außerdem die Methode
__add__
Für "oder" ist dies eine Methode
__or__
Der Name jeder magischen Methode enthält Unterstriche, zwei am Anfang und am Ende des entsprechenden Wortes.
Informationen zu integrierten Python-Klassen finden.Sie können versuchen, die erforderlichen Informationen in der Dokumentation für integrierte Typen auf der offiziellen Python-Website zu finden:
https://docs.python.org/3.7/library/stdtypes.html .
Sie können in einem Python-Terminal ausführen
>>> import builtins >>> help(builtins)
Ich bevorzuge es, die Dokumentation der genauen Version von Python zu verwenden, die ich derzeit verwende, und verweise auf die Weboberfläche des pydoc-Moduls.
Geben Sie dazu an der Eingabeaufforderung beispielsweise Folgendes ein:
python3 -m pydoc -p 3344
und öffnen Sie das Browser-Dokumentationsmodul
http: // localhost: 3344 / builtins.html .
Integrierte Klassen, für die unsere Methoden implementiert sind:
Neun integrierte Klassen implementieren die Additionsoperation und vier implementieren das "oder".
Darüber hinaus können Sie versuchen, über die Häufigkeit der Verwendung von Basisklassen in realen Projekten, über nicht grundlegende Klassen und die Implementierung der oben genannten Methoden für diese zu spekulieren. Dies wird während des Interviews wahrscheinlich positiv bewertet.
Antwort 1.Der zweite Ausdruck führt häufig zu einem Fehler.
Mögliche zusätzliche Fragen zum Unterstreichen des Interviews
Welche Rolle spielt der Unterstrich bei der Benennung von Objekten?
Antwort 2.Der Unterstrich kann verwendet werden, um Wörter in
verschiedenen Entitätsnamensstilen in Python zu trennen:
- Bei der Benennung in Kleinbuchstaben
lower_case_with_underscores
- Bei der Benennung in Großbuchstaben
UPPER_CASE_WITH_UNDERSCORES
Einige auf Unterstriche beschränkte Namen sind
vorbehalten :
- Mit einem Unterstrich am Anfang eines Namens wird dieser beim allgemeinen Import nicht importiert
from module import *
- Da zwei Unterstriche auf beiden Seiten des Namens als systemisch gelten, wird nicht empfohlen, solche Namen für andere Zwecke zu verwenden
- Mit zwei Unterstrichen am Anfang eines Namens wird er für die Klasse als privat (nicht öffentlich) betrachtet
Welche Rolle spielt ein einzelner Unterstrich?
Antwort 3.Wenn der Unterstrich im Interpreter nicht explizit als Variable verwendet wurde, speichert er das Ergebnis der letzten fehlerfreien Aktion, die auf dem Bildschirm angezeigt wird.
$ python3 Python 3.6.8 (default, Feb 14 2019, 22:09:48) [GCC 7.4.0] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> _ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '_' is not defined >>> 2 * 5 10 >>> _ 10 >>> _ = 1 >>> _ 1 >>> 2 * 5 10 >>> _ 1
Dies liegt daran, dass
sys.stdout mit
displayhook maskiert wird . Nehmen Sie ein Beispiel aus der
offiziellen Dokumentation :
def displayhook(value): if value is None: return
Darüber hinaus wird zur Vereinfachung der
Internalisierung üblicherweise eine einzige Unterstreichung verwendet.