面试题 #
参考:
基础题 #
数据结构 #
元组是不是真的不可变? #
tuple 的每个元素,指向永远不变。
要创建一个内容也不变的 tuple 怎么做?
必须保证 tuple 的每一个元素本身也不能变。
# “可变的” tuple:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
迭代器 vs 生成器 #
迭代器 #
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__()
与 __next__()
>>> list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>
生成器 #
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
生成器是一个返回迭代器的函数。
python 中生成器是迭代器的一种,使用 yield 返回值函数,每次调用 yield 会暂停,而可以使用 next () 函数和 send () 函数恢复生成器。
要创建一个 generator,有很多种方法,第一种方法很简单,只有把一个列表生成式的 [] 中括号改为()小括号,就创建一个 generator
#列表生成式
lis = [x*x for x in range(10)]
print(lis)
#生成器
generator_ex = (x*x for x in range(10))
print(generator_ex)
结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
<generator object <genexpr> at 0x000002A4CBF9EBA0>
进阶题 #
猴子补丁 #
属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。
为什么叫猴子补丁 #
属性的运行时替换和猴子也没什么关系,关于猴子补丁的由来网上查到两种说法:
-
这个词原来为 Guerrilla Patch,杂牌军、游击队,说明这部分不是原装的,在英文里 guerilla 发音和 gorllia (猩猩) 相似,再后来就写了 monkey (猴子)。
-
还有一种解释是说由于这种方式将原来的代码弄乱了 (messing with it),在英文里叫 monkeying about (顽皮的),所以叫做 Monkey Patch。
猴子补丁的叫法有些莫名其妙,只要和 “模块运行时替换的功能” 对应就行了。
ujson #
import json
import ujson
def monkey_patch_json():
json.__name__ = 'ujson'
json.dumps = ujson.dumps
json.loads = ujson.loads
monkey_patch_json()
参考:
叶王 © 2013-2024 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。