Heim  >  Artikel  >  Backend-Entwicklung  >  Ich habe wieder sieben superleistungsfähige Python-Bibliotheken

Ich habe wieder sieben superleistungsfähige Python-Bibliotheken

王林
王林nach vorne
2023-04-11 22:10:101726Durchsuche

​Es gibt ein Sprichwort: „Man muss das Rad nicht neu erfinden.“ Python-Bibliotheken sind das beste Beispiel dafür. Es hilft Ihnen, komplexe und zeitaufwändige Funktionen auf einfache Weise zu schreiben. Soweit ich weiß, verwendet ein gutes Projekt einige der besten Bibliotheken.

1. PySnooper

Wir schreiben eine Funktion, die eine Zahl in eine Binärzahl umwandelt, indem sie eine Liste von Bits zurückgibt. @pysnooper.snoop() kann durch Hinzufügen eines Dekorators untersucht werden:

import pysnooper

@pysnooper.snoop()
def number_to_bits(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]

number_to_bits(6)

Wenn Sie nicht die gesamte Funktion verfolgen möchten, können Sie alternativ die relevanten Teile in einen with-Block einschließen:

import pysnooper
import random

def foo():
lst = []
for i in range(10):
lst.append(random.randrange(1, 1000))

with pysnooper.snoop():
lower = min(lst)
upper = max(lst)
mid = (lower + upper) / 2
print(lower, mid, upper)

foo()

Die Ausgabe ist wie folgt :

New var:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line10 
lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line11 
upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line12 
mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line13 
print(lower, mid, upper)
Elapsed time: 00:00:00.000344

Als Entwickler verbringe ich die meiste Zeit mit dem Debuggen. Diese Bibliothek ist ein Debugger. Die meisten Menschen verwenden Druckzeilen an strategischen Stellen, von denen einige den Wert einer Variablen anzeigen. Diese Bibliothek macht das Gleiche, außer dass Sie, anstatt die richtigen Druckzeilen zu erstellen, einfach eine Reihe von Dekoratoren zu den Funktionen hinzufügen, an denen Sie interessiert sind. Sie erhalten ein wörtliches Protokoll der Funktion, einschließlich der Zeilen, die wann ausgeführt wurden und wann lokale Variablen geändert wurden. Es hat über 15.000 Sterne auf GitHub.

Projektadresse: https://github.com/cool-RR/PySnooper

2. Zeitplan für menschliche Python-Jobs. Führen Sie regelmäßig eine Python-Funktion (oder eine andere aufrufbare Funktion) mit benutzerfreundlicher Syntax aus.

Eine einfache und benutzerfreundliche API zum Planen von Jobs, die für Menschen entwickelt wurde.
  • In-Process-Planer für periodische Jobs. Kein zusätzlicher Prozess erforderlich!
  • Sehr leicht und keine externen Abhängigkeiten.
  • Ausgezeichnete Testabdeckung.
  • Testbar auf Python und 3.6, 3.7, 3.8, 3.9
  • import schedule
    import time
    
    def job():
    print("I'm working...")
    
    schedule.every(10).seconds.do(job)
    schedule.every(10).minutes.do(job)
    schedule.every().hour.do(job)
    schedule.every().day.at("10:30").do(job)
    schedule.every(5).to(10).minutes.do(job)
    schedule.every().monday.do(job)
    schedule.every().wednesday.at("13:15").do(job)
    schedule.every().day.at("12:42", "Europe/Amsterdam").do(job)
    schedule.every().minute.at(":17").do(job)
    
    def job_with_argument(name):
    print(f"I am {name}")
    
    schedule.every(10).seconds.do(job_with_argument, name="Peter")
    
    while True:
    schedule.run_pending()
    time.sleep(1)
  • Dies ist eine Python-Jobplanungsbibliothek für Menschen. Sie können damit eine Python-Funktion (oder eine andere aufrufbare Funktion) regelmäßig mit benutzerfreundlicher Syntax ausführen. Es umfasst viele Funktionen wie einen In-Process-Scheduler, der regelmäßig arbeitet (keine zusätzlichen Prozesse erforderlich), sehr leichtgewichtig ist, keine externen Abhängigkeiten aufweist, eine gute Testabdeckung bietet usw. Diese Bibliothek hat über 10.000 Sterne auf GitHub.

Projektadresse: https://github.com/dbader/schedule

3. MechanicalSoup
"""Example usage of MechanicalSoup to get the results from the Qwant
search engine.
"""

import re
import mechanicalsoup
import html
import urllib.parse

# Connect to Qwant
browser = mechanicalsoup.StatefulBrowser(user_agent='MechanicalSoup')
browser.open("https://lite.qwant.com/")

# Fill-in the search form
browser.select_form('#search-form')
browser["q"] = "MechanicalSoup"
browser.submit_selected()

# Display the results
for link in browser.page.select('.result a'):
# Qwant shows redirection links, not the actual URL, so extract
# the actual URL from the redirect link:
href = link.attrs['href']
m = re.match(r"^/redirect/[^/]*/(.*)$", href)
if m:
href = urllib.parse.unquote(m.group(1))
print(link.text, '->', href)

Diese Bibliothek hilft Ihnen, eine automatische Interaktion mit der Website zu realisieren. Es speichert und sendet automatisch Cookies, verfolgt Weiterleitungen und kann Links folgen und Formulare übermitteln. Es funktioniert kein Javascript. Diese Bibliothek hat über 4.000 Sterne auf GitHub.

Projektadresse: https://github.com/MechanicalSoup/MechanicalSoup

4. ftfy
>>> from ftfy import fix_encoding
>>> print(fix_encoding("(ง'⌣')ง"))
(ง'⌣')ง

Was es kann

Hier sind einige Beispiele dafür, was ftfy tun kann (in der realen Welt):

ftfy kann Mojibake (Kodierungsverschleierung) beheben, indem es Zeichenmuster erkennt, die offensichtlich UTF-8 sind, aber in andere Zeichen dekodiert werden:

>>> import ftfy
>>> ftfy.fix_text('✔ No problems')
'✔ No problems'

Klingt das unmöglich? Nicht wirklich. UTF-8 ist eine gut gestaltete Codierung, die bei Missbrauch offensichtlich ist, und eine Zeichenfolge von Mojibake enthält normalerweise alle Informationen, die wir benötigen, um die ursprüngliche Zeichenfolge wiederherzustellen.

ftfy kann mehrere Ebenen von Mojibake gleichzeitig reparieren:

>>> ftfy.fix_text('The Mona Lisa doesn’t have eyebrows.')
"The Mona Lisa doesn't have eyebrows."

Es ​​kann Mojibake mit den oben angewendeten „geschweiften Anführungszeichen“ reparieren, die nicht kontinuierlich dekodiert werden können, bevor die Anführungszeichen erweitert werden:

>>> ftfy.fix_text("l’humanité")
"l'humanité"

ftfy kann Mojibake reparieren, das die Zeichen U enthält +A0 (geschütztes Leerzeichen) von Mojibake, aber U+A0 wird zu einem ASCII-Leerzeichen, das dann mit einem anderen Leerzeichen kombiniert wird:

>>> ftfy.fix_text('Ãxa0 perturber la réflexion')
'à perturber la réflexion'
>>> ftfy.fix_text('à perturber la réflexion')
'à perturber la réflexion'

ftfy kann auch HTML-Entitäten dekodieren, die außerhalb von HTML erscheinen, selbst wenn die Entität falsch großgeschrieben wird :

>>> # by the HTML 5 standard, only 'PÉREZ' is acceptable
>>> ftfy.fix_text('PÉREZ')
'PÉREZ'

Diese Korrekturen werden nicht in allen Fällen funktionieren, da ftfy das feste Ziel hat, Fehlalarme zu vermeiden – es sollte niemals korrekt dekodierten Text in etwas anderes ändern.

Der folgende Text kann in Windows-1252 kodiert und in UTF-8 dekodiert werden und wird als „MARQUɅ“ dekodiert. Der Originaltext ist jedoch klar und wird daher nicht geändert.

>>> ftfy.fix_text('IL Y MARQUÉ…')
'IL Y MARQUÉ…'

Diese Bibliothek hilft Ihnen, Unicode zu reparieren, der auf verschiedene Weise fehlerhaft ist. Das Ziel dieser Bibliothek besteht darin, schlechten Unicode zu empfangen und guten Unicode zur Verwendung in Ihrem Unicode-fähigen Code auszugeben. Es hat über 3.000 Sterne auf GitHub.

项目地址:https://github.com/rspeer/python-ftfy

5. rpyc

Ich habe wieder sieben superleistungsfähige Python-Bibliotheken

这是一个透明的python库,用于对称的远程过程调用、集群和分布式计算。它利用对象代理这一技术,利用python的动态特性,克服进程和计算机之间的物理界限,使远程对象可以像本地一样被操作。这个库在GitHub上有超过1k颗星。

项目地址:https://github.com/tomerfiliba-org/rpyc

6. pyglet

pyglet 的一些特性是:

  • 没有外部依赖项或安装要求。对于大多数应用程序和游戏需求,pyglet 除了 Python 之外不需要其他任何东西,简化了分发和安装。使用 PyInstaller 等冷冻机可以轻松打包您的项目。
  • 利用多窗口和多显示器桌面。pyglet允许你使用多个平台原生窗口,并且完全了解用于全屏游戏的多显示器设置。
  • 加载几乎任何格式的图像、声音、音乐和视频。pyglet可以选择使用 FFmpeg 播放音频格式,如 MP3、OGG/Vorbis 和 WMA,以及视频格式,如 MPEG2、H.264、H.265、WMV 和 Xvid。如果没有 FFmpeg,pyglet包含对 wav、png、bmp 等标准格式的内置支持。
  • pyglet 完全用纯 Python 编写,并利用ctypes模块与系统库进行交互。你可以修改代码库或做出贡献,而无需任何第二语言编译步骤或编译器设置。尽管是纯 Python,但pyglet具有出色的性能,这要归功于用于绘制数千个对象的高级批处理。
  • pyglet 是在 BSD 开源许可证下提供的,允许你将它用于商业和其他开源项目,几乎没有限制。
import pyglet
window = pyglet.window.Window()
label = pyglet.text.Label('Hello, world!',
font_size=36,
x=window.width // 2,
y=window.height // 2,
anchor_x='center',
anchor_y='center')

@window.event
def on_draw():
window.clear()
label.draw()

pyglet.app.run()

这是一个跨平台的Python窗口和多媒体库,用于开发游戏和其他视觉效果丰富的应用程序。它支持窗口化、用户界面事件处理、操纵杆、OpenGL图形、加载图像和视频,以及播放声音和音乐。它可以在Windows、OS X和Linux上运行。它在GitHub上有超过1千颗星。

项目地址:https://github.com/pyglet/pyglet

7. rope

import rope.base.project
myproject = rope.base.project.Project('/path/to/myproject')

这个库提供了强大而安全的重构。它包括轻度依赖性等特点,与PyRight或PyLance不同,它不依赖Node.js,完全由python编写,等等。它在GitHub上有超过1千颗星。

项目地址:https://github.com/python-rope/rope

文档地址:https://rope.readthedocs.io/en/latest/overview.html

Das obige ist der detaillierte Inhalt vonIch habe wieder sieben superleistungsfähige Python-Bibliotheken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen