Python外壳:代码结构!(推导式和函数 )

版权声明:转载请声明原文链接地址,谢谢! https://blog.csdn.net/weixin_42859280/article/details/85378065

推导式:

推导式是一个或者多个迭代器快速简洁的创建数据结构的一种方法。
它可以将循环和条件判断结合,从而避免语法冗长的代码。
悄悄告诉你,会使用推导式。很大程度上说明,你已经超过许多初学者啦·
也就是说,使用推导式更加像python的风格·

列表推导式:
一个一个追加。
在这里插入图片描述
也可以使用,上面说过的range()函数
在这里插入图片描述

但是,更加像python风格的操作:
利用推导式。
在这里插入图片描述
第一个是输入列表的值,第二个是循环变量·
下面再举一个例子试试:
在这里插入图片描述
明显嘛·就是输入其中的值·
还可以添加一个条件筛选(有难度喽·)
一个筛选出来偶数,一个筛选出来奇数。
在这里插入图片描述

这个远比老方法,简单。而且比较秀·
在这里插入图片描述
这个就显得很冗长啦。

下面来探索一下两元素的输出。
老办法:
在这里插入图片描述
利用推导式:
在这里插入图片描述
(还是要实战去练习的呀·)
在这里插入图片描述
不带小括号的就让它输出来两个元素就好啦·

字典推导式:
当然字典推导式也可以有if判断语句以及for循环语句
在这里插入图片描述

哈哈,是不是有点懵呀。其实我也不太懂。那就化困难为简单。来看看简单的表达意思是啥·

w.count('a'):是统计某个字符在单词里面出现的次数~
for z in w:是让单词里面的所有字符都输出一遍~

在这里插入图片描述
这么看来就是:一个推导式的功能等于那两个程序加在一起的功能喽·

n = {z:w.count(z) for z in w}

神奇
但是,也有优化可以做。因为某些字符出现不止是一次,
但是因为那个.count()函数,对每一个字符一次就可以统计其出现次数和。
所以没必要多次进行计算·
我们借助集合来:

第一次n和第二次n内容没变,但是次序却发生变换啦
set(w)其中的字符没有重复出现过·
可以~

在这里插入图片描述
集合推导式:
这个可以参照之前的东西,都是很相近的~
这里就说一个比较简单的。

range()范围:
在这里插入图片描述

在这里插入图片描述
生成器推导式:
元组没有推导式,就是那种带圆括号的。
其实,他们是生成器推导式,返回的是一个生成器对象~
在这里插入图片描述
但是只能调用一次,列表,集合,字符串,字典都存储在内存里面。
生成器仅仅在运行的时候会产生数值。不能被备份为一个新的生成器,或者是第二次使用。

函数:
def 函数名 带有函数参数的圆括号:
虽然上面的你早就知道啦。跟C一样的命名规则。
g)
if-elif-else:叫做逻辑链·
在这里插入图片描述
调用:
在这里插入图片描述

位置参数:
(括号别搞错了·)
在这里插入图片描述

最后:
在这里插入图片描述
但是我这个没有出现书上的顺序错乱。
所以,也就不好引出关键字参数啦。
那就直接来,就是指定了参数!不会出现顺序紊乱·
在这里插入图片描述
指定默认参数值:
在这里插入图片描述
注意,参数是“=”符号。
不输入的话,默认会是c自己。但是一旦输入参数值的话,就会发生顶替。

仅使用一次的空列表:
在这里插入图片描述
但是,有也可以反过来用啊。利用列表来存储好多东西。哈哈·
使用*收集位置参数:
将不固定数量的参数,变成元组传进去!
Python里面没有指针一说
(这个用着挺好的)
在这里插入图片描述
这样做的好处,是你可以确定几个输出。其他的都可以来进行追加!
在这里插入图片描述
但是,不能进行空白输出!图中用红色线圈起来的。

两个**符号的,将不固定数量的参数,变成字典传进去!
会出现键值对!
{}:代表字典·
在这里插入图片描述
a='b’的格式!
在这里插入图片描述

文档字符串:
(但是那个_doc_的我失败啦!)
在这里插入图片描述
一等公民:函数

Python里面的一切都是对象,包括数字,字符串,元组,列表,字典,函数。
不过,函数可以将返回值赋值给变量,可以作为参数被其他函数调用。
也可以从其他函数里面返回值!

在这里插入图片描述

跟C语言里面的()一样,代表调函数的意思!
在这里插入图片描述
就是调用函数啦!
在这里插入图片描述
在这里插入图片描述
rr:里面的参数,第一个是可以调用的函数,另外两个是参与运算的参数。
ff(x,y)
是这个函数执行的操作!

老朋友:
*a(位置参数收集) 元组
**a(关键字参数收集) 字典

sum()是Python自定义的函数。可以进行求和。

内部函数:
在这里插入图片描述
再来一个例子:

return "the name is '%s'" % qq#新知识呦~

在这里插入图片描述
闭包:

内部函数可以看作为一个闭包。
闭包是一个可以由另一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值。

闭包就是能够读取其他函数内部变量的函数。
例如在javascript中,只有函数内部的子函数才能读取局部变量,
所以闭包可以理解成“定义在一个函数内部的函数“。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 

6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjg1OTI4MA==,size_16,color_FFFFFF,t_70)
只是进行复制,并没有进行调用。看类型。
只有a(),这个调用函数才可以输出正确结果!
因为返回的是一个函数名字。看作复制就好啦~

匿名函数

生成器:
生成器是用来创建Python里面序列的。可以通过它迭代庞大的序列。
但是是通过yield来进行返回值声明
但是调用一次就会进行释放:
(比如下面的例子):
在这里插入图片描述

装饰器:
是对函数进行再次改变,不改变源代码就可以实现!
感觉很重要的样子,嘻嘻
装饰器本质上就是一个函数,将一个函数作为输入。并且返回另外一个函数。
*a,**b利用这两个知识进行做装饰器。
在这里插入图片描述
是不是有点晕,哎呀。看不懂操作·
感觉有点像C里面的函数调用。
在这里插入图片描述
这个就是对前面那个:cc = tt(add)
代码的代替。
一个函数可以有多个装饰器。
在这里插入图片描述

在这里插入图片描述

调用顺序不同,最后得到的结果也会不同的。
靠近def的修饰器先执行,但是所返回的数值。也会被后面执行的所替换掉!
在这里插入图片描述
二者就是数值结果不同,别的都是一样的。得到的值取决于第一个被调用的修饰器!

命名空间和作用域:
一个名称在不同使用情况下,可能代指不同的事物。每一个命名空间和别的命名空间没有关系。
但是,同样也可以调用别的。
就像以前我写爬虫用的全局:global
在这里插入图片描述
不使用global就会出错误!
关于变量的ID号的!
全局和函数局部是不一样的!
在这里插入图片描述
local():返回一个局部命名空间内容的字典
global():返回一个全局命名空间内容的字典
(看不清就点开看!)
在这里插入图片描述
就说说:名称里面的_和__。这些都是Python的保留用法。自变量定义的时候不可以使用这些。
https://www.cnblogs.com/hester/articles/4936603.html

用try和except处理错误:

就是缩短你找错误的时间啦。
写这个用的时间多,将来排查错误用的时间就少啦!
在这里插入图片描述
当然,也可以更加精确一点!

>>> while True:
...  vv = input('q to quit!')
...  if vv == 'q':
...   break
...  try:
...   pp = int(vv)
...   print(s[pp])
...  except IndexError as err:#那个是保留字!标准库提前定义好的!
...   print('index error.',pp)
...  except Exception as other:
...   print('something else error.',other)
...
q to quit!1
2
q to quit!0
1
q to quit!2
3
q to quit!3
index error. 3
q to quit!6
index error. 6
q to quit!7
index error. 7
q to quit!8
index error. 8
q to quit!tt
something else error. invalid literal for int() with base 10: 'tt'
q to quit!

在这里插入图片描述
好用!

猜你喜欢

转载自blog.csdn.net/weixin_42859280/article/details/85378065