[PYTHON] Versuchen Sie, die Beziehung zwischen Operatoren und speziellen Methoden aufzurufen, indem Sie eine numerische Methode aufrufen

In der Schule wurden numerische Operationen gelernt, daher fühlt es sich nicht seltsam an, aber Sie können auch die Operatoren "+", "" und "%" für Zeichenfolgen verwenden. Ich verstehe immer noch "+" und "", aber ich war überrascht, dass "%" als Formatkonverter verwendet werden kann.

>>> 'ABC' + '123'
'ABC123'
>>> 'ABC' * 3
'ABCABCABC'
>>> '%#08x' % 123
'0x00007b'
>>> '%d, %x, %o' % (123, 123, 123)
'123, 7b, 173'

Python ist eine objektorientierte Skriptsprache, und Zeichenfolgen verfügen über Verarbeitungsmethoden. Schauen wir uns also die Liste der Zeichenfolgenmethoden an.

>>> dir('')    # ''Der Teil von kann eine beliebige Zeichenfolge sein
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Die zweite Hälfte von Capitalize ist eine normale Methode für Strings.

>>> help(''.capitalize)
Help on built-in function capitalize:

capitalize(...)
    S.capitalize() -> string
    
    Return a copy of the string S with only its first character
    capitalized.

>>> 'ABC'.capitalize()
'Abc'

>>> help(''.center)
Help on built-in function center:

center(...)
    S.center(width[, fillchar]) -> string
    
    Return S centered in a string of length width. Padding is
    done using the specified fill character (default is a space)

>>> 'Python'.center(30, '-')
'------------Python------------'

Die erste Hälfte von "__" (zwei unterstrichen), die von "dir (") "angezeigt wird, ist die" spezielle Methode ", die anscheinend fest verwendet wird. __add__, __mul__, __mod__ sind die Methoden, die von den Operatoren +, *, % aufgerufen werden.

>>> 'ABC'.__add__('123')
'ABC123'
>>> 'ABC'.__mul__(3)
'ABCABCABC'
>>> '%#x'.__mod__(123)
'0x7b'

Dank der Zeichenfolgenklasse, die diese Methoden definiert, können Sie Zeichenfolgen mithilfe von Operatoren bearbeiten.

Was ist damit?

>>> 'ABC' + '123' * 3
'ABC123123123'
>>> 'ABC'.__add__('123').__mul__(3)
'ABC123ABC123ABC123'

Das Ergebnis unterscheidet sich zwischen der obigen Formel und der unteren Formel. Operatoren haben eine Priorität, und "*" hat Vorrang vor "+", daher interpretiert der Python-Interpreter den obigen Ausdruck als "ABC" + ("123" * 3) "und: Das Ergebnis ist anders, weil die Methode aufgerufen wird.

>>> 'ABC'.__add__('123'.__mul__(3))
'ABC123123123'

Rufen wir übrigens auch die Methode für numerische Werte auf.

>>> dir(0)  #0 kann eine andere Zahl sein
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
>>> 123.__add__(456)
SyntaxError: invalid syntax
>>> 123 .__add__(456)
579
>>> (123).__add__(456)
579

Dies liegt daran, dass 123 .__ add__ (456) ein Syntaxfehler ist, . jedoch als Dezimalpunkt interpretiert wird. Sie können die Methode aufrufen, indem Sie ein Leerzeichen belassen oder in Klammern setzen.

Übrigens ruft die eingebaute Funktion len die Methode len auf. Persönlich möchte ich auch einen anderen Namen für die Methode "length ()" definieren.

>>> len('abcdefg')
7
>>> 'abcdefg'.__len__()
7

Es gibt andere spezielle Methoden für Vergleichsoperatoren, Arrayzugriff, sequentiellen Zugriff, redu () usw.

Recommended Posts

Versuchen Sie, die Beziehung zwischen Operatoren und speziellen Methoden aufzurufen, indem Sie eine numerische Methode aufrufen
Die subtile Beziehung zwischen Gentoo und Pip
Über die Beziehung zwischen Git und GitHub
Vererbung zwischen numerischen Python- und NumPy-Typen
Beziehung zwischen Netfilter, Firewall, Iptables und Nftables
Beziehung zwischen Firestore- und Go-Datentypkonvertierung