摘要:class Auth: def __init__(self, level="user"): self.level = level def __call__(self, function): def wrapper(*args): if self.level =
省略号(三个点)是一个内置常量,用于表示不定式或未指定的东西。
print(...) # Ellipsis literalprint(Ellipsis) # Ellipsis object可以将 pass 关键字替换为省略号。
class MyClass: ...def my_method: ...有一些有趣的方法可以合并词典。在这里,将展示其中的两个:
使用双星号 **。这是一个技巧,因为所有项目都会被解包。
d1 = {"v1": 22, "v2": 33}d2 = {"v2": 44, "v3": 55}d3 = {**d1, **d2}print(d3)从 Python 3.9 开始,引入了 | merge 运算符:
d1 = {"v1": 22, "v2": 33}d2 = {"v2": 44, "v3": 55}print(d1 | d2)d1 |= d2print(d1)Decorator 是一种设计模式,它允许向函数添加功能,而无需修改其源代码。Decorator 是调用高阶函数的简写方式。
class Auth: def __init__(self, level="user"): self.level = level def __call__(self, function): def wrapper(*args): if self.level == "admin": return function(*args) else: raise Exception("Not allwed!") return wrapper@Auth("admin")def greet(name): print("Wellcome!")greet("John")可以使用函数来创建装饰器。最终结果与使用 classes 相同。
但是为什么你应该使用函数而不是类来创建装饰器呢?没什么特别的,但通过类,可以探索 OOP 概念。
生成器是一种模式,允许您延迟 (按需) 获取值,从而节省内存使用。如果您的列表很大,请考虑使用生成器来节省内存。
下面是如何使用生成器表达式(也称为生成器推导式)的示例:
lst1 = [i for i in range(10000)] # list comprehensionlst2 = (i for i in range(10000)) # generator comprehensionprint(sum(lst1))print(sum(lst2))import sysprint(sys.getsizeof(lst1), "bytes") # 85176 bytesprint(sys.getsizeof(lst2), "bytes") # 104 bytes生成器函数是一个语句,它返回一个惰性迭代器,以便按需迭代这些值。当您大量值并且不需要将所有这些项存储在内存中时,这非常有用。让我们来看看:
def read_line_by_line(filename): for row in open(filename, "r"): yield row # access the lines of file on demandfor line in read_line_by_line("products.txt"): # products.txt has a ton of lines print(line) # do something here在解决问题时,通常需要按值对字典进行排序。访问字典值的 Pythonic 方法是使用 itemgetter 方法。了解如何操作:
from operator import itemgetterd = {"v3": 44,, "v2": 33, "v4": 55, "v1": 22,}sorted_d = dict(sorted(d.items, key=itemgetter(1)))停用词是在文本中没有意义或相关性的单词列表。在进行文本预处理时,一个常见的任务是删除非索引字以清理文本,因此您要创建一个非索引字列表来执行此任务。
每种语言都有自己的一组非索引字。spaCy 为每种语言预定义了非索引字。以下是访问此列表的方法:
import spacynlp = spacy.blank("pt") # there are many languages availablestopwords = nlp.Defaults.stop_wordsprint(stopwords)namedtuple 是一种创建具有命名字段的不可变元组并允许以点表示法访问其值的方法。
_make 方法是一个 iterable,它从列表中创建一个 namedtuple。
from collections import namedtupleStudent = namedtuple("Student", 'name, age, grade')lines = [ ["Albie Bailey", 21, 3], ["Brooklyn Price", 23, 5], ["Noah Hawkins", 19, 1], ["Marcel Hall", 25, 6], ["Dominik Davis", 20, 1], ["Clayton Elliott", 21, 3],]students = list(map(Student._make, lines))students方法 urlparse 提取 URL 字符串的组件,例如域、用户、密码等。
from urllib.parse import urlparseuri = urlparse('https://john:qwer1234@127.0.0.1:5672/convert-pdf-to-txt?admin=true')print(uri)print(uri.scheme)print(uri.username)print(uri.password)print(uri.hostname)print(uri.port)从 Python 3.10 开始,使用 match 来执行 switch case 语句,因为这些语句在其他语言中是已知的。可以告别长长的 if-elif 链。
option = inputmatch option: case "M": print("Menu List") case "1" | "2": print("Menu Option") case _: print("Exit")_(下划线)是匹配任何值的通配符模式。
来源:自由坦荡的湖泊AI一点号