Python 中关于filter函数问题求教

Python016

Python 中关于filter函数问题求教,第1张

看文字的话会很乱,和图一起看会好一点

首先,it是个生成器(_odd_iter),并使n=3,随后,it作为一个生成器存在于filter对象中(迭代器),并使it为一个filter对象,经过循环,到达next语句,先计算it _odd_iter(生成器),生成了新的数之后,开始计算filter。第一次循环的时候第18行的代码相当于 it = filter(_not_divisible(3), it ),等号右面的it还在等待next调用生成值,生成值之后,就将它代入为lambda的x中……第二次循环的时候第18行代码变成 it = filter(_not_divisible(5), filter(_not_divisible(3), it ) ),同样等号右面的it仍然在等待next调用生成新的值

我刚看这个教程,不知道对不对。。。

对了我看见有一个人问把代码第18行改成 it = filter(lambda x: x % n >0, it)

会失去过滤功能,我觉得,lambda是一个临时函数,所以觉得像filter(div(5), filter(div(3), it))这种存在多个lambda临时函数的话是很奇怪的,

在调试时,发现filter只检测了一个n(最近被赋值的),相当于7%5,9%7这样,因此失去过滤素数功能。模拟一下,在将要输出5的时候,it = filter()的那行代码变为:

it = filter(lambda x : x % n >0 , filter (lambda x : x % n >0 , it ) ),it将值赋给x,但是,我觉得n被赋值时,会刷新其他lambda中的n,造成类似于 it = filter(lambda x : x % 5 >0 , filter (lambda x : x % 5 >0 , it ) )的情况

题主贴了两遍函数,似乎是一样的,下面就分析这一个版本:

def add_end(L=None):

    if L is None:

        L = []

    L.append('END')

    return L

不明白题主说的“一直往里面加END”是怎么回事。函数里既没有循环也没有递归,怎么会“一直”加。。。

关于默认参数,其作用是:使 add_end()的返回值 与 add_end(None)的返回值相同。因此下面不再单独分析输入0个参数的情形。

“return的L是全局变量,而传入的参数L是局部变量”这个说法很奇怪。当传入的L是None时,该函数的会新生成一个list,向其中加入一个字符串‘END’,并返回这个新生成的list。而当传入的L是一个list,哪怕是空list时,该函数的作用是向传入的这个L新加一个元素'END',并返回传入的那个L。

L.append('END')这一行,如果缩进的话:当函数传入的L不是None时,就不会向传入的这个L新加一个元素'END'。因此缩进与不缩进的效果是不一样的。

各位渴望看我笑话的老铁们,恭喜,你们又有乐子看了。

在昨天顺利攻克了文本编辑器难题后,我很愉快继续学习后面的两个小节《Python代码运行助手》《输入和输出》。

前者没啥可说的,感觉跟我没啥太大关系、意义不大,简单看看就过去了。

《输入和输出》一节,按照教程操作,还是蛮愉快的。

这节主要讲了print和input命令的使用方法,以及变量的概念。

前面的学习过程可谓一马平川,结果最后的练习稍微出现了点小问题。

练习:请利用print()输出1024 * 768 = xxx。

我本来觉得是个很简单的问题,没想到输入了4遍才搞定。

我估计应该是中间错加了空格的问题。

好吧,对比例子,应该还得加逗号。

嗯,这他么其实是个手误,逗号输错了位置。(残念)

这小玩意都用了四遍才搞定,40岁的老男人真的太难了。

继续进入后面的学习。

下一章《Python基础》中第一节《数据类型和变量》。

然后,我就蒙圈了。

这一节的内容知识量明显增多,前面的内容还好,按部就班的按照教程进行操作就好。

后面开始出现转义符的概念,什么\n、\t、\之类的东东,总之确实需要动些脑子了。

这里我觉得,是不是可以简单理解为:两个“\”表示显示“\”,一个“\”表示转义呢?

相比之下,后面讲“用r''表示''内部的字符串默认不转义”我感觉更好理解一些。

还有,“\t 表示制表符”是什么意思?

我真的好傻,悲伤的泪水不争气的流了下来。

上面的问题,哪位知道的仁兄,望在评论区赐教,在此谢过了。

再往后讲变量,我就有点进行不下去了。

给a赋值为1,这个我明白,但是后面t_007=T007,这是为啥?咋蹦出来的?

或者t_007跟a是一个概念,也是在进行赋值操作?

我这么猜测不知道对不对。

他后面举的那个例子,我就彻底晕菜了。

其实说起来,可能也不能怪人家教程,周末这两天在家,确实也很难静下来学习。

但是另一方面,就像很多网友评论区、微信上跟我探讨的,廖雪峰这个教程确实还是存在一些问题的,甚至有人说他有些误导的成分在里面,这个我学的还少,就不敢妄言了。

所以,我决定,结合自己的实际情况(岁数大、脑子慢!),以后以b站600集视频为主不香吗?

毕竟,那个看的很欢乐,最关键的是,学习至今还没遇到槛。

所以,下一期的心得,我就说说在b站上,我都学了些啥吧。。。