Inhaltsverzeichnis
String-Eingabe organisieren
Wir können „itertools.islice“ zum Erstellen verwenden 1 Das „islice“-Objekt ist ein Iterator, der die gewünschten Elemente erzeugt. Es ist jedoch zu beachten, dass dieser Vorgang alle Generatorelemente vor dem Slice sowie alle Elemente im „islice“-Objekt verwendet.
Dieser Code gibt den Inhalt erst nach dem ersten Kommentarteil aus. Diese Methode ist nützlich, wenn wir nur den Anfang des iterierbaren Objekts (in diesem Fall die beginnende Kommentarzeile) verwerfen möchten, aber nicht wissen, wie lang dieser Teil sein soll.
Gefällt mir Wie Sie sehen können Durch Hinzufügen eines „*“ vor dem Schlüsselwortparameter kann dieses Problem gelöst werden. Wenn wir einige Parameter vor den Parameter „*“ setzen, handelt es sich offensichtlich um Positionsparameter.
Dies ist die häufigste Methode zur Implementierung der Kontextverwaltung in Python, aber es gibt eine einfachere Möglichkeit:
Wenn wir das Attribut „__slots__“ definieren, verwendet Python kein Wörterbuch zur Darstellung des Attributs, sondern eine kleine feste Größe Array. Dies reduziert den Speicherbedarf pro Instanz erheblich. Die Verwendung von „__slots__“ hat auch einige Nachteile: Wir können keine neuen Attribute deklarieren, wir können nur vorhandene Attribute auf „__slots__“ verwenden. Darüber hinaus können Klassen mit „__slots__“ keine Mehrfachvererbung nutzen.
Wir können sehen, dass es im obigen Codeausschnitt Optionen gibt, um sowohl die maximale CPU-Laufzeit als auch das maximale Speichernutzungslimit festzulegen. Wenn wir die Laufzeit einer CPU begrenzen, ermitteln wir zunächst die Soft- und Hard-Limits für diese bestimmte Ressource (RLIMIT_CPU) und legen sie dann mithilfe der über Parameter angegebenen Anzahl von Sekunden und des zuvor abgerufenen Hard-Limits fest. Wenn schließlich die CPU das Limit überschreitet, signalisieren wir dem System, sich zu beenden. In Bezug auf die Speichernutzung rufen wir die Soft- und Hard-Limits erneut ab und legen sie mithilfe von „setrlimit“ mit dem Parameter „size“ und dem zuvor abgerufenen Hard-Limit fest.
Im obigen Code wissen wir, dass nur die Funktion „bar“ exportiert wird. Ebenso können wir „__all__“ leer lassen, damit nichts exportiert wird, was beim Import aus diesem Modul zu einem „AttributeError“ führt.
实现比较运算符的简单方法
结语
Heim Backend-Entwicklung Python-Tutorial Fortgeschrittene Python-Programmierung, acht häufig verwendete Fähigkeiten!

Fortgeschrittene Python-Programmierung, acht häufig verwendete Fähigkeiten!

Apr 18, 2023 am 09:34 AM
python 编程 技巧

Fortgeschrittene Python-Programmierung, acht häufig verwendete Fähigkeiten!

String-Eingabe organisieren

Das Problem der Organisation von Benutzereingaben tritt im Programmierprozess äußerst häufig auf. Oft reicht es aus, Zeichen in Klein- oder Großbuchstaben umzuwandeln, und manchmal können Sie für diese Aufgabe auch das reguläre Ausdrucksmodul „Regex“ verwenden. Wenn das Problem jedoch komplex ist, gibt es möglicherweise einen besseren Weg, es zu lösen:

user_input = "Thisnstring hastsome whitespaces...rn"
character_map = {
ord('n') : ' ',
ord('t') : ' ',
ord('r') : None
}

user_input.translate(character_map)# This string has some whitespaces...
Nach dem Login kopieren

In diesem Beispiel können Sie sehen, dass die Leerzeichen „n“ und „t“ durch ein einzelnes Leerzeichen ersetzt wurden und das „r " wurde gelöscht gelöscht. Dies ist nur ein sehr einfaches Beispiel. Wir können das Paket „unicodedata“ verwenden, um eine große Neuzuordnungstabelle zu generieren und darin „combining()“ zum Generieren und Zuordnen verwenden Wenn Sie eine Slicing-Operation für den Iterator ausführen, wird ein „TypeError“ zurückgegeben, der darauf hinweist, dass das Generatorobjekt keinen Index hat. Wir können dieses Problem jedoch mit einer einfachen Lösung lösen:

import itertools
s = itertools.islice(range(50), 10, 20)# <itertools.islice object at 0x7f70fab88138>
for val in s:
...
Nach dem Login kopieren

Wir können „itertools.islice“ zum Erstellen verwenden 1 Das „islice“-Objekt ist ein Iterator, der die gewünschten Elemente erzeugt. Es ist jedoch zu beachten, dass dieser Vorgang alle Generatorelemente vor dem Slice sowie alle Elemente im „islice“-Objekt verwendet.

Überspringen Sie den Anfang iterierbarer Objekte

Manchmal müssen Sie sich mit einigen Dateien befassen, die mit unerwünschten Zeilen beginnen (z. B. Kommentare). „itertools“ bietet erneut eine einfache Lösung:

string_from_file = """
// Author: ...
// License: ...
//
// Date: ...
Actual content...
"""
import itertools
for line in itertools.dropwhile(lambda line: line.startswith("//"), string_from_file.split("n")):
print(line)
Nach dem Login kopieren

Dieser Code gibt den Inhalt erst nach dem ersten Kommentarteil aus. Diese Methode ist nützlich, wenn wir nur den Anfang des iterierbaren Objekts (in diesem Fall die beginnende Kommentarzeile) verwerfen möchten, aber nicht wissen, wie lang dieser Teil sein soll.

Funktion, die nur Schlüsselwortargumente (kwargs) enthält

Wenn wir die folgende Funktion verwenden, kann es hilfreich sein, eine Funktion zu erstellen, die nur Schlüsselwortargumente als Eingabe erfordert, um eine klarere Funktionsdefinition bereitzustellen:

def test(*, a, b):
pass
test("value for a", "value for b")# TypeError: test() takes 0 positional arguments...
test(a="value", b="value 2")# Works...
Nach dem Login kopieren

Gefällt mir Wie Sie sehen können Durch Hinzufügen eines „*“ vor dem Schlüsselwortparameter kann dieses Problem gelöst werden. Wenn wir einige Parameter vor den Parameter „*“ setzen, handelt es sich offensichtlich um Positionsparameter.

Erstellen Sie Objekte, die die „with“-Anweisung unterstützen

Zum Beispiel wissen wir alle, wie man die „with“-Anweisung verwendet, um eine Datei zu öffnen oder eine Sperre zu erhalten, aber können wir unsere eigenen kontextuellen Ausdrücke implementieren? Ja, wir können „__enter__“ und „__exit__“ verwenden, um das Kontextverwaltungsprotokoll zu implementieren:

class Connection:
def __init__(self):
...
def __enter__(self):
# Initialize connection...
def __exit__(self, type, value, traceback):
# Close connection...
with Connection() as c:
# __enter__() executes
...
# conn.__exit__() executes
Nach dem Login kopieren

Dies ist die häufigste Methode zur Implementierung der Kontextverwaltung in Python, aber es gibt eine einfachere Möglichkeit:

from contextlib import contextmanager
@contextmanager
def tag(name):
print(f"<{name}>")
yield
print(f"</{name}>")
with tag("h1"):
print("This is Title.")
Nach dem Login kopieren

Der obige Absatz Der Code implementiert das Content-Management-Protokoll mithilfe des Manager-Dekorators von contextmanager. Der erste Teil der Tag-Funktion (der Teil vor yield) wird ausgeführt, wenn der with-Block eingegeben wird, dann wird der with-Block ausgeführt und schließlich wird der Rest der Tag-Funktion ausgeführt.

Speicher sparen mit „__slots__“

Wenn Sie jemals ein Programm geschrieben haben, das eine große Anzahl von Instanzen einer bestimmten Klasse erstellt, dann ist Ihnen vielleicht aufgefallen, dass Ihr Programm plötzlich viel Speicher benötigt. Das liegt daran, dass Python Wörterbücher verwendet, um Attribute von Klasseninstanzen darzustellen, was es schnell, aber nicht sehr speichereffizient macht. Normalerweise stellt dies kein ernstes Problem dar. Wenn Ihr Programm jedoch ernsthaft davon betroffen ist, können Sie es auch mit „__slots__“ versuchen:

class Person:
__slots__ = ["first_name", "last_name", "phone"]
def __init__(self, first_name, last_name, phone):
self.first_name = first_name
self.last_name = last_name
self.phone = phone
Nach dem Login kopieren

Wenn wir das Attribut „__slots__“ definieren, verwendet Python kein Wörterbuch zur Darstellung des Attributs, sondern eine kleine feste Größe Array. Dies reduziert den Speicherbedarf pro Instanz erheblich. Die Verwendung von „__slots__“ hat auch einige Nachteile: Wir können keine neuen Attribute deklarieren, wir können nur vorhandene Attribute auf „__slots__“ verwenden. Darüber hinaus können Klassen mit „__slots__“ keine Mehrfachvererbung nutzen.

Begrenzen Sie die „CPU“- und Speichernutzung.

Wenn Sie die Speicher- oder CPU-Auslastung des Programms nicht optimieren, sondern direkt auf eine bestimmte Anzahl begrenzen möchten, verfügt Python auch über eine entsprechende Bibliothek, die dies tun kann:

import signal
import resource
import os
# To Limit CPU time
def time_exceeded(signo, frame):
print("CPU exceeded...")
raise SystemExit(1)
def set_max_runtime(seconds):
# Install the signal handler and set a resource limit
soft, hard = resource.getrlimit(resource.RLIMIT_CPU)
resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard))
signal.signal(signal.SIGXCPU, time_exceeded)
# To limit memory usage
def set_max_memory(size):
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
resource.setrlimit(resource.RLIMIT_AS, (size, hard))
Nach dem Login kopieren

Wir können sehen, dass es im obigen Codeausschnitt Optionen gibt, um sowohl die maximale CPU-Laufzeit als auch das maximale Speichernutzungslimit festzulegen. Wenn wir die Laufzeit einer CPU begrenzen, ermitteln wir zunächst die Soft- und Hard-Limits für diese bestimmte Ressource (RLIMIT_CPU) und legen sie dann mithilfe der über Parameter angegebenen Anzahl von Sekunden und des zuvor abgerufenen Hard-Limits fest. Wenn schließlich die CPU das Limit überschreitet, signalisieren wir dem System, sich zu beenden. In Bezug auf die Speichernutzung rufen wir die Soft- und Hard-Limits erneut ab und legen sie mithilfe von „setrlimit“ mit dem Parameter „size“ und dem zuvor abgerufenen Hard-Limit fest.

Kontrollieren Sie, was importiert werden kann bzw. was nicht.

Einige Sprachen verfügen über einen sehr offensichtlichen Mechanismus zum Exportieren von Mitgliedern (Variablen, Methoden, Schnittstellen). In Golang werden beispielsweise nur Mitglieder exportiert, die mit einem Großbuchstaben beginnen. In Python werden jedoch alle Mitglieder exportiert (es sei denn, wir verwenden „__all__“):

def foo():
pass
def bar():
pass
__all__ = ["bar"]
Nach dem Login kopieren

Im obigen Code wissen wir, dass nur die Funktion „bar“ exportiert wird. Ebenso können wir „__all__“ leer lassen, damit nichts exportiert wird, was beim Import aus diesem Modul zu einem „AttributeError“ führt.

实现比较运算符的简单方法

为一个类实现所有的比较运算符(如 __lt__ , __le__ , __gt__ , __ge__)是很繁琐的。有更简单的方法可以做到这一点吗?这种时候,「functools.total_ordering」就是一个很好的帮手:

from functools import total_ordering
@total_ordering
class Number:
def __init__(self, value):
self.value = value
def __lt__(self, other):
return self.value < other.value
def __eq__(self, other):
return self.value == other.value
print(Number(20) > Number(3))
print(Number(1) < Number(5))
print(Number(15) >= Number(15))
print(Number(10) <= Number(2))
Nach dem Login kopieren

这里的工作原理究竟是怎样的呢?我们用「total_ordering」装饰器简化实现对类实例排序的过程。我们只需要定义「__lt__」和「__eq__」就可以了,它们是实现其余操作所需要的最小的操作集合(这里也体现了装饰器的作用——为我们填补空白)。

结语

并非本文中所有提到的功能在日常的 Python 编程中都是必需或有用的,但是其中某些功能可能会不时派上用场,而且它们也可能简化一些原本就很冗长且令人烦恼的任务。还需指出的是,所有这些功能都是 Python 标准库的一部分。而在我看来,其中一些功能似乎并不像标准库中包含的标准内容,所以当你使用 Python 实现本文提到的某些功能时,请先参阅 Python 的标准库,如果你不能找到想要的功能,可能只是因为你还没有尽力查找(如果真的没有,那它肯定也存在于一些第三方库)。

Das obige ist der detaillierte Inhalt vonFortgeschrittene Python-Programmierung, acht häufig verwendete Fähigkeiten!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann man Node.js oder Python -Dienste in Lampenarchitektur effizient integrieren? Wie kann man Node.js oder Python -Dienste in Lampenarchitektur effizient integrieren? Apr 01, 2025 pm 02:48 PM

Viele Website -Entwickler stehen vor dem Problem der Integration von Node.js oder Python Services unter der Lampenarchitektur: Die vorhandene Lampe (Linux Apache MySQL PHP) Architekturwebsite benötigt ...

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Was ist der Grund, warum Pipeline persistente Speicherdateien bei der Verwendung von Scapy Crawler nicht geschrieben werden kann? Was ist der Grund, warum Pipeline persistente Speicherdateien bei der Verwendung von Scapy Crawler nicht geschrieben werden kann? Apr 01, 2025 pm 04:03 PM

Bei der Verwendung von Scapy Crawler kann der Grund, warum Pipeline persistente Speicherdateien nicht geschrieben werden kann? Diskussion beim Lernen, Scapy Crawler für Data Crawler zu verwenden, begegnen Sie häufig auf eine ...

Python Hourglass Graph Drawing: Wie vermeiden Sie variable undefinierte Fehler? Python Hourglass Graph Drawing: Wie vermeiden Sie variable undefinierte Fehler? Apr 01, 2025 pm 06:27 PM

Erste Schritte mit Python: Hourglas -Grafikzeichnung und Eingabeüberprüfung In diesem Artikel wird das Problem der Variablendefinition gelöst, das von einem Python -Anfänger im Hourglass -Grafikzeichnungsprogramm auftritt. Code...

Was ist der Grund, warum der Python -Prozesspool gleichzeitige TCP -Anfragen behandelt und den Kunden dazu bringt, stecken zu bleiben? Was ist der Grund, warum der Python -Prozesspool gleichzeitige TCP -Anfragen behandelt und den Kunden dazu bringt, stecken zu bleiben? Apr 01, 2025 pm 04:09 PM

Python Process Pool verarbeitet gleichzeitige TCP -Anfragen, die dazu führen, dass der Client stecken bleibt. Bei der Verwendung von Python für die Netzwerkprogrammierung ist es entscheidend, gleichzeitige TCP -Anforderungen effizient zu verarbeiten. ...

Wie kann ich die ursprünglichen Funktionen betrachten, die von Python Functools.Partial Object in intern eingekapselt sind? Wie kann ich die ursprünglichen Funktionen betrachten, die von Python Functools.Partial Object in intern eingekapselt sind? Apr 01, 2025 pm 04:15 PM

Erforschen Sie tief die Betrachtungsmethode von Python Functools.Partialial Object in functools.Partial mit Python ...

Python Cross-Platform Desktop-Anwendungsentwicklung: Welche GUI-Bibliothek ist die beste für Sie? Python Cross-Platform Desktop-Anwendungsentwicklung: Welche GUI-Bibliothek ist die beste für Sie? Apr 01, 2025 pm 05:24 PM

Auswahl der Python-plattformübergreifenden Desktop-Anwendungsentwicklungsbibliothek Viele Python-Entwickler möchten Desktop-Anwendungen entwickeln, die sowohl auf Windows- als auch auf Linux-Systemen ausgeführt werden können ...

Bieten Google und AWS öffentliche PYPI -Bildquellen an? Bieten Google und AWS öffentliche PYPI -Bildquellen an? Apr 01, 2025 pm 05:15 PM

Viele Entwickler verlassen sich auf PYPI (PythonpackageIndex) ...

See all articles