Python kleine Geschichte Sammlung

Einführung

Ich studiere Python und die Anzahl der kleinen Geschichten hat zugenommen, also werde ich es leicht zusammenfassen. Bitte verzeihen Sie mir, obwohl einige Teile nicht eingehend untersucht wurden.

Liste der kleinen Geschichten

Kleine Geschichte

Ich werde in der Reihenfolge von oben auf der Liste erklären.

Identität und Äquivalenz

Identität bedeutet, dass die Objekte gleich sind, und Äquivalenz bedeutet, dass die Werte gleich sind. Die Identität wird mit "ist" bewertet, und die Äquivalenz wird mit "= = danach" bewertet. Lassen Sie uns nun das Ergebnis für jeden Typ überprüfen.

int

-5 bis 256 Ganzzahlen verwenden dasselbe Objekt, um Speicherplatz zu sparen. Andere Ganzzahlen sind nicht gleich, auch wenn sie den gleichen Wert haben.

a = 256
b = 256
a is b # True

c = 257
d = 257
c is d # False

e = -5
f = -5
e is f # True

g = -6
h = -6
g is h # False

float, long, complex

Dies verhält sich anders als Ganzzahlen. Selbst wenn sie den gleichen Wert haben, sind sie nicht gleich, da der gespeicherte Speicher unterschiedlich ist.

a = 1.0
b = 1.0
a == b # True
a is b # False

a = 1L
a = 1L
a == b # True
a is b # False

a = 1 + 2j
b = 1 + 2j
a == b # True
a is b # False

bool

Es gibt nur ein Richtig / Falsch.

a = True
b = True
a is b # True

a = False
b = False
a is b # True

Übrigens ist bool eine Unterklasse von int, und `False``` kann als 0 und `` True als 1``` behandelt werden.

isinstance(False, bool) # True
isinstance(False, int) # True

False == 0 # True
False is 0 # False

True == 1 # True
True is 1 # False

True + True # 2

result = -1
'OK' if result == 0 else 'NG' # 'NG'
('NG', 'OK')[result == 0] # 'NG'
result = 0
('NG', 'OK')[result == 0] # 'OK'

string

Zeichenfolgen, die keine Sonderzeichen enthalten, sind identisch, da sie in der Namensliste enthalten sind. Wenn Sonderzeichen wie Leerzeichen und Operatoren enthalten sind, sind sie auch dann nicht identisch, wenn sie denselben Wert haben. Wenn es jedoch nur ein Sonderzeichen gibt, ist es dasselbe.

a = 'foo'
b = 'foo'
a == b # True
a is b # True

a = 'f o o'
b = 'f o o'
a == b # True
a is b # False

a = 'x+y'
b = 'x+y'
a == b # True
a is b # False

a = '/'
b = '/'
a == b # True
a is b # True

Auch in den folgenden Fällen wird es nicht dasselbe sein.

a = 'f'
a += 'oo'
b = 'foo'
a == b # True
a is b # False

list, tuple, dictionary

Wie Zeichenfolgen sind Liste, Tupel und Wörterbuch nicht identisch, auch wenn sie denselben Wert haben.

a = [1, 2, 3]
b = [1, 2, 3]
a == b # True
a is b # False

a = (1, 2, 3)
b = (1, 2, 3)
a == b # True
a is b # False

a = {'x': 1, 'y': 2}
b = {'x': 1, 'y': 2}
a == b # True
a is b # False

set

set ist ein Set mit eindeutigen Werten. Das Merkmal ist, dass es keine Garantie für die Bestellung gibt. Auch wenn set den gleichen Wert hat, ist es nicht der gleiche.

a = set([1, 3, 2])
b = set([1, 3, 2])
c = set([1, 2, 3, 2])

a == b # True
a is b # False

a == c # True ->True, da keine Bestellinformationen und nur eindeutige Werte gespeichert werden
a is c # False

Kopie der Liste

Wenn Sie mit `` `kopieren, ändert das Ändern eines Elements auch das andere Element.

a = [1, 2, 3]
b = a
a[0] = [0, 0] # a: [[0, 0], 2, 3], b: [[0, 0], 2, 3] -> a[0]Wenn Sie ändern b[0]Wird sich auch ändern

Wenn Sie mit Slices kopieren, handelt es sich um eine tiefe Kopie, und Sie können das oben genannte Problem vermeiden.

a = [1, 2, 3]
b = a[:]
a[0] = 0 # a: [0, 2, 3], b: [1, 2, 3] -> a[0]Nur ändern
b[1] = 0 # a: [0, 2, 3], b: [1, 0, 3] -> b[1]Nur ändern

Die Elemente String und Tupel können übrigens nicht geändert werden.

b = 'foo'
b[0] = 'h' # TypeError: 'str' object does not support item assignment

a = (1, 2, 3)
a[0] = 0 # TypeError: 'tuple' object does not support item assignment

Eine Funktion, die eine Funktion als Argument verwendet

In Python können Sie "eine Funktion definieren, die eine Funktion als Argument verwendet".

def higher(func, x, y):
    return func(x, y)

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

print higher(add, 4, 3) # 7
print higher(sub, 4, 3) # 1

Übrigens erspart Ihnen die Verwendung von `Lambda``` die Mühe, Funktionen wie` add``` und `` sub``` zu definieren.

def higher(func, x, y):
    return fun(x, y)

print higher(lambda a, b: a + b, 4, 3) # 7
print higher(lambda a, b: a - b, 4, 3) # 1

Funktion, die eine Funktion zurückgibt

Definieren Sie eine Funktion innerhalb einer Funktion und definieren Sie sie für die Rückgabe. Das Ausführen der äußeren Funktion `f``` gibt _f in `` `f zurück. Das zurückgegebene `_f``` ist eine Funktion, sodass Sie weitere Werte übergeben können, um es auszuführen. Daher ist die Ausführungsmethode wie folgt: f (1) (2) ``.

def f(x):
    def _f(y):
        return x + y
    return _f

print f(1) # <function _f at 0x10e45b140>
print f(1)(2) # 3

Funktionen Eigenschaften zuweisen

Da Funktionen in Python Objekte sind, können Sie frei Eigenschaften hinzufügen. Ich wusste nicht, wie ich es benutzen sollte. Lass es mich wissen, bitte.

def foo():
    return '!!!'

foo.x = 1
foo.y = 2
foo.f = lambda x: x + 1

print foo() # !!!
print foo.x # 1
print foo.y # 2.000000
print foo.f(9) # 10

Zugangsbeschränkungen

Python verfügt nicht über einen Mechanismus zum Einschränken des Zugriffs wie "privat" und "geschützt" in C ++ und Java. Daher werden Zugriffsbeschränkungen pseudo angewendet, indem am Anfang des Variablennamens oder Methodennamens ein Unterstrich eingefügt wird. Im Fall eines Unterstrichs kann er tatsächlich aufgerufen werden, zeigt jedoch die Absicht an, ihn als private Methode zu implementieren. Bei zwei Unterleisten kann sie nicht mit dem definierten Methodennamen aufgerufen werden, und der Zugriff ist eingeschränkt. Genau genommen ist es nicht so, dass Sie es nicht aufrufen können, es ist nur so, dass der Methodenname in _ _ (Klassenname) __ (Methodenname) geändert wurde. Daher kann es in Form von `` _ _ (Klassenname) __ (Methodenname) `` aufgerufen werden.

class Foo(object):
    def __init__(self, x):
        self.x = x
    def f(self, y):
        return self.x + y
    def _f(self, y):
        return self.x + y + 1
    def __f(self, y):
        return self.x + y + 2

foo = Foo(1)
print foo.f(1) # 2
print foo._f(1) # 3
print foo.__f(1) # AttributeError: 'Foo' object has no attribute '__f'
print foo._Foo__f(1) # 4

Teilung von int

Die Berechnung von int $ \ div $ int in Python 2.x ist nicht "die Ganzzahl mit den abgeschnittenen Brüchen", sondern "die maximale Ganzzahl, die das Ergebnis der Division nicht überschreitet". Deshalb fühlt es sich an.

print 1 / 2 # 0
print -1 / 2 # -1

Übrigens ist in Python 3.x die Berechnung von int $ \ div $ int ein Bruchteil. Verwenden Sie `//`, damit sich Python 3.x genauso verhält wie Python 2.x.

//Ist Python 2.Es kann auch mit x verwendet werden.




#### **`Python3.x`**
```python

1 / 2 # 0.5
1 // 2 # 0
-1 / 2 # -0.5
-1 // 2 # -1

numpy kleine Geschichte

Jeder liebt Numpy.

Eindimensionale Array-Transformation

Wenn Sie das eindimensionale Array mit der Anzahl der Elemente $ n $ mit `shape``` überprüfen, ist es` (n,) `. Verwenden Sie reshape```, um dies in einen Zeilenvektor (1, n) oder einen Spaltenvektor `(n, 1)` umzuwandeln.

arr = numpy.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr.shape # (10, )

arr.reshape((1, -1))
# array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

arr.reshape((-1, 1))
# array([[0],
#        [1],
#        [2],
#        [3],
#        [4],
#        [5],
#        [6],
#        [7],
#        [8],
#        [9]])

Inversion mit Scheiben

Es kann mit Scheiben gedreht werden. Slices werden betrieben von (Startindex): (Endindex): (Intervall). Negative Werte beziehen sich auf den Index von hinten.

[-1::-1]Sie können vom Ende bis zum Anfang mit schneiden.


 Das erste `` `-1``` kann weggelassen werden.

```py
X = numpy.arange(9).reshape((3, 3))
# array([[0, 1, 2],
#        [3, 4, 5],
#        [6, 7, 8]])

X[::-1, :]
# array([[6, 7, 8],
#        [3, 4, 5],
#        [0, 1, 2]])

X[:, ::-1]
# array([[2, 1, 0],
#        [5, 4, 3],
#        [8, 7, 6]])

vectorize

In den universellen Funktionen von numpy werden vier Betriebsregeln zwischen ndarrays, Dreiecksfunktionen jedes Elements und Funktionen definiert, die logarithmische Werte annehmen. Verwenden Sie `` `vectorize```, um eine Funktion zu definieren, die Ihre eigene Funktion auf jedes Element anwendet. Übergeben Sie beispielsweise eine Funktion, die den Rest zurückgibt, wenn sie durch 10 geteilt wird, um sie zu vektorisieren, und übergeben Sie ndarray an diese Funktion.

X = numpy.arange(25).reshape((5, 5))
# array([[ 0,  1,  2,  3,  4],
#        [ 5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14],
#        [15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24]])

numpy.vectorize(lambda x: x % 10)(X)
# array([[0, 1, 2, 3, 4],
#        [5, 6, 7, 8, 9],
#        [0, 1, 2, 3, 4],
#        [5, 6, 7, 8, 9],
#        [0, 1, 2, 3, 4]])

abschließend

Ich habe versucht, die kleine Geschichte von Python zusammenzufassen. Bitte lassen Sie mich wissen, wenn es andere Dinge wie diese gibt. Wenn Sie etwas finden, werde ich es nach Bedarf hinzufügen.

Zusätzliche Information

Korrigiert unter Bezugnahme auf die Kommentare von @ Tsutomu-KKE @ github, @ shiracamus und @ kochory. (04.06.2016)

Recommended Posts

Python kleine Geschichte Sammlung
App Service Kleine Story-Sammlung
[Kleine Geschichte] Holen Sie sich mit Python einen Zeitstempel
Python (3) Dominer ORM-Sammlung
[Python] Sammlungstypen sortieren
[Kleine Geschichte] Testen Sie die Bilderzeugung mit Python / OpenCV
[Kleine Geschichte] In Python ist i = i + 1 etwas schneller als i + = 1.
[Kleine Geschichte] Mit Python ohne Multithreading synchronisieren (eingeschränkte Verwendung)
Geschichte beim Iterieren des Python-Tupels
Stolpern Geschichte mit Python-Array
Python-Snippet-Sammlung mit Kino4d
GAE + Python + Django süchtig machende Geschichte
Bildverarbeitungssammlung in Python
Kleine Geschichte: Numpy Flatten Mechanismus
[Kleine Geschichte] [Python] Ersetzen Sie Zeichenfolgen in einem zweidimensionalen Array durch Zahlen
Die Geschichte von Python und die Geschichte von NaN
Scala-ähnliche Erfassungsoperation in Python
[Memo] Kleine Geschichte von Pandas, numpy
Seltsame und schreckliche Python-Fehlergeschichte
Geschichte der Potenznäherung von Python
Generieren Sie eine erstklassige Sammlung in Python
Automatische Erfassung von Aktienkursen mit Python
[Python] Sortieren Sie Sammlungstypen als Referenz
Die Geschichte der Manipulation globaler Python-Variablen
Wissenschaftliche Programmierung Petit Tech Collection in Python
Eine Geschichte über Python Pop und Append
ModuleNotFoundError in Python: Kein Modul mit dem Namen story
Tipps zum Erstellen kleiner Werkzeuge mit Python
Die Geschichte der Verarbeitung A von Blackjack (Python)