100 个酷且好用的Python高级技巧连载 0-20

2023-08-03 15:38:40 来源:个人图书馆-汉无为


(资料图片仅供参考)

100 如果要检查对象是否是多个类的实例,不需要多个 isinstance 表达式,只需传递一个类型元组作为第二个参数即可。Python 3.10 开始 使用|assertisinstance(7,(

您可以使用dict() 可以接收键/值对的元组序列。因此,如果你有键和值的列表,你可以把它们压缩在一起,变成一个字典:

keys=[

假设有一个函数可以将一个列表分割成一定数量的批次。你能发现这段代码中的潜在错误吗?
defbatch_a_list(the_list,num_batches):batch_size=len(the_list)//num_batchesbatches=[]

出现问题的原因是,当 num_batches是一个浮点数时,len(the_list)``//num_batches返回的也是一个浮点数,这不是一个有效的索引,因此会引发错误。

具体地说,如果 //的任意一边都是浮点数,那么两边都将转换为浮点数,结果也将是浮点数。

文档

default_timer如果你执行了某些操作,输出了一个值,现在你想对输出结果做一些事情,这就很方便了。get_some_data()

*_ 用来收集不需要的元素

如果您调用的函数返回一个元组中的多个值,但您只想要第一个值,您可以在调用时追加 [0],或者使用 *_ 忽略其他返回值:

21.dict.key 键不必是字符串

各种各样的东西都可以成为 dict 键:函数、元组、数字--任何可散列的东西。比方说,你想用 dict 表示一个图Graph,其中每个键都是一对节点,而值则描述它们之间的边。你可以用元组来表示,但如果你想让(a, b) 返回与(b, a))相同的值,你就需要一个集合。集合不可散列,但 frozen_set可以,因此我们可以使用
graph={frozenset(["a","b"]):"a和b之间的边",frozenset(["b","c"]):"b和c之间的边"}assertgraph[frozenset(["b","a"])]==graph[frozenset(["a","b"])]
很明显,你应该做类似扩展 dict 的事情:classOrderFreeKeys(dict):def__getitem__(self,key):returnsuper().__getitem__(frozenset(key))def__setitem__(self,key,value):returnsuper().__setitem__(frozenset(key),value)graph=OrderFreeKeys()graph["A","B"]="A和B之间有一条边"assertgraph["B","A"]=="A和B之间有一条边"print(graph["A","B"])第二个示例中的 A 和 B 使用了大写字母,因为多样性是生活的调味品。

标签: