Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der String-Änderung und Parameterübergabe in Python
Problem gefunden
Ich bin kürzlich während eines Interviews auf eine Frage gestoßen. Ich habe mich für die Verwendung von JavaScript oder Python zum Umkehren von Zeichenfolgen entschieden und dann den Code geschrieben (falsch):
#!/usr/bin/env python #-*-coding:utf-8-*- __author__ = 'ZhangHe' def reverse(s): l = 0 r = len(s) - 1 while l < r: s[l],s[r] = s[r],s[l] l += 1 r -= 1 return s
Dann stellte der Interviewer zwei Fragen:
(1) Kann der Wert einer Zeichenfolge auf diese Weise geändert werden? [Ich habe mit Ja geantwortet] [Falsche Antwort]
(2) Ist der übergebene Parameter die Adresse? Oder eine Kopie? [Ich antwortete: Wert übergeben. Zahlen, Zeichenfolgen und Tupel werden als Wert übergeben (unveränderlich); Liste und Diktat werden als Referenz übergeben (veränderlich);] [Antwort wird als Wert übergeben, der direkt geändert werden kann] [Falsche Antwort, die richtige Antwort ist die Übergabe als Wert , unveränderlich]
Denken Sie wie folgt
Obwohl Zeichenfolgen häufig verwendet werden, habe ich mich nie mit diesem Thema befasst und daher im Internet nach Informationen gesucht:
Strings in Python sind unveränderliche Typen, was bedeutet, dass zum Ändern der Elemente eines Strings ein neuer String erstellt werden muss.
Eine Zeichenfolge besteht aus unabhängigen Zeichen und ist auch eine Sequenz. Die allgemeinen Operationsmethoden von Sequenzen gelten auch für Zeichenfolgen.
Zum Beispiel:
Greifen Sie nacheinander durch Slicing-Operationen auf Teilzeichenfolgen zu
In Python gibt es keinen Zeichentyp, aber zur Darstellung dieses Konzepts wird eine Zeichenfolge mit der Länge 1 verwendet. Natürlich handelt es sich hierbei tatsächlich um eine Teilzeichenfolge.
Beispiel für eine Zugriffszeichenfolge:
1 aString = 'Hello World!' 2 print(aString[0]) 3 print(aString[1:5]) 4 print(aString[6:])
Ausgabe:
H ello World!
Wie ändert man also eine Zeichenfolge?
Sie können eine vorhandene Zeichenfolge „aktualisieren“, indem Sie einer Variablen einen Wert zuweisen (oder neu zuweisen). Der neue Wert kann dem ursprünglichen Wert ähneln oder sich vollständig von der ursprünglichen Zeichenfolge unterscheiden.
Zum Beispiel:
1 aString = 'Hello World!' 2 aString = aString[:6] + 'Python!' 3 print(aString) 4 aString = 'different string altogether' 5 print(aString)
Ausgabe:
Hello Python! different string altogether
Wie löscht man also ein Zeichen oder eine Zeichenfolge?
Wiederholen Sie es noch einmal: Zeichenfolgen sind unveränderlich, Sie können also nicht einfach ein bestimmtes Zeichen in einer Zeichenfolge löschen oder die Zeichen entfernen, nachdem Sie unnötige Teile entfernt haben eine neue Saite.Angenommen, Sie möchten das Kleinbuchstabe „l“ aus „Hello World!“ entfernen, dann müssen Sie Folgendes tun:
1 aString = 'Hello World!' 2 aString = aString[:3] + aString[4:] 3 print(aString)
Ausgabe:
Helo World!Leeren oder löschen Sie eine Zeichenfolge, indem Sie eine leere Zeichenfolge zuweisen oder die del-Anweisung verwenden. In den meisten Anwendungen besteht jedoch keine Notwendigkeit, Zeichenfolgen explizit zu löschen. Der Code, der diese Zeichenfolge definiert, endet irgendwann. Zu diesem Zeitpunkt gibt Python die Zeichenfolge automatisch frei.
Mit dem umgekehrten String-Code, den ich geschrieben habe, stimmt also etwas nicht. Der richtige Code sollte sein:
#!/usr/bin/env python #-*-coding:utf-8-*- __author__ = 'ZhangHe' def reverse(s): t = '' r = len(s) - 1 while r>=0: t = t + s[r] r -= 1 return t s = 'abcd' print reverse(s)Sind also die übergebenen formalen Parameter und tatsächlichen Parameter dasselbe Objekt? Sie können die ID-Funktion zur Überprüfung verwenden. Schauen wir uns zunächst die offizielle Erklärung der ID-Funktion an.
Mit anderen Worten: Die Funktion
gibt während ihres Lebenszyklus die Adresse des Objekts obj im Speicher zurück. Der Parametertyp der ID-Funktion ist ein Objekt (bei allen Objekten in Python speichert die Variable einen Verweis auf Objekt) id(obj)
Wir können den folgenden Code zur Überprüfung verwenden:
#!/usr/bin/env python #-*-coding:utf-8-*- __author__ = 'ZhangHe' def reverse(s): print id(s) t = '' r = len(s) - 1 while r>=0: t = t + s[r] r -= 1 return t s = 'abasdfasdfcdabasdfasdfcd' print id(s) print reverse(s)
Ausgabe:
38264224 38264224 dcfdsafdsabadcfdsafdsabaEs ist ersichtlich, dass der übergebene Parameter tatsächlich die Adresse des String-Objekts ist. Wenn der Parameter in „list“ oder „dict“ geändert wird, ist die Ausgabe-ID immer noch dieselbe. Daher ist die Methode zum Übergeben von Parametern in Python um die Adresse zu übergeben, aber Zahlen, Zeichenfolgen und Tupel können nicht direkt geändert werden, während Liste und Diktat direkt geändert werden können.
Zusammenfassung
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit von Nutzen sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen.