Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Saya mendapat tujuh perpustakaan Python yang sangat berkuasa sekali lagi

Saya mendapat tujuh perpustakaan Python yang sangat berkuasa sekali lagi

王林
王林ke hadapan
2023-04-11 22:10:101667semak imbas

​Ada pepatah: "Anda tidak perlu mencipta semula roda." Perpustakaan Python adalah contoh terbaik untuk ini. Ia membantu anda menulis fungsi yang kompleks dan memakan masa dengan cara yang mudah. Setahu saya, projek yang bagus menggunakan beberapa perpustakaan terbaik.

1. PySnooper

Kami sedang menulis fungsi yang menukar nombor kepada binari dengan mengembalikan senarai bit. @pysnooper.snoop() boleh dikaji dengan menambahkan penghias:

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)

Atau, jika anda tidak mahu mengesan keseluruhan fungsi, anda boleh membungkus bahagian yang berkaitan dalam blok dengan:

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()

Outputnya adalah seperti berikut:

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

Sebagai pembangun, kebanyakan masa anda dihabiskan untuk penyahpepijatan. Pustaka ini ialah penyahpepijat. Kebanyakan orang menggunakan garisan cetakan di lokasi strategik, sesetengah daripadanya memaparkan nilai pembolehubah. Pustaka ini melakukan perkara yang sama, kecuali anda tidak membuat garis cetakan yang betul, anda hanya menambah barisan penghias pada fungsi yang anda minati. Anda akan mendapat log verbatim bagi fungsi tersebut, termasuk baris mana yang dijalankan apabila dan apabila pembolehubah tempatan ditukar. Ia mempunyai lebih 15k bintang di GitHub.

Alamat projek: https://github.com/cool-RR/PySnooper

2. Jalankan fungsi Python (atau mana-mana fungsi boleh panggil lain) secara berkala menggunakan sintaks mesra.

API yang ringkas dan mudah digunakan untuk penjadualan kerja, direka untuk manusia.
  • Penjadual dalam proses untuk kerja berkala. Tiada proses tambahan diperlukan!
  • Sangat ringan dan tiada pergantungan luaran.
  • Liputan ujian yang sangat baik.
  • Boleh diuji pada Python dan 3.6, 3.7, 3.8, 3.9
Ini ialah perpustakaan penjadualan kerja Python untuk manusia. Ia membolehkan anda menjalankan fungsi Python (atau mana-mana yang boleh dipanggil lain) secara berkala menggunakan sintaks mesra. Ia termasuk banyak ciri seperti penjadual dalam proses yang berfungsi secara berkala (tiada proses tambahan diperlukan), sangat ringan, tidak mempunyai kebergantungan luaran, mempunyai liputan ujian yang baik, dsb. Pustaka ini mempunyai lebih 10k bintang di GitHub.
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)

Alamat projek: https://github.com/dbader/schedule

3. MechanicalSoup

Pustaka ini akan membantu anda mencapainya Interaksi automatik dengan tapak web. Ia secara automatik menyimpan dan menghantar kuki, menjejak ubah hala, dan boleh mengikuti pautan dan menyerahkan borang. Ia tidak menggunakan Javascript. Pustaka ini mempunyai lebih 4k bintang di GitHub.
"""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)

Alamat projek: https://github.com/MechanicalSoup/MechanicalSoup

4 ftfy

Apa yang boleh dilakukan
>>> from ftfy import fix_encoding
>>> print(fix_encoding("(ง'⌣')ง"))
(ง'⌣')ง

Berikut ialah beberapa contoh perkara yang boleh dilakukan oleh ftfy (ditemui di dunia nyata):

ftfy boleh membetulkan mojibake (Kekeliruan pengekodan):

Adakah ini terdengar mustahil? Tidak juga. UTF-8 ialah pengekodan yang direka dengan baik yang jelas apabila ia disalahgunakan, dan rentetan mojibake biasanya mengandungi semua maklumat yang kami perlukan untuk memulihkan rentetan asal.
>>> import ftfy
>>> ftfy.fix_text('✔ No problems')
'✔ No problems'

ftfy boleh membetulkan berbilang lapisan mojibake pada masa yang sama:

Ia boleh membetulkan mojibake dengan "petikan bergulung" yang digunakan di atas, yang tidak boleh dinyahkodkan secara berterusan sehingga petikan dikembangkan:
>>> ftfy.fix_text('The Mona Lisa doesn’t have eyebrows.')
"The Mona Lisa doesn't have eyebrows."

ftfy boleh membetulkan mojibake yang mengandungi aksara U+A0 (ruang tidak pecah), tetapi U+A0 menjadi ruang ASCII, yang kemudiannya digabungkan dengan ruang berikut yang lain:
>>> ftfy.fix_text("l’humanité")
"l'humanité"

ftfy juga boleh menyahkod entiti HTML yang muncul di luar HTML, walaupun apabila entiti tersebut tersalah huruf besar:
>>> ftfy.fix_text('Ãxa0 perturber la réflexion')
'à perturber la réflexion'
>>> ftfy.fix_text('à perturber la réflexion')
'à perturber la réflexion'

Pembetulan ini tidak digunakan untuk semua kes, kerana ftfy mempunyai matlamat yang kukuh untuk mengelakkan akhbar menggunakan huruf besar yang salah - ia tidak boleh menukar teks yang dinyahkod dengan betul kepada sesuatu yang lain.
>>> # by the HTML 5 standard, only 'PÉREZ' is acceptable
>>> ftfy.fix_text('PÉREZ')
'PÉREZ'

Teks berikut boleh dikodkan dalam Windows-1252 dan dinyahkod dalam UTF-8 dan akan dinyahkodkan sebagai "MARQUɅ". Walau bagaimanapun, teks asal adalah jelas, jadi ia tidak akan diubah.

Pustaka ini akan membantu anda membetulkan Unikod yang rosak dalam pelbagai cara. Matlamat perpustakaan ini adalah untuk menerima Unicode yang buruk dan mengeluarkan Unicode yang baik untuk digunakan dalam kod Unicode-aware anda. Ia mempunyai lebih 3k bintang di GitHub.
>>> ftfy.fix_text('IL Y MARQUÉ…')
'IL Y MARQUÉ…'

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

5. rpyc

Saya mendapat tujuh perpustakaan Python yang sangat berkuasa sekali lagi

这是一个透明的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

Atas ialah kandungan terperinci Saya mendapat tujuh perpustakaan Python yang sangat berkuasa sekali lagi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam