Rumah > Artikel > pembangunan bahagian belakang > Pengaturcaraan Python lanjutan, lapan kemahiran yang biasa digunakan!
Masalah mengatur input pengguna adalah sangat biasa dalam proses pengaturcaraan. Selalunya, cukup untuk menukar aksara kepada huruf kecil atau huruf besar, dan kadangkala anda boleh menggunakan modul ungkapan biasa "Regex" untuk melakukan kerja. Tetapi jika masalahnya rumit, mungkin terdapat cara yang lebih baik untuk menyelesaikannya:
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...
Dalam contoh ini, anda dapat melihat bahawa aksara ruang "n" dan "t" telah digantikan dengan satu space, "r" semuanya telah dipadamkan. Ini hanyalah contoh yang sangat mudah. Kita boleh pergi lebih jauh dan menggunakan pakej "unicodedata" untuk menjana jadual pemetaan semula yang besar, dan menggunakan "combining()" di dalamnya untuk menjana dan memetakan hirisan lelaran (Slice)
Kita boleh menggunakan "itertools.islice" untuk mencipta objek "islice", iaitu iterator yang boleh menghasilkan item yang kita inginkan. Walau bagaimanapun, perlu diingatkan bahawa operasi ini menggunakan semua item penjana sebelum kepingan, serta semua item dalam objek "islice".
import itertools s = itertools.islice(range(50), 10, 20)# <itertools.islice object at 0x7f70fab88138> for val in s: ...
Langkau permulaan objek boleh lelar
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)
Fungsi yang mengandungi hanya argumen kata kunci (kwargs)
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...
Buat objek yang menyokong pernyataan "dengan"
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__() executesKod di atas melaksanakan protokol pengurusan kandungan menggunakan penghias pengurus bagi pengurus konteks. Bahagian pertama fungsi tag (bahagian sebelum hasil) dilaksanakan apabila blok dengan dimasukkan, kemudian blok dengan dilaksanakan, dan akhirnya fungsi tag yang lain dilaksanakan.
from contextlib import contextmanager @contextmanager def tag(name): print(f"<{name}>") yield print(f"</{name}>") with tag("h1"): print("This is Title.")
Simpan memori dengan "__slots__"
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
Hadkan "CPU" dan penggunaan memori
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))
Kawal perkara yang boleh/tidak boleh diimport
def foo(): pass def bar(): pass __all__ = ["bar"]
为一个类实现所有的比较运算符(如 __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))
这里的工作原理究竟是怎样的呢?我们用「total_ordering」装饰器简化实现对类实例排序的过程。我们只需要定义「__lt__」和「__eq__」就可以了,它们是实现其余操作所需要的最小的操作集合(这里也体现了装饰器的作用——为我们填补空白)。
并非本文中所有提到的功能在日常的 Python 编程中都是必需或有用的,但是其中某些功能可能会不时派上用场,而且它们也可能简化一些原本就很冗长且令人烦恼的任务。还需指出的是,所有这些功能都是 Python 标准库的一部分。而在我看来,其中一些功能似乎并不像标准库中包含的标准内容,所以当你使用 Python 实现本文提到的某些功能时,请先参阅 Python 的标准库,如果你不能找到想要的功能,可能只是因为你还没有尽力查找(如果真的没有,那它肯定也存在于一些第三方库)。
Atas ialah kandungan terperinci Pengaturcaraan Python lanjutan, lapan kemahiran yang biasa digunakan!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!