这个python题目怎么写?无意间,看到这么一道Python面试题:以下代码将输出什么?
def testFun:
temp = [lambda x : i*x for i in range(4)]
return temp
for everyLambda in testFun:
print (everyLambda(2))
脑中默默一想,这还用说么,肯定是:
2
4
6
最后一看答案,竟然是:
6
6
6
6
于是带着怀疑的心态(其实是不服输 , 不认错) , 打开编辑器,快速一敲,果然是:
【python函数题怎么写 python 函数写法】怀疑了人生半天,本来还想黑 , WTF Python…然后才想通是自己太生疏......
最后发现原因竟是:Python 的闭包的后期绑定导致的 late binding 。
这意味着在闭包中的变量是在内部函数被调用的时候被查找 , 所以当任何testFun 返回的函数被调用 , i 的值是在它被调用时的周围作用域中查找 。
也就是说无论哪个返回的函数被调用 , for 循环都已经完成了,i 最后的值是 3,因此,每个返回的函数 testFun 的值都是 3 。
因此一个等于 2 的值被传递进以上代码,它们将返回一个值 6 (比如:3 x 2) 。
究竟如何才能实现出这样的结果呢?
2
4
6
想了想,若能立即绑定参数,或者直接不用闭包总该行吧,用另一种方式避免 i 的改写 。
回忆了之前所学知识,最后酝酿出了四种解决方案 。
第一种:创建一个闭包,通过使用默认参数立即绑定它的参数
def testFun:
temp = [lambda x, i=i: i * x for i in range(4)]
return temp
for everyLambda in testFun:
print(everyLambda(2))
第二种:使用functools.partial 函数,把函数的某些参数(不管有没有默认值)给固定?。ㄒ簿褪窍嗟庇谏柚媚现担?
from functools import partial
from operator import mul
def testFun:
return [partial(mul, i) for i in range(4)]
for everyLambda in testFun:
print(everyLambda(2))
第三种:优雅的写法,直接用生成器
def testFun:
return (lambda x, i=i: i * x for i in range(4))
for everyLambda in testFun:
print(everyLambda(2))
第四种:利用yield的惰性求值的思想
def testFun:
for i in range(4):
yield lambda x: i * x
for everyLambda in testFun:
print(everyLambda(2))
最终运行结果:
有了解决方案后,又陷入了怀疑自己 , 这个题目究竟是考察的是什么?是在考面试者闭包相关知识以及Python 的闭包的后期绑定问题么?
若将题目改成:以下代码输出的结果是(0,2,4,6)么?如果不是,你将会怎么做,让它变成(0,2,4,6)?这样会不会更有意思点呢?欢迎大家出妙招,看究竟有多少招?(哈哈哈?。。。?
信息技术中函数代码流程操作题怎么写1、a=5.4b=6.8s=a+bs2=int(s)print(s2)
Python题型
(一)顺序结构:
1、新建一个python,完成以下题目 。
(1)将数值5.4赋给变量a;
(2)将数值6.8赋给变量b;
(3)将a,b的和赋给变量s;
(4)对s取整后的值赋给变量s2;
(5)使用输出语句在屏幕上输出s2的值 。
第 1 页
2、a=2.3b=5.6s=a*bs2=round(s)print(s2)
2、新建一个python , 完成以下操作 。
(1)将数值2.3赋给变量a;
(2)将数值5.6赋给变量b;
(3)将a,b的乘积赋给变量s;
(4)将s四舍五入(不保留小数)的值赋给变量s2;
(5)使用输出语句在屏幕上输出s2的值 。
Python编程题怎么写?Python编程题写法:第一个问题使用排序算法 , 有很多种,可以使用简单一点的冒泡排序 。第二个问题为了确保是输入了5个整数,可以使用while循环+try 。
推荐阅读
- 怎么同时开启两个显卡启动,怎么使用两张显卡
- 史上最好玩的团队射击游戏,团队射击游戏手游
- 手机怎么加载不了主题,为什么主题加载不出来
- Go语言实现自动登录 go语言实现自动登录吗
- 鸿蒙系统有的软件联网失败,鸿蒙系统app无法连接网络
- 桌面的游戏空间怎样卸载,桌面的游戏空间怎样卸载掉
- c语言函数声明获取最大值 c语言函数调用最大值
- 什么是带密度拍摄,拍摄带密度是什么意思
- 新媒体从业如何做销售助理,新媒体销售专员工作内容