一、下列函数的执行结果
执行结果
重点fn(3)为什么是01014,因为list是可变对象,之前操作过fn(2)改变了列表l
二、python迭代器和生成器的区别
先说迭代器,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。
生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)。
生成器是特殊的迭代器,用yield替代了__iter__和__next__方法
三、redis数据类型有哪些,缓存在系统中起到了什么作用。
str hash list set zset
尽量减少IO的操作,特别是磁盘IO的操作;使用缓存可以有效的避免这种情况
四、python有几种方式实现单例模式?
1.使用模块。模块在导入时候,会产生pyc文件,在第二次导入时,会直接加载pyc文件,而不是再次执行模块代码,
用的时候直接导入,这个singleton就是单例对象
2、使用装饰器。
3.使用类
4、使用__new__
5、使用元类
五、将整型转换成货币型1234567----$1,234,567
a = 12345678 a = format(int(a),',') print(a)
六、正则匹配
七、按照列表中的k键的值排列
方法1
方法2
八、sql语句
1,select sid from sc;
2case then else end用来定制上面那一排课程名
九、python常见任务队列
celery
十、profile方式扩展auth_user字段
由于Django自带的User模型字段邮箱,所以我们需要对其扩展,最便捷的方式就是创建UserProfile的模型,如下所示。我们添加了org和telephone两个字段。
(参考 https://blog.csdn.net/weixin_42134789/article/details/80656289)
十一、
题目运行结果
解决方式 iterator的()改成[]就好了
分析下过程 为啥原来的不行。
iterator是一个生成器,每次调用只返回一个值,例第一次为1,第二次为2,第三次3
关于列表生成式嵌套,自己搜资料。
先看外层 x,调用一次iterator,x为1
此时内部继续调用iterator,y值为2, x*y=2
注意,这里类似于两层for 循环,所以y继续循环,y值为3,x依旧是1,x*y为3
到此为第一次大循环结束
继续第二次,但是由于iterator是个生成器,只能有1 2 3 三个结果,第四次就超出边界了,所以这是外层x会报错。
所以最后的结果[[2, 3]]
十二、闭包作用于试题
运行结果为[6,6,6,6]
解释下原因。
return 返回的实际是个列表,里面放着四个lambda函数的内存地址,
外层for循环控制循环次数,lambda的内部命名空间只有一个x = 2, 那个i实际是外层函数的,lambda需要去外面拿,i是一个指针,指向它的值,而且i只能在外面被修改,lambda只有调用的份,所以
第一次 i → 0,第二次 i→1 第三次 i→2 第四次 i→3,指针经过四次变化最终停在了3,对应内层函数也受影响,所以四个i都是3。
最后结果也就是[6,6,6,6]