3.22python学习笔记
三元表达式
# 是if,else的另外一种写法,合适在两个选择的情况下使用
def max(a,b):
if a>b:
return a
else:
return b
# 三元表达式的写法
max = a if a > b else b
"""
三元表达式
值1 if 条件 else 值2
条件如果成立则使用值1(if前面的数据)
条件如果不成立则使用值2(else后面的数据)
三元表达式只用于二选一的情况 最好不要嵌套使用(语法不简洁)
'''
各种生成式
用于快捷生成想要的数据类型,如列表,字典,集合。
1.列表生成式
现在想要生成一个1到10的列表
平常方法:
list1 = []
for i in range(11)
list1.append(i)
print(list1)
#生成式写法
list2 = [i for i in range(11)]
#结果 [0,1,2,3,4,5,6,7,8,9,10]
还可以添加条件
list2 = [i for i in range(11) if i > 3]
#结果 [4,5,6,7,8,9,10]
2.字典生成式
#定义两个列表(索引值必须相等)
list1 = ['a','b','c','d']
list2 = ['1','2','3','4']
字典生成式
dic = {list1[i]:list2[i] for i in range(len(list1))}
print(dic)
执行结果:
{'a': '1', 'b': '2', 'c': '3', 'd': '4'}
#实现字典的key和value快速交换:
dic1={'a':1,'b':2}
dic2={v: k for k, v in dic1.items()}
print(dic2) #{1: 'a', 2: 'b'}
3.集合生成器
a = {i for i in range(10)}
print(a)
#{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
a = {i for i in range(10) if i != 2}
print(a)
#{0, 1, 3, 4, 5, 6, 7, 8, 9}
匿名函数
#匿名函数不需要显示地定义函数名,使用【lambda + 参数 +表达式】的方式,即:lambda 形参:返回值
现在写两个数相乘的函数
def f(x,y):
return x*y
f(2,3) # 6
用匿名函数来写
func = lambda x,y:x*y
可以看到,上面我们把匿名函数对象赋给一个变量,只要直接调用该对象就可以使用匿名函数:
func(2,3) # 6
你也可以给匿名函数传入一个参数:
func_2 = lambda x:x^2
func_2(3) # 9
#优点:
#不用取名称,因为给函数取名是比较头疼的一件事,特别是函数比较多的时候
#可以直接在使用的地方定义,如果需要修改,直接找到修改即可,方便以后代码的维护工作
#语法结构简单,不用使用def 函数名(参数名):这种方式定义,直接使用lambda 参数:返回值 定义即可
常见重要内置函数
map映射函数
l1 = [11, 22, 33, 44, 55]
需求:元素全部自增10
方式1:列表生成式
方式2:内置函数
def index(n):
return n + 10
res = map(index,l1)
print(res) # 迭代器(节省空间的 目前不用考虑)
print(list(res)) # [21, 32, 43, 54, 65]
res = map(lambda x: x + 10, l1)
print(list(res)) # [21, 32, 43, 54, 65]
zip拉链
l1 = [11, 22, 33, 44]
l2 = ['jason','kevin','tony','oscar']
需求:将两个列表中的元素一一对应成对即可
res = zip(l1,l2) # 结果是一个迭代器
print(res) # 目前想看里面的数据 用list转换一下即可
print(list(res)) # [(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'oscar')]
'''zip可以整合多个数据集'''
l1 = [11, 22, 33, 44]
l2 = ['jason','kevin','tony','oscar']
l3 = [1,2,3,4]
l4 = [55,66,77,88]
res = zip(l1,l2,l3,l4)
print(list(res))
不使用zip也可以
res1 = [(l1[i],l2[i],l3[i],l4[i]) for i in range(len(l1))]
print(res1)
filter过滤
方式1:列表生成式
方式2:内置函数
def index(x):
return x > 30
res = filter(index,l1)
print(list(res)) # [33, 44, 55, 66]
res = filter(lambda x:x>30, l1)
print(list(res))
reduce归总
'''以前是内置函数 现在是某个模块下面的子函数(后面讲)'''
from functools import reduce
l1 = [11, 22, 33]
'''需求:讲列表中所有的元素相加'''
# def index(x,y):
# return x + y
# res = reduce(index,l1)
# print(res) # 66
res = reduce(lambda x, y: x + y, l1)
print(res) # 66
res = reduce(lambda x, y: x + y, l1, 100)
print(res) # 166
"""掌握到能够语言表达出大致意思"""
一些小方法
1.abs() 获取绝对值(不考虑正负号)
print(abs(-10)) #10
2.all()与any()
l1 = [0, 0, 1, 0, True]
print(all(l1)) # False 数据集中必须所有的元素对应的布尔值为True返回的结果才是True
print(any(l1)) # True 数据集中只要所有的元素对应的布尔值有一个为True 返回的结果就是True
3.bin() oct() hex() 产生对应的进制数
bin是2进制 oct是8进制 hex是16进制
4.bytes() 类型转换
s = '你好啊 hello world!'
print(s.encode('utf8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a hello world!'
print(bytes(s, 'utf8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a hello world!'
'''针对编码解码 可以使用关键字encode与decode 也可以使用bytes和str'''
5.callable() 判断当前对象是否可以加括号调用
name = 'jason'
def index():pass
print(callable(name)) # False 变量名不能加括号调用
print(callable(index)) # True 函数名可以加括号调用
6.chr()、ord() 字符与数字的对应转换
print(chr(65)) # A 根据数字转字符 依据ASCII码
print(ord('A')) # 65 根据字符转数字 依据ASCII码
7.dir() 返回数据类型可以调用的内置方法(查看对象内部可调用的属性)
print(dir(123))
print(dir('jason'))
8.divmod() 返回整数和余数
print(divmod(250,25)) # (10, 0) 第一个参数是整数部分 第二个是余数部分
print(divmod(251,25)) # (10, 1)
print(divmod(249,25)) # (9, 24)
9.enumerate() 枚举
name_list = ['jason', 'kevin', 'oscar', 'tony']
for name in name_list:
print(name)
for i,j in enumerate(name_list):
print(i,j) # i类似于是计数 默认从0开始
for i,j in enumerate(name_list,start=1):
print(i,j) # 还可以控制起始位置
10.eval() exec() 识别字符串中的python代码 使用频率很低
eval(res):只能识别简单逻辑的python代码
exec(res):能够识别具有与一定逻辑的python代码