Wat is de betekenis van _
na for
in deze code?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
Antwoord 1, autoriteit 100%
_
heeft 3 belangrijke conventionele toepassingen in Python:
-
Om het resultaat van de laatst uitgevoerde expressie in een interactief vast te houden
tolksessie (zie docs). Dit precedent werd geschapen door de standaard CPython
tolk en andere tolken hebben dit voorbeeld gevolgd -
Voor het opzoeken van vertalingen in i18n (zie de
gettext
documentatie bijvoorbeeld), zoals in code zoalsraise forms.ValidationError(_("Please enter a correct username"))
-
Als algemene “wegwerp”-variabelenaam:
-
Om dat deel aan te geven
van een functieresultaat wordt opzettelijk genegeerd (conceptueel wordt het weggegooid.), zoals in code zoals:label, has_label, _ = text.partition(':')
-
Als onderdeel van een functiedefinitie (met behulp van
def
oflambda
), waarbij
de handtekening is vast (bijvoorbeeld door een callback of ouderklasse-API), maar
deze specifieke functie-implementatie heeft niet alle
parameters, zoals in code zoals:def callback(_): return True
[Voor een lange tijd heeft dit antwoord dit gebruikscase niet vermeld, maar het kwam vaak genoeg, zoals opgemerkt Hier , om expliciet de moeite waard te zijn.]
Dit gebruiksbehuizing kan in conflict komen met het gebruik van de vertaalzoekopdracht, dus het is noodzakelijk om te voorkomen met behulp van
_
als een wegwijkvariabele in elk codeblok dat het ook gebruikt voor i18n vertaling (veel mensen geven er de voorkeur aan Double-underscore,__
, zoals hun weggeleide variabele voor precies deze reden).Linters erkennen dit gebruik vaak. Bijvoorbeeld
year, month, day = date()
zal een pluiswaarschuwing verhogen Alsday
niet later in de code wordt gebruikt. De fix, alsday
echt niet nodig is, is omyear, month, _ = date()
te schrijven. Hetzelfde met Lambda-functies,lambda arg: 1.0
Creëert een functie die één argument nodig heeft, maar niet met behulp van het, dat wordt betrapt door de lint. De fix is om te schrijvenlambda _: 1.0
. Een ongebruikte variabele verbergt vaak een bug / typo (bijvoorbeeld ingesteldday
, maar gebruikdya
in de volgende regel). -
2, Autoriteit 27%
Het is slechts een variabele naam, en het is conventioneel in Python om _
voor wegwijkvariabelen te gebruiken. Het geeft gewoon aan dat de lusvariabele niet daadwerkelijk wordt gebruikt.
3, Autoriteit 12%
Underscore _
wordt beschouwd als “het kan me niet schelen ” of “wegwerp ” variabele in python
-
De Python-tolk slaat de laatste expressiewaarde op de speciale variabele met de naam
_
.>>> 10 10 >>> _ 10 >>> _ * 3 30
-
Het onderstrepingsteken
_
wordt ook gebruikt om de specifieke waarden te negeren. Als u de specifieke waarden niet nodig hebt of als de waarden niet worden gebruikt, wijst u de waarden toe aan onderstrepingstekens.Negeer een waarde bij het uitpakken
x, _, y = (1, 2, 3) >>> x 1 >>> y 3
Negeer de index
for _ in range(10): do_something()
Antwoord 4, autoriteit 3%
Er zijn 5 gevallen voor het gebruik van het onderstrepingsteken in Python.
-
Voor het opslaan van de waarde van de laatste uitdrukking in de interpreter.
-
Voor het negeren van de specifieke waarden. (zogenaamde “I don’t care”)
-
Om speciale betekenissen en functies te geven aan de naam van variabelen of functies.
-
Te gebruiken als functies voor ‘internationalisering (i18n)’ of ‘lokalisatie (l10n)’.
-
Om de cijfers van de letterlijke waarde van het getal te scheiden.
Hieris een mooi artikel met voorbeelden van mingrammer.