Ich bin neu in Python, aber ich habe mich ziemlich schnell mit den Grundlagen vertraut gemacht und beschlossen, zu versuchen, ein Programm zu erstellen, während ich noch lerne, da ich am besten lerne, indem ich tatsächlich Dinge tue.

Also mache ich ein Programm in Python, das Polynome hinzufügt, und ich muss mit dem Befehl isdigit() sehen, ob ein Zeichen aus dem Parser numerisch ist.

Anstatt ständig isdigit() in meinen Code wie n.isdigit() eingeben zu müssen, möchte ich ihn einer Variablen t = 'isdigit()' zuweisen und dann n.t eingeben. Dies funktioniert nicht. Gibt es also eine Alternative, nicht den gesamten Befehl einzugeben?

1
Nick 6 Okt. 2012 im 19:02

3 Antworten

Beste Antwort

Während Sie Ihren Code mit etwas wie t = str.isdigit beginnen und dann t(n) überprüfen können (Sie können ihn nicht zu einem Attribut von Zeichenfolgen machen, weil Sie die Attributsuche von außen nicht abfangen können), ist dies tatsächlich ein ziemlich schlechte Idee. Während es schneller zu tippen ist, ist es wesentlich schwieriger zu lesen. Dies wird Sie (oder irgendjemanden anderen) in ein paar Wochen bei der Arbeit am Code beißen. Dies liegt nicht daran, dass das Abstrahieren über unnötige Details schlecht ist (es ist nicht so), dieses Snippet ist einfach nicht kompliziert genug, um von einer Abstraktion zu profitieren. Jeder lesbare Name hierfür ist mindestens so lang wie isidigt, sodass Sie keine Lesbarkeit gewinnen können.

2
user395760user395760 6 Okt. 2012 im 15:06

Sie können eine Funktion erstellen:

def t(n):
    if n.isdigit():
        return True
    else:
        return False

a = "a5b"
print t(a[1])

Ich weiß nicht, ob du danach gesucht hast.

0
eLRuLL 6 Okt. 2012 im 15:23

Sie müssten eine benutzerdefinierte Funktion oder ein Lambda erstellen, um die isdigit() -Methode für Sie aufzurufen, vorausgesetzt, eine Instanz:

t = lambda n: n.isdigit()

# ...

t(n)  # returns the result of `n.isdigit()`

Oder Sie können einen Verweis auf die Klassenmethode speichern:

t = str.isdigit

# ...

t(n)  # returns the result of `str.isdigit(n)`

Da n vom Typ str ist.

Die Syntax n.t immer sucht t als Attribut für n, und die lokale Variable t wird dafür nie herangezogen.

2
Martijn Pieters 6 Okt. 2012 im 15:05