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
Ich werde in der Reihenfolge von oben auf der Liste erklären.
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
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
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
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
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
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
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
Jeder liebt Numpy.
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]])
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]])
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.
Korrigiert unter Bezugnahme auf die Kommentare von @ Tsutomu-KKE @ github, @ shiracamus und @ kochory. (04.06.2016)
Recommended Posts