面试题#
参考:
基础题#
数据结构#
元组是不是真的不可变?#
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-2026 版权所有。如果本文档对你有所帮助,可以请作者喝饮料。