Änderungen von Python 3.0 zu Python 3.5

Einführung

Dieser Artikel ist der Artikel zum 16. Tag von Python Part 2 Adventskalender 2015.

Hinweis

Diesmal,

Ich werde nicht darauf eingehen, sondern nur die Teile vorstellen, die dem Wesen nahe kommen, wie z. B. Python-Grammatik und primitive Typen. (Da es einige berührte Teile gibt, überspringen Sie in diesem Fall bitte ...)

Gegen Ende habe ich nicht viel Zeit und es wird chaotisch, aber bitte vergib mir.

Python3.0 -> Python3.1

Bestelltes Wörterbuch

Einführung der Sammlungen.OrderedDict-Klasse. Es ist wie ein Wörterbuch, das sich an die Reihenfolge erinnert, in der es eingefügt wurde.

Python3.1


from collections import OrderedDict

>>> {2:"a", 1:"b", 3:"c"}.items()
dict_items([(1, 'b'), (2, 'a'), (3, 'c')])
>>> 
>>> OrderedDict([(2, "a"), (1, "b"), (3, "c")]).items()
ItemsView(OrderedDict([(2, 'a'), (1, 'b'), (3, 'c')]))

Formatbezeichner für 3-stelliges Trennzeichen

Die integrierten Funktionen format () und str.format () können jetzt Formatspezifizierer für dreistellige Trennzeichen verwenden. Sie können es mit einem Komma angeben. Unterstützt int, float, complex, decimal.Decimal.

Python3.1


>>> format(123456789, ',d')
'123,456,789'
>>> format(123456789, ',f')
'123,456,789.000000'
>>> format(123456789, ',.2f')
'123,456,789.00'
>>> 
>>> "{0:,d}".format(123456789)
'123,456,789'
>>> "{0:,f}".format(123456789)
'123,456,789.000000'
>>> "{0:,.2f}".format(123456789)
'123,456,789.00'

Nein, ich schäme mich zu wissen, dass ich das Format zum ersten Mal angeben kann. .. Ich habe mich gefragt, ob es etwas zu sagen gibt, aber ich habe es nicht überprüft.

Da format () als format (value [, format_spec]) geschrieben ist, verstehe ich, dass Sie das Format angeben können, aber Das str.format () wusste nicht, wo es suchen sollte. Für den eingebauten Typ "str.format (* args, ** kwargs)" Ich verstehe überhaupt nicht, weil es nur sagt.

Während ich das sagte, fand ich hier. (Es ist ein Geheimnis, dass es einen Link direkt unter str.format gab ...)

Andere Sprachänderungen

Über kleine Änderungen. Ich werde es leicht zusammenfassen.

Führen Sie Verzeichnisse und Zip-Archivdateien direkt aus

Das Verzeichnis mit \ _ \ _ main \ _ \ _. Py und das Zip-Archiv können direkt ausgeführt werden, indem der Name an den Interpreter übergeben wird.

Umm. Es ist schwer zu verstehen.

__main__.py


print("Hello World!!")

Erstellen Sie eine solche Datei und speichern Sie sie unter dem Pfad "python_test / __ main __. Py". Versuchen Sie dann, einen Reißverschluss zu machen.

$ zip -j python_test.zip python_test/__main__.py

Überprüfen Sie, ob sich "__main __. Py" in der Wurzel befindet.

$ unzip -l python_test.zip
Archive:  python_test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       23  2015-12-16 12:34   __main__.py
---------                     -------
       23                     1 file

Dann renne!

$ #Aus Ordner ausführen
$ python python_test
Hello World!!
$ #Aus dem Archiv ausführen
$ python python_test.zip
Hello World!!

Nun, du kannst es so machen.

Bit \ _Länge Methode zum Typ int hinzugefügt

Python3.1


>>> n = 37
>>> bin(n)
'0b100101'
>>> n.bit_length()
6
>>> n = 2**123-1
>>> n.bit_length()
123

Ja. Die Anzahl der Ziffern in Binär wird so ausgegeben.

Die Felder der Zeichenfolge format () werden automatisch nummeriert.

Python3.1


>>> "{} {}!!".format("Hello", "World")
'Hello World!!'

Das habe ich auch zum ersten Mal gelernt ... Es ist bequem!

string.maketrans () ist veraltet

Neu als statische Methode erstellt

Kann verwendet werden.

Mit der Syntax der with-Anweisung können Sie mehrere Kontextmanager in einer Anweisung übergeben

Python3.1


>>> class WithTest:
...  def __init__(self, msg):
...   self.msg = msg
...  
...  def __enter__(self):
...   print("enter: "+self.msg)
...   return self
...  
...  def __exit__(self, exc_type, exc_value, traceback):
...   print("exit: "+self.msg)
...   return True
... 
>>> with WithTest("hoge") as hoge, WithTest("fuga") as fuga:
...  pass
... 
enter: hoge
enter: fuga
exit: fuga
exit: hoge

Sie können mit Anweisungen gleichzeitig schreiben, ohne sie zu verschachteln. Die Bewegung ist dieselbe wie die verschachtelte Bewegung.

Diese veraltete contextlib.nested ().

'round (x, n) `gibt jetzt eine ganze Zahl zurück, wenn x eine ganze Zahl ist

Es scheint, dass es früher Gleitkommazahlen zurückgegeben hat.

Python3.1


>>> round(1234, -2)
1200
>>> round(1234., -2)
1200.0
>>> round(1234, 2)
1234

Wenn Sie eine Ganzzahl übergeben, wird diese als Ganzzahl zurückgegeben.

Verwendet den Algorithmus von David Gay, um Gleitkommawerte anzuzeigen

Es bleibt der Titel. Gleitkomma wird mit einem neuen Algorithmus angezeigt.

Python3.0


>>> 1.1
1.1000000000000001

Python3.1


>>> 1.1
1.1

Es war schwierig für mich, weiter zu reden ~ Bitte sag es mir!

Python3.1 -> Python3.2

argparse Kommandozeilen-Analysemodul

Eine aktualisierte Version des Argparse-Moduls von optparse wurde hinzugefügt.

Unterstützt Positionsargumente, Unterbefehle, Optionsvalidierung usw.

Die Formel für dieses Modul ist detailliert. Wenn Sie mehr darüber erfahren möchten, besuchen Sie bitte hier.

Wörterbuchbasierte Einstellungen für die Protokollierung

Es gab eine Methode zum Festlegen des Protokollierungsmoduls durch Aufrufen einer Funktion oder Lesen einer Datei im Format ConfigParser.

Um diese Einstellung flexibel vorzunehmen, können Sie jetzt Einstellungen mithilfe eines Wörterbuchs vornehmen. Legen Sie Informationen in [logging.config.dictConfig ()] fest (http://docs.python.jp/3/library/logging.config.html#logging.config.dictConfig) Sie kann durch Übergeben des gespeicherten Wörterbuchs festgelegt werden.

Flexible Einstellungen können vorgenommen werden, indem eine in JSON oder YAML geschriebene Datei analysiert und an eine Methode übergeben wird.

Klicken Sie hier, um Details zum Protokollierungsmodul anzuzeigen (http://docs.python.jp/3/library/logging.html#module-logging).

concurrent.futures-Modul

Das Modul concurrent.futures wurde hinzugefügt. Dieses Modul bietet eine übergeordnete Schnittstelle für aufrufbare Objekte, die asynchron ausgeführt werden können.

Sie können den ThreadPoolExecutor verwenden, um ihn in einem Thread auszuführen, oder Sie können den ProcessPoolExecutor verwenden, um ihn in einem anderen Prozess auszuführen.

Klicken Sie hier, um Details zum Modul concurrent.futures (http://docs.python.jp/3/library/concurrent.futures.html) anzuzeigen.

PYC-Repository-Verzeichnis

Wenn die .pyc-Datei der von Python generierten Cache-Datei von einer anderen Version des Interpreters betrieben wird, kann der vorhandene Cache nicht verwendet werden, sodass eine neue Cache-Datei erstellt und überschrieben wird.

Um dies zu beheben, befindet sich die Datei mit der Python-Version, die am Ende des Dateinamens hinzugefügt wurde, jetzt im Verzeichnis \ _ \ _ pycache \ _ \ _.

Python3.2


$ touch mymodule.py
$ python -c "import mymodule"
$ ls
__pycache__  mymodule.py
$ ls __pycache__
mymodule.cpython-32.pyc

Der Cache des importierten Moduls wird im Ordner \ _ \ _ pycache \ _ \ _ mit dem Dateinamen mit der Version erstellt.

Also Datei mit ABI-Version markiert

Freigegebene Objekte sind auch Python-Implementierungsmethoden (CPython, Jython, PyPy usw.) + Haupt- und Nebenversionsnummern + Build-Flags Sie können jetzt mehrere Dateien mit dem Namen ablegen.

Python Web Server Gateway Interface v1.0.1

In diesem PEP wird erläutert, wie das WSGI-Protokoll mit Bytes und Textproblemen umgeht. PEP ist für Byte-Strings, die in Anforderungs- und Antwortkörpern verwendet werden Unterscheiden Sie zwischen sogenannten nativen Zeichenfolgen, die in Anforderungs- / Antwortheadern und Metadaten verwendet werden.

Native Zeichenfolgen sind immer str, können jedoch mithilfe der Latin-1-Codierung in Bytes konvertiert werden und sind auf Codepunkte zwischen U + 0000 und U + 00FF beschränkt. Diese Zeichenfolgen werden im Schlüssel und Wert im Wörterbuch der Umgebungsvariablen sowie im Antwortheader und im Status von start \ _response () verwendet. Das heißt, Sie müssen ISO-8891-1-Zeichen oder RFC 2047-MIME-Codierung verwenden.

Server-Implementierer von CGI-WSGI-Routen und anderen Protokollen im CGI-Stil erfordern, dass Benutzer native Zeichenfolgen verwenden, um auf Umgebungsvariablen auf verschiedenen Plattformen zuzugreifen.

Um diese Lücke zu schließen, verfügt das wsgiref-Modul über ein neues "wsgiref.handlers.read_environ ()", das CGI-Variablen von os.environ in native Zeichenfolgen konvertiert und ein neues Wörterbuch zurückgibt.

Nun, ich habe mein Bestes versucht, um Englisch zu lesen, aber ich habe nicht wirklich verstanden, was wichtig ist (lacht).

Die Einführung ist lang, wenn wsgiref.handlers.read_environ () sagen wollte. War es nur das ...?

Wer Hilfe versteht !!

Andere Sprachänderungen

# Zu den Formatbezeichnern vonformat ()und str.format () hinzugefügt

Python3.2


>>> format(10, 'o')
'12'
>>> format(10, '#o')
'0o12'
>>> format(10, 'b')
'1010'
>>> format(10, '#b')
'0b1010'
>>> format(10, '.0f')
'10'
>>> format(10, '#.0f')
'10.'

Hinzufügen von str.format_map ()

Es ist wie Format, Wörterbuchversion.

Python3.2


>>> '{msg1} {msg2}!!'.format_map({"msg1":"Hello", "msg2":"World"})
'Hello World!!'

Hinzufügung der Option -q

Python3.2


$ python
Python 3.2.6 (default, Dec  9 2015, 17:42:33) 
[GCC 5.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
$ python -q
>>> 

Durch Hinzufügen der Option -q können die Versionsinformationen beim Starten des Interpreters ausgeblendet werden.

hasattr () löst jetzt zur Laufzeit eine Ausnahme aus

hasattr () ruft getattr () auf, um festzustellen, ob eine Ausnahme erkannt wird. Früher war das Verhalten False, wenn eine Ausnahme erkannt wurde. Jetzt werden andere Ausnahmen als AttributeError durchlaufen.

Python3.1


>>> class C:
...  @property
...  def f(self):
...   return 1//0
...  @property
...  def g(self):
...   return 0
... 
>>> c = C()
>>> hasattr(c, 'f')
False
>>> hasattr(c, 'g')
True
>>> hasattr(c, 'h')
False

Python3.2


>>> class C:
...  @property
...  def f(self):
...   return 1//0
...  @property
...  def g(self):
...   return 0
... 
>>> c = C()
>>> hasattr(c, 'f')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
ZeroDivisionError: integer division or modulo by zero
>>> hasattr(c, 'g')
True
>>> hasattr(c, 'h')
False

Zero Division Error wird in Python 3.1 nicht angezeigt. Auf den ersten Blick sieht es so aus, als hätte es Attribute, aber mit einer Ausnahme ist das Ergebnis Falsch.

Es gibt Ausnahmen in Python 3.2. Es gibt jedoch keinen AttributeError und das Ergebnis ist False.

Das Verhalten von "str ()" in complex und float ist jetzt dasselbe wie "repr ()"

Python3.1


>>> import math
>>> repr(math.pi)
'3.141592653589793'
>>> str(math.pi)
'3.14159265359'

Python3.2


>>> import math
>>> repr(math.pi)
'3.141592653589793'
>>> str(math.pi)
'3.141592653589793'

In 3.1 ist das Ergebnis von "str ()" etwas kurz.

Das Memoryview-Objekt verfügt jetzt über eine release () -Methode

Python3.2


>>> with memoryview(b'abc') as v:
...  print(v.tolist())
...
[97, 98, 99]

Ressourcen werden durch Aufrufen der Methode release () freigegeben. Darüber hinaus wurden auch enter () und exit () implementiert, sodass Sie die with-Anweisung verwenden können.

Sie können jetzt Namen entfernen, die als freie Variablen in verschachtelten Blöcken angezeigt werden

Python3.1


>>> def outer(x):
...  def inner():
...   return x
...  inner()
...  del x
...
SyntaxError: can not delete variable 'x' referenced in nested scope
>>> 

Python3.2


>>> def outer(x):
...  def inner():
...   return x
...  inner()
...  del x
...
>>> 

Was soll ich damit machen? Ich denke, es wäre hilfreich, wenn Sie mir einen Fehler geben würden. Es scheint, dass diese Art von Code in 2.6 vorerst funktioniert.

Python3.2


>>> def f():
...  def print_error():
...   print(e)
...  try:
...   pass
...  except Exception as e:
...   print_error()
>>> 

Was ich hier gelernt habe ist, dass e implizit del ist. Sicher, ich möchte, dass das funktioniert, aber ich bin der einzige, der meint, ich sollte diese Art von Code nicht schreiben, oder?

Das interne Struktursequenz-Tool besteht jetzt aus einer Unterklasse von Taple

Python3.2


>>> isinstance(sys.version_info, tuple)
True

Es scheint von os.stat (), time.gmtime (), sys.version_info zurückgegeben zu werden. Sie können es wie einen benannten Taple behandeln.

Einfache Steuerung der Warnung mit PYTHONWARNINGS-Umgebungsvariablen

$ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::'

Sie kann auch mit der Option -W angegeben werden.

Ressourcenwarnung hinzugefügt

Es ist standardmäßig deaktiviert und muss mit der Option -W aktiviert werden, um es anzuzeigen.

Python3.2


$ python -q -Wdefault
>>> f = open("foo", "wb")
>>> del f
__main__:1: ResourceWarning: unclosed file <_io.BufferedWriter name='foo'>

Das Bereichsobjekt unterstützt jetzt Index, Count und Slice

Python3.2


>>> r=range(0,100,2)
range(0, 100, 2)
>>> r.count(10)
1
>>> r.index(10)
5
>>> r[10]
20
>>> r[0:5]
range(0, 10, 2)

Es scheint, dass es einen Wert größer als sys.maxsize haben kann.

callable () eingebaute Funktionen sind zurück

Python3.2


>>> callable(max)
True
>>> callable(1)
False

Eine Funktion, die prüfen kann, ob sie aufgerufen werden kann.

Nicht-ASCII-Zeichen können im Pfad zum Modulordner verwendet werden

Es scheint, dass es geworden ist.

Python3.2 -> Python3.3

Über die virtuelle Umgebung

Ein venv-Modul für den programmatischen Zugriff und ein pyvenv-Skript für den programmatischen Zugriff wurden hinzugefügt.

Ich habe nur virtualenv verwendet, sollte ich es verwenden? Auch wenn ich pyvenv drücke, steht venv im Gebrauch. ..

Python3.3


$ pyvenv
usage: venv [-h] [--system-site-packages] [--symlinks] [--clear] [--upgrade]
            ENV_DIR [ENV_DIR ...]
venv: error: the following arguments are required: ENV_DIR

Es scheint, dass dieses Befehlsmodul von der Integration in den Interpreter-Kern profitiert, daher ist es möglicherweise besser, es hier zu verwenden.

Implizites Namespace-Paket

Sie müssen \ _ \ _ init \ _ \ _. Py nicht mehr im Paketverzeichnis ablegen.

Python3.2


$ ls -R
hoge

./hoge:
fuga.py
$ python -c "import hoge.fuga"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named hoge.fuga

Python3.3


$ ls -R
hoge

./hoge:
fuga.py
$ python -c "import hoge.fuga"
$ 

Es scheint, dass Python 3.3 gelesen werden kann, da kein Fehler vorliegt.

Überarbeitung der Betriebssystem- und E / A-Ausnahmehierarchie

Alle Ausnahmetypen sind jetzt OSError. (Andere Namen bleiben als Aliase übrig)

Außerdem ist es jetzt bereit, bestimmte Fehlerbedingungen zu ergänzen. Anstatt eine bestimmte Konstante für das errno-Attribut zu betrachten, können Sie die entsprechende von OSError abgeleitete Klasse ergänzen.

ConnectionError hat eine fein abgeleitete Klasse.

Dies ist ein offizielles Beispiel

Python3.2


from errno import ENOENT, EACCES, EPERM

try:
    with open("document.txt") as f:
        content = f.read()
except IOError as err:
    if err.errno == ENOENT:
        print("document.txt file is missing")
    elif err.errno in (EACCES, EPERM):
        print("You are not allowed to read document.txt")
    else:
        raise

Python3.3


try:
    with open("document.txt") as f:
        content = f.read()
except FileNotFoundError:
    print("document.txt file is missing")
except PermissionError:
    print("You are not allowed to read document.txt")

Ich kann jetzt schreiben. Python3.3 ist schlau! Ist Python 3.2 eine C-Sprache ...

Delegierungssyntax an Subgenerator

Eine Rendite aus der Anweisung wurde hinzugefügt.

Ein Generator kann seine Verarbeitung an einen anderen Generator delegieren.

Python3.3


>>> def g():
...  yield from [1,2,3]
...  yield from [-1,-2,-3]
...
>>> gen = g()
>>> list(gen)
[1, 2, 3, -1, -2, -3]

Die Yield from-Anweisung kann auch den in der return-Anweisung angegebenen Endwert zurückgeben.

Python3.3


>>> def g():
...  yield 1
...  yield 2
...  yield 3
...  return 0
...
>>> def f():
...  data = yield from g()
...  print('return value: ' + str(data))
...
>>> gen = f()
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
>>> next(gen)
return value: 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Unterdrückung des Ausnahmekontexts

Sie können den Ausnahmekontext unterdrücken, indem Sie in der Anweisung raise from den Wert None angeben.

Python3.3


>>> def f():
...  raise Exception('in function')
...
>>> def g1():
...  try:
...   f()
...  except Exception as e:
...   raise Exception('test1')
...
>>> def g2():
...  try:
...   f()
...  except Exception as e:
...   raise Exception('test2') from None
...
>>> g1()
Traceback (most recent call last):
  File "<stdin>", line 3, in g1
  File "<stdin>", line 2, in f
Exception: in function

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in g1
Exception: test1
>>> g2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in g2
Exception: test2

Außergewöhnlicher Kontext wird in g2 unterdrückt.

Explizites Unicode-Literal

Sie können der Zeichenfolge jetzt erneut "u" voranstellen.

Python3.2


>>> u"test"
  File "<stdin>", line 1
    u"test"
          ^
SyntaxError: invalid syntax

Python3.3


>>> u"test"
'test'

Qualifizierter Name der Funktion der Klasse

Sie können den Pfad von der obersten Ebene mit dem Attribut \ _ \ _ qualname \ _ \ _ abrufen.

Python3.3


>>> class C:
...  class D:
...   def f():
...    pass
...
>>> C.D.__name__
'D'
>>> C.D.__qualname__
'C.D'
>>> C.D.f.__qualname__
'C.D.f'

Eingebaute Funktionen und Typen

Python3.3 -> Python3.4

3.3 bis 3.4 sind kurz, da es keine neuen Grammatikfunktionen gibt.

Explizites Bootstrapping von PIP während der Python-Installation

Dies würde bedeuten, dass PIP standardmäßig eingeführt wird.

Neu erstellter Dateideskriptor kann nicht vererbt werden

Korrekt.

Sie können jedoch die folgenden Methoden verwenden, wenn Sie dies wünschen.

Andere Sprachänderungen

--min () undmax ()können den durch das Schlüsselwortargument angegebenen Wert zurückgeben, wenn keine zu iterierenden Elemente vorhanden sind. --bytes.join () undbyte array.join ()akzeptieren beliebige Pufferobjekte als Argumente.

Python3.4 -> Python3.5

Was 3.5 betrifft, habe ich es nicht so sehr angefasst, daher ist es eine flache Einführung und ich habe keine Zeit, also ist es kurz und einfach. .. ..

Hinzufügen von Async und Warten auf Syntax

Verwenden Sie die Syntax "async def", um eine Collout-Funktion zu erstellen.

Python3.5


>>> async def cofunc():
...  return 'test'
...

Darüber hinaus wurde die folgende Syntax hinzugefügt.

Diese Syntaxen können nur innerhalb der durch async def definierten Collout-Funktion verwendet werden.

Sie können die Anweisung await in der Koluitin-Funktion verwenden. Die Warten-Anweisung kann die Hinrichtung der Kolu-Leute aussetzen, bis der resultierende Wert gültig ist. Es kann verwendet werden, indem die Methode await () für jedes Objekt definiert wird.

Eingefügter Operator für die Matrixmultiplikation

Sie können die Matrix mit @ multiplizieren. Es kann verwendet werden, indem __matmul__ (), __rmatmul__ (), __imatmul__ () im Objekt implementiert werden.

Es scheint von numpy implementiert zu werden. Aus dem offiziellen Dokument.

Python3.5


>>> import numpy
>>> x = numpy.ones(3)
>>> x
array([ 1., 1., 1.])
>>> m = numpy.eye(3)
>>> m
array([[ 1., 0., 0.],
       [ 0., 1., 0.],
       [ 0., 0., 1.]])
>>> x @ m
array([ 1., 1., 1.])

Erweiterung auspacken

Sie können "*" für Iteratorobjekte und "**" für Wörterbücher verwenden.

Python3.5


>>> print(*[1,2], 3, *[4])
1 2 3 4
>>> def f(a, b, c, d):
...  print(a,b,c,d)
...
>>> f(**{'a': 1, 'd': 4}, **{'c': 3}, **{'b': 2})
1 2 3 4
>>> *range(4), 4
(0, 1, 2, 3, 4)
>>> [*range(4), 4]
[0, 1, 2, 3, 4]
>>> {*range(4), 4}
{0, 1, 2, 3, 4}
>>> {**{'x': 3}, 'y': 4}
{'x': 3, 'y': 4}

Unterstützung für das% -Format in Bytes und Bytearray

Python3.5


>>> b'test: %d' % 1
b'test: 1'

% b unterstützt Unicode nicht. Sie können jedoch "% a" verwenden.

Python3.5


>>> b'Hello %b!' % b'World'
b'Hello World!'
>>> b'Hello %b!' % 'World'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'
>>> b'Hello %a!' % 'World'
b"Hello 'World'!"
>>> b'price: %a' % '10€'
b"price: '10\\u20ac'"

Type Hints

Type Hints wurde eingeführt. Ich werde zu einem späteren Zeitpunkt ausführlich in einem anderen Artikel schreiben. ..

Geben Sie mithilfe der Funktionsanmerkung an.

Python3.5


>>> def f(num: int) -> int:
...  return num+1
...

Hinzufügen der Funktion "os.scandir ()"

Eine Funktion, die den Inhalt eines Verzeichnisses iteriert. Es scheint früh zu sein. Lass es uns benutzen.

ls -a
.         ..        .hidefile empty     hoge

Python3.5


>>> import os
>>> for entry in os.scandir('.'):
...  if not entry.name.startswith('.') and entry.is_file():
...   print(entry.name)
...
empty

Neuausführung während Systemaufruf in EINTR

Zuvor war es in Python erforderlich, entweder "InterruptedError" zu ignorieren oder einen Mechanismus zum Neustart nach dem Abfangen bereitzustellen.

Ab Python 3.5 werden Systemaufrufe in EINTR automatisch erneut ausgeführt.

Änderungen im Umgang mit Stop Iteration im Generator

Zuvor wurde das Auftreten von Stopp-Iteration im Generator unverändert ausgelöst.

Python3.4


>>> def gen():
...  next(iter([]))
...  yield
...
>>> next(gen())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in gen
StopIteration

Beim Importieren des generator_stop von __future__ wird eine Ausnahme als RuntimeError ausgelöst.

Python3.5


>>> from __future__ import generator_stop
>>> def gen():
...  next(iter([]))
...  yield
...
>>> next(gen())
Traceback (most recent call last):
  File "<stdin>", line 2, in gen
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: generator raised StopIteration

Ungefährer Gleichheitsvergleich

math.isclose () wurde hinzugefügt.

Python3.5


>>> import math
>>> a = 5.
>>> b = 4.99998
>>> math.isclose(a, b, rel_tol=1e-5)
True
>>> math.isclose(a, b, rel_tol=1e-6)
False
>>> math.isclose(a, b, abs_tol=0.00003)
True
>>> math.isclose(a, b, abs_tol=0.00001)
False

Am Ende

3.4 und 3.5 sind ziemlich rau. .. ..

Da es sich um ein kleines Update handelt, gibt es nur wenige grammatikalische Updates. Wenn Sie Fehlerbehebungen, Verbesserungen und Modulzusätze hinzufügen, wird der Betrag wie ein Dämon sein, also habe ich ihn diesmal weggelassen. Ich bin jedoch neugierig auf das in 3.4 hinzugefügte Asyncio-Modul und das in 3.5 hinzugefügte Tippmodul, sodass ich später einen Artikel schreiben werde.

Ich habe Python 3.3 berührt und die neuen Funktionen späterer Versionen nicht angesprochen, daher entschuldige ich mich für die vage Erklärung (´ ・ ω ・ `)

Wenn Sie interessiert sind, lesen Sie bitte Offizielles Dokument! !! (Wir sehen uns wieder

Morgen ist @ fx-kirin.

Lass uns ein gutes Python3-Leben haben! !!

Recommended Posts

Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Flirte von PHP nach Python
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Rufen Sie Matlab von Python zur Optimierung auf
Post von Python auf Facebook Timeline
[Lambda] [Python] Von Lambda auf Twitter posten!
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3
Auf Python 2.7.9 aktualisiert
Summe von 1 bis 10
SQL zu SQL
MeCab von Python
"Backport" zu Python 2
[Python] Fluidsimulation: Von linear zu nichtlinear
Von Python bis zur Verwendung von MeCab (und CaboCha)
So aktualisieren Sie Google Sheets von Python
Privates Python-Handbuch (von Zeit zu Zeit aktualisiert)
Ich möchte ein Glas aus Python verwenden
Konvertieren Sie von Katakana zu Vokal Kana [Python]
Push-Benachrichtigung vom Python-Server an Android
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Zugriff auf RDS von Lambda (Python)
Python> Ausgaben von 1 bis 100, 501 bis 600> Für CSV
In Python von Markdown in HTML konvertieren
[Amazon Linux] Wechsel von der Python 2-Serie zur Python 3-Serie
API-Erklärung zum Berühren von Mastodon aus Python
Stellen Sie von Python aus eine Verbindung zur Websocket-API von coincheck her
Senden Sie eine Nachricht von Slack an einen Python-Server
Verwenden Sie thingspeak aus Python
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Berühren Sie MySQL in Python 3
So öffnen Sie einen Webbrowser über Python
Bedienen Sie Filemaker von Python aus
So installieren Sie Python
Verwenden Sie fließend Python
Studie aus Python Hour7: Verwendung von Klassen
[Python] Konvertieren von DICOM in PNG oder CSV
Excel-Datei aus Python importieren (in DB registriert)
Python aus oder importieren
Übergang von WSL1 zu WSL2
Ich möchte mit Python eine E-Mail von Google Mail senden.
Schreiben Sie Python2-Code in Python3 um (2to3)
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Von der Datei zur Diagrammzeichnung in Python. Grundstufe Grundstufe
Verwenden Sie MySQL aus Python
So installieren Sie Python
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
[Python] Erstellen Sie eine Tabelle von Pandas DataFrame zu Postgres
Führen Sie Python aus Excel aus