1、三元表达式
代码如下:
x = 1
y = 2
res = 'ok' if x > y else 'no'
print(res)
输出结果:no
2、内置函数:重点
需要掌握的:
int
float
str
list
tuple
dict
set
bool
bytes
s = frozenset({1,2,3}) # 不可变集合
print(type(s))
3、面向对象
需要掌握的:
object
classmethod
staticmethod
property
hasattr
getattr
setattr
delattr
isinstance
issubclass
面向对象编程:
核心是过程二字,过程指的是做事的步骤,即先干啥、再干啥、后干啥
所以说,基于该思想编写程序就好比设计一条流水线
优点:
复杂的问题流程化、进而简单化
缺点:
扩展性差
4、模块
1 什么是模块
模块就是一系列功能的集合体,可以理解为"工具包"
模块的四种类别:
1、一个py文件就可以是一个模块,文件名m1.py,模块名为m1
2、一个包含有__init__.py文件的文件夹称之为包,也是一种模块
3、
4、
模块有三种来源:
1、自带的
内置
标准库
2、第三方模块:pip3 install requests
3、自定义模块
2 为何要用模块
拿来主义,提升开发效率
解决冗余问题,让程序变得更加清晰
3 如何用模块
import time
print(time)
如何用模块:import导入===》1.基本语法:import+模块名(不含py)
2.导入规范:先写内置,在写第三方,最后在写自定义
3.优点:不会产生冲突,缺点:每次调用都输入一次模块名
匿名函数
3.1 匿名函数与lambda
对比使用def关键字创建的是有名字的函数,使用lambda关键字创建则是没有名字的函数,即匿名函数,语法如下
lambda 参数1,参数2,...: expression
举例
# 1、定义
lambda x,y,z:x+y+z
#等同于
def func(x,y,z):
return x+y+z
# 2、调用
# 方式一:
res=(lambda x,y,z:x+y+z)(1,2,3)
# 方式二:
func=lambda x,y,z:x+y+z # “匿名”的本质就是要没有名字,所以此处为匿名函数指定名字是没有意义的
res=func(1,2,3)
2.max,min
匿名函数与有名函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,所以匿名函数用于临时使用一次的场景,匿名函数通常与其他函数配合使用,我们以下述字典为例来介绍它
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
要想取得薪水的最大值和最小值,我们可以使用内置函数max和min(为了方便开发,python解释器已经为我们定义好了一系列常用的功能,称之为内置的函数,我们只需要拿来使用即可)
>>> max(salaries)
'tom'
>>> min(salaries)
'jack'
内置max和min都支持迭代器协议,工作原理都是迭代字典,取得是字典的键,因而比较的是键的最大和最小值,而我们想要的是比较值的最大值与最小值,于是做出如下改动
# 函数max会迭代字典salaries,每取出一个“人名”就会当做参数传给指定的匿名函数,然后将匿名函数的返回值当做比较依据,最终返回薪资最高的那个人的名字
>>> max(salaries,key=lambda k:salaries[k])
'lili'
# 原理同上
>>> min(salaries,key=lambda k:salaries[k])
'jack'
同理,我们直接对字典进行排序,默认也是按照字典的键去排序的
>>> sorted(salaries)
['jack', 'lili', 'siry', 'tom']
3.2 map、reduce、filter
函数map、reduce、filter都支持迭代器协议,用来处理可迭代对象,我们以一个可迭代对象array为例来介绍它们三个的用法
array=[1,2,3,4,5]
要求一:对array的每个元素做平方处理,可以使用map函数
map函数可以接收两个参数,一个是函数,另外一个是可迭代对象,具体用法如下
>>> res=map(lambda x:x**2,array)
>>> res
<map object at 0x1033f45f8>
>>>
解析:map会依次迭代array,得到的值依次传给匿名函数(也可以是有名函数),而map函数得到的结果仍然是迭代器。
>>> list(res) #使用list可以依次迭代res,取得的值作为列表元素
[1, 4, 9, 16, 25]