推导式:
列表推导式:
一个一个追加。
也可以使用,上面说过的range()函数
但是,更加像python风格的操作:
利用推导式。
第一个是输入列表的值,第二个是循环变量·
下面再举一个例子试试:
明显嘛·就是输入其中的值·
还可以添加一个条件筛选(有难度喽·)
一个筛选出来偶数,一个筛选出来奇数。
这个远比老方法,简单。而且比较秀·
这个就显得很冗长啦。下面来探索一下两元素的输出。
老办法:
利用推导式:
(还是要实战去练习的呀·)
不带小括号的就让它输出来两个元素就好啦·字典推导式:
当然字典推导式也可以有if判断语句以及for循环语句
哈哈,是不是有点懵呀。其实我也不太懂。那就化困难为简单。来看看简单的表达意思是啥·
这么看来就是:一个推导式的功能等于那两个程序加在一起的功能喽·
神奇
但是,也有优化可以做。因为某些字符出现不止是一次,
但是因为那个.count()函数,对每一个字符一次就可以统计其出现次数和。
所以没必要多次进行计算·
我们借助集合来:
集合推导式:
这个可以参照之前的东西,都是很相近的~
这里就说一个比较简单的。range()范围:
生成器推导式:
元组没有推导式,就是那种带圆括号的。
其实,他们是生成器推导式,返回的是一个生成器对象~
但是只能调用一次,列表,集合,字符串,字典都存储在内存里面。
生成器仅仅在运行的时候会产生数值。不能被备份为一个新的生成器,或者是第二次使用。函数:
def 函数名 带有函数参数的圆括号:
虽然上面的你早就知道啦。跟C一样的命名规则。
if-elif-else:叫做逻辑链·
调用:
位置参数:
(括号别搞错了·)
最后:
但是我这个没有出现书上的顺序错乱。
所以,也就不好引出关键字参数啦。
那就直接来,就是指定了参数!不会出现顺序紊乱·
指定默认参数值:
注意,参数是“=”符号。
不输入的话,默认会是c自己。但是一旦输入参数值的话,就会发生顶替。仅使用一次的空列表:
但是,有也可以反过来用啊。利用列表来存储好多东西。哈哈·
使用*收集位置参数:
将不固定数量的参数,变成元组传进去!
Python里面没有指针一说
(这个用着挺好的)
这样做的好处,是你可以确定几个输出。其他的都可以来进行追加!
但是,不能进行空白输出!图中用红色线圈起来的。两个**符号的,将不固定数量的参数,变成字典传进去!
会出现键值对!
{}:代表字典·
a='b’的格式!
文档字符串:
(但是那个_doc_的我失败啦!)
一等公民:函数
跟C语言里面的()一样,代表调函数的意思!
就是调用函数啦!
rr:里面的参数,第一个是可以调用的函数,另外两个是参与运算的参数。
ff(x,y)
是这个函数执行的操作!
老朋友:
*a(位置参数收集) 元组
**a(关键字参数收集) 字典
sum()是Python自定义的函数。可以进行求和。
内部函数:
再来一个例子:
闭包:
只是进行复制,并没有进行调用。看类型。
只有a(),这个调用函数才可以输出正确结果!
因为返回的是一个函数名字。看作复制就好啦~
匿名函数
生成器:
生成器是用来创建Python里面序列的。可以通过它迭代庞大的序列。
但是是通过yield来进行返回值声明
但是调用一次就会进行释放:
(比如下面的例子):
装饰器:
是对函数进行再次改变,不改变源代码就可以实现!
感觉很重要的样子,嘻嘻
装饰器本质上就是一个函数,将一个函数作为输入。并且返回另外一个函数。
*a,**b利用这两个知识进行做装饰器。
是不是有点晕,哎呀。看不懂操作·
感觉有点像C里面的函数调用。
这个就是对前面那个:cc = tt(add)
代码的代替。
一个函数可以有多个装饰器。
调用顺序不同,最后得到的结果也会不同的。
靠近def的修饰器先执行,但是所返回的数值。也会被后面执行的所替换掉!
二者就是数值结果不同,别的都是一样的。得到的值取决于第一个被调用的修饰器!命名空间和作用域:
一个名称在不同使用情况下,可能代指不同的事物。每一个命名空间和别的命名空间没有关系。
但是,同样也可以调用别的。
就像以前我写爬虫用的全局:global
不使用global就会出错误!
关于变量的ID号的!
全局和函数局部是不一样的!
local():返回一个局部命名空间内容的字典
global():返回一个全局命名空间内容的字典
(看不清就点开看!)
就说说:名称里面的_和__。这些都是Python的保留用法。自变量定义的时候不可以使用这些。
用try和except处理错误:
就是缩短你找错误的时间啦。
写这个用的时间多,将来排查错误用的时间就少啦!
当然,也可以更加精确一点!
好用!