1. 元祖相比列表的优势
- 元祖的运算速度比列表快,如果经常需要遍历一个序列,且内容不做修改,则用元祖;
- 元祖内容不可修改,对数据进行了保护,功能大概类似于word转成pdf,只读,不可修改。
2. print() 函数作为列表的元素,是没有返回值的
先煮个小栗子:
将print()赋值给s,,然后打印s发现是None,震惊!!因为print函数没有返回值啊大哥!
再煮个大栗子:
将txt文件中的内容,利用列表生成式打印出来:
上图结果返回的是列表,而这个列表的元素是None,因为print()函数作为列表的元素是没有返回值的。
再看下图
3. Python中的时间(戳)转换
4. 可迭代对象!= 迭代器,但迭代器 == 可迭代对象
- 可迭代对象:简单来说,可以使用for循环的,也可以使用函数判断如下:
- 迭代器:一定是可迭代对象,拥有
next()
方法!比如列表(list)就不是迭代器。
不信你试试:
所以啊,看看下面这个栗子,可迭代对象和迭代器之间的纠缠:
那照这么说的话,好像多次一举,但其实是有用武之地的,比如你要取一个集合中的元素时…
补充,
集合中元素的性质:确定性,互异性,无序性
集合中的元素是没有索引的,如果你想这样:
看到了大大的Error
提示了吧:set object does not support indexing
,这时候,就来看看迭代器的了。
- 但是有一点,迭代器只有
next()
函数,也就是说,智能往后,不能回退,不能获取前一个元素,是真的过了这个村,就没这个店了,就是这么傲娇! - 优点是不要求事先准备好整个迭代过程中所有的原型,在迭代到某个元素时才开始计算,特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件。
5. 闭包
以前看java的时候也看到过闭包这个概念,但是概念性的东西真的枯燥无味,一瞥而过,直到今天看到这个教程中的python对闭包的演示,顿悟啊。
闭包,就是根据不同的配置信息,得到不同的结果!
看一下定义级别的描述:
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。
这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。
直接上代码:
看到没,这里在函数内部还有一个函数,但是没调用,将这个内部函数的引用给返回了,而且带着是外部函数的参数…
妈呀,好像有点绕,那还是看上面代码来自己理解吧。
有这么三个特征:
- func函数里有一个内部函数func_inner
- func_inner函数使用了外部函数func中的num变量
- 外部函数func最后返回的是func_inner函数的引用
这也就是闭包的三个特征,这个外部函数就是闭包函数了!
具体的应用见下面这个例子:
这真的是,根据不同配置,得到不同的结果。