Python-Technik für diejenigen, die Anfänger loswerden wollen

Freitag I / O. Bei Wamuu Co., Ltd. ist jeder Freitag ein Tag, an dem wir an dem arbeiten, woran wir interessiert sind, und die Ergebnisse auf irgendeine Weise ausgeben. Jeder sollte am Freitag machen, was er will!

Einführung

Leute, die sich "an Python gewöhnen", werden immer mehr neue Dinge lernen. Ich denke, es gibt noch viele Dinge, über die wir in der Welt von Python nichts wissen. (Voller Dinge, die ich nicht einmal weiß)

Einschlussnotation

Sie kennen die Notation der Listeneinbeziehung, können aber auch eine andere als die Liste schreiben! !!

#Wörterbucheinschlussnotation
print({v: v * 10 for v in range(0, 10)})

#Einschlussnotation setzen
l = [1, 1, 1, 2, 2, 2, 3, 3, 3]
print({v * 10 for v in l})

Nein! Ich werde die Tupel-Einschlussnotation schreiben! Selbst wenn ich sage und folgendes schreibe, funktioniert es nicht! !! !!

print((v * 10 for v in range(0, 10)))

In diesem Fall wird "Generatorobjekt" zurückgegeben. Das heißt, Sie können Folgendes tun.

print(tuple(v * 10 for v in range(0, 10)))

Kontextmanager und With-Anweisung

Haben Sie jemals "with" in einem Beispiel zum Öffnen einer Datei verwendet? Das ist es.

with open(filepath) as f:
    content = f.read(-1)

Wenn Sie die with-Anweisung beenden, wird die Datei automatisch geschlossen, es wird jedoch ein Mechanismus verwendet, der als Kontextmanager bezeichnet wird.

class ContextManager(object):
    def __enter__(self):
        print('Ja! !! !!')
        return 'Reisbällchen'

    def __exit__(self, exc_type, exc_value, traceback):
        print('Deta! !! !!')

with ContextManager() as value:  #  value == 'Reisbällchen'
    print(value)

Bei der Eingabe der with-Anweisung wird "enter" aufgerufen, und beim Beenden wird "exit" aufgerufen. Sehr einfach.

Deskriptor

In Python können Sie eine Klasse erstellen, die sich nur dann besonders verhält, wenn sie zu einer bestimmten Klasse gehört.

class Person(object):
    def __init__(self, last_name, first_name):
        self.last_name = last_name
        self.first_name = first_name
        self.parent = None

    #Das ist Kimo!
    def __get__(self, parent, klass):
        self.parent = parent
        return self

    @property
    def fullname(self):
        if self.parent:
            return self.parent.last_name + self.first_name
        return self.last_name + self.first_name

Eine normale Klasse, wenn sie instanziiert und normal verwendet wird.

gakky = Person('Arakaki', 'Yui')
print(gakky.fullname)  #Aragaki Yui

Wenn Sie jedoch einer bestimmten Klasse angehören, ändert sich das Verhalten!

class Man(Person):
    #Jedermanns Frau!
    yome = Person('Arakaki', 'Yui')

#Zu diesem Zeitpunkt ist noch jede Frau da.
print(Man.yome.fullname)  #Aragaki Yui

#ICH!
ore = Man('Yamada', 'Taro')

#Kecorn! !! !! !!
print(ore.yome.fullname)  #Yui Yamada! !! !! !! !!

Für Referenzen über Klassen oder Instanzen wird __get__ ausgeführt. Dies ist sehr praktisch, wenn Sie eine Klasse erstellen, die sich auf den Wert der Klasse bezieht, zu der sie gehört.

Descriptor HowTo Guide

Eigenschaftsdekorateur mit Cache-Funktion

Es ist als Django Utility implementiert, aber die Cache-Funktion des Dekorators "@ property" Ein angehängter Typ. Wenn Sie es einmal aufrufen, wird das Ergebnis zwischengespeichert. Wenn Sie also intern eine umfangreiche Verarbeitung durchführen, können Sie eine PC-freundliche Person werden.

class cached_property(object):
    def __init__(self, func):
        self.__doc__ = getattr(func, '__doc__')
        self.func = func

    def __get__(self, parent, klass):
        if parent is None:
            return self
        value = parent.__dict__[self.func.__name__] = self.func(parent)
        return value


class Hoge(object):
    @cached_property
    def value(self):
        import time
        time.sleep(10)
        return 'Es war ein schwerer Prozess'


hoge = Hoge()
print(hoge.value)
print(hoge.value)

Dies ist der richtige Weg, um den Deskriptor zu verwenden! !! !! Es gibt auch eine einzelne Bibliothek.

Metaprogrammierung

Dies ist "Python Black Magic". Es ist ein Mechanismus, der die Definition der Klasse dynamisch ändern kann. Wenn Sie sie jedoch wie folgt implementieren, können Sie ein großer Lügner werden.

class MetaClass(type):
    def __new__(klass, name, bases, attrs):
        """
        arguments:
            klass --MetaClass selbst
            bases --Hoges Name
            bases --Hoges Elternklassen
            attrs --Hoges Klassenvariablen und Funktionen

        return:
Klasse, die tatsächlich verwendet werden soll
        """
        # new_Klasse enthält Hoge
        new_class = super(MetaClass, klass).__new__(klass, name, bases, attrs)

        #Ich werde int zurückkehren!
        return int

#Liste erben! !!
class Hoge(list, metaclass=MetaClass):
    pass

#Krebs ignorieren! !! !!
print(Hoge)  # <class 'int'>

Abgesehen von dieser Art der Materialimplementierung ist Metaclass eine Technologie, die hauptsächlich für komplizierte Bibliotheken verwendet wird. Ich denke, es wird eine Lernerfahrung sein, dies und das zu sehen. Es ist eine geplante Verwendung, da es sich so verhält, als würde es verschiedene Dinge ignorieren, aber die Implementierung ist ordentlich, also versuchen Sie es bitte.

class MetaClass(type):
    def __new__(klass, name, bases, attrs):
        new_class = super(MetaClass, klass).__new__(klass, name, bases, attrs)

        silent = attrs.get('silent', False)
        if silent:
            new_class.say = lambda s: print('。。。')

        return new_class

class Person(object):
    def say(self):
        print('Hallo Hallo Hallo Hallo! !! !!')

class Ore(Person, metaclass=MetaClass):
    silent = False

class Omae(Person, metaclass=MetaClass):
    silent = True

Ore().say()  #Hallo Hallo Hallo Hallo! !! !!
Omae().say()  # 。。。

Kleine Geschichten

Leeren Wert entfernen

Wenn Sie ein leeres Element aus dem Array entfernen möchten, können Sie es wie folgt schreiben.

def ignore_empty(l):
    return list(filter(None, l))

print(ignore_empty([1, None, 0, 2, '', 3]))

https://docs.python.jp/3/library/functions.html#filter

flatten

Manchmal möchten Sie ein mehrdimensionales Array eindimensional machen! Bei einem zweidimensionalen Array können Sie es genau schreiben.

from itertools import chain

def flatten(l):
    return list(chain.from_iterable(l))

print(flatten([
    [1,2,3],
    [4,5,6],
    [7,8,9],
]))

Es scheint, dass Sie es richtig implementieren müssen, wenn es mehrdimensional oder gemischt ist.

Zusammenfassung zum Reduzieren einer Liste mit Python

Schreiben Sie einfach bedingte Ausdrücke, die mehreren Werten entsprechen

Wenn Sie einen bedingten Ausdruck schreiben, der besagt, dass der Dateiname mit hoge.txt oder piyo.md übereinstimmt, lautet er wie folgt.

if filename in ['hoge.txt', 'piyo.md']:
    pass

Dann wollte ich "hige.text" und "iiyo.md" hinzufügen, und dann musste ich so ein sehr langes Array schreiben.

if filename in ['hoge.txt', 'hige.text', 'piyo.md', 'iiyo.md', ...]:
    pass

Die folgenden Funktionen sind in solchen Fällen nützlich. Sie können flexibel wie das Unix glob schreiben.

from fnmatch import fnmatch

class glob_list(list):
    def __contains__(self, value):
        for pattern in self:
            if fnmatch(value, pattern):
                return True
        return False

l = glob_list(['??ge.txt', '?iyo.md'])

assert 'hoge.txt' in l
assert 'hige.txt' in l
assert 'piyo.md' in l
assert 'iiyo.md' in l

Das Ende

Python ist wirklich nützlich. Wir hoffen, dass Sie dazu beitragen können, Ihre Fähigkeiten so weit wie möglich zu verbessern.

Recommended Posts

Python-Technik für diejenigen, die Anfänger loswerden wollen
Für diejenigen, die Python mit vim schreiben möchten
Für diejenigen, die Excel VBA lernen und mit Python beginnen möchten
5 Gründe, warum die Verarbeitung für diejenigen nützlich ist, die mit Python beginnen möchten
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
Python für Super-Anfänger Super-Anfänger Python # Einfach loszuwerden
Ein modernes Verfahren zum Erstellen von Umgebungen für diejenigen, die sofort mit Python beginnen möchten
Ärgerliche Punkte für diejenigen, die Ansible vorstellen möchten
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Umgebungskonstruktion für diejenigen, die Python einfach mit VSCode (für Mac) lernen möchten
Für diejenigen, die mit TensorFlow2 maschinelles Lernen beginnen möchten
Referenz Referenz für diejenigen, die mit Rhinoceros / Grasshopper codieren möchten
Der erste Schritt für diejenigen, die Amateure der Statistik sind, aber Modelle für maschinelles Lernen in Python implementieren möchten
PyPI-Registrierungsverfahren für diejenigen, die ihr PyPI-Debüt geben möchten
Lose Artikel für diejenigen, die mit der Verarbeitung natürlicher Sprache beginnen möchten
[Python] Protokoll des Studientreffens für Anfänger (7/15)
Wie man lange Einschlüsse loswird
[Kurzer Satz] easygui für diejenigen, die sehr einfach eine einfache GUI mit Python verwenden möchten
Zusammenfassung nützlicher Techniken von Scrapy in Python
[Version 2020 für Anfänger] Empfohlene Lernmethode für diejenigen, die selbst KI-Ingenieur werden möchten
Entfernen Sie DICOM-Bilder in Python
Ich habe Airbnb-Daten für diejenigen analysiert, die in Amsterdam bleiben möchten
Vorgehensweise von der AWS CDK (Python) -Entwicklung bis zur AWS-Ressourcenkonstruktion * Für Anfänger
[Für Anfänger] Ich möchte den Index eines Elements erhalten, das einen bestimmten bedingten Ausdruck erfüllt
Memo Nr. 4, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Der schnellste Weg für Anfänger, um Python zu beherrschen
Dart-Grammatik für diejenigen, die nur Python kennen
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
[Python] Werden Sie die Datierung mit regulären Ausdrücken los
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
Ich möchte die Daten von League of Legends ③ erhalten
Ich möchte die Daten von League of Legends ② erhalten
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Einführung in die Programmierung (Python) TA Tendenz für Anfänger
Ich möchte League of Legends-Daten erhalten ①
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"
Wie man Python für Anfänger schneller macht [numpy]
Memo Nr. 5, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Grundlegende Geschichte der Vererbung in Python (für Anfänger)
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Treten Sie Azure mit Go ~ bei Für diejenigen, die Azure mit Go ~ starten und kennenlernen möchten
Dinge, die Sie bei der Verwendung von Python beachten sollten, wenn Sie MATLAB verwenden
Ich möchte Variablen / Funktionen / Klassen externer Dateien von Python abrufen / ausführen
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Selbst Anfänger möchten sagen "Ich verstehe Python voll und ganz"
So konvertieren Sie den Python # -Typ für Super-Anfänger von Python: str
So ermitteln Sie die Anzahl der Stellen in Python
Ich möchte benutzerdefinierte Datenattribute von HTML als Elemente mit Python Selenium erhalten
[Für Anfänger] So studieren Sie den Python3-Datenanalysetest
[Für diejenigen, die andere Programmiersprachen beherrschen] 10 Punkte, um Python-Punkte nachzuholen
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Python Lehrbuch für Anfänger
Nachdem Sie mit Python auf die Qiita-API geklickt haben, um eine Liste mit Artikeln für Anfänger zu erhalten, werden wir die Artikel von God besuchen
[Für Anfänger] Web-Scraping mit Python "Greifen Sie auf die URL auf der Seite zu, um den Inhalt abzurufen."
❤️ Blogger ❤️ "Beloved BI" ❤️ Los geht's ❤️ (für diejenigen, die mit Python Diagramme erstellen können)