三元表达式
def index(a, b):
print(a) if a > b else print(b)
index(11, 21)
# 获取输入判断
choice = input('是否继续(y/n)>>').strip()
print('继续') if choice == 'y' else (print('退出') if choice == 'n' else print('他喵的,输错了'))
# 不推荐嵌套使用
# if else 分支结构如果子代码是只有一行时,也可简写
def index(a, b):
if a > b : print(a)
else : print(b) # 不服从PEP8规范
列表生成式
name_list = {'oliver', 'jason', 'kevin'}
res = [name+'_DSG' for name in name_list]
print(res)
# 可以加执行条件
name_list = {'oliver', 'jason', 'kevin'}
res = [name+'_DSG' for name in name_list if name != 'jason']
print(res)
字典生成式
name_list = ['oliver', 'jason', 'kevin']
res = {flag[i]:name_list[i] for i in range(len(flag))}
print(res)
# 可加执行条件
flag = ['DSG', 'XSG', 'DSB']
name_list = ['oliver', 'jason', 'kevin']
res = {flag[i]:name_list[i] for i in range(len(flag)) if i != 1}
print(res)
集合生成式
name_list = ['oliver', 'jason', 'kevin']
res = {i for i in name_list}
print(res)
name_list = ['oliver', 'jason', 'kevin']
res = {i for i in name_list if i != 'jason'}
print(res)
匿名函数
'''
顾名思义,没有函数名的函数就是匿名函数,需要配合其他函数使用
基本结构
lambda 形参:返回值
'''
lambda x: x + 2
# 获取字典内部最大的值数据
info = {
'Aason': 9999999,
'Jacob': 123,
'zark': 1000,
'berk': 33
}
def index(k): # 获取key键
return info[k] # 返回对应的值
print(max(info, key=index)) # 筛选最大的值并返回对象的key键
print(max(info, key=lambda key:info[key])) # 使用匿名函数更简单
重要内置函数
# 1.内置函数之 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]
# 2.内置函数之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)
'''zip可以整合多个数据集 如果数据集之间个数不一致 那么依据短的'''
l1 = [11, 22, 33, 44, 55]
l2 = ['jason', 'kevin']
res = zip(l1, l2)
print(list(res))
# 3.内置函数之filter过滤
l1 = [11, 22, 33, 44, 55, 66]
'''需求:筛选出大于30的元素'''
# 方式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))
# 4.内置函数之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(-123))
print(abs(123))
# 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() 产生对应的进制数
print(bin(100))
print(oct(100))
print(hex(100))
# 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!'
s1 = '天黑了 抓紧进屋吧!!!'
# 编码
res = bytes(s1, 'utf8')
print(res)
# 解码
res1 = str(res, 'utf8')
print(res1)
# 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)
def get_page_num(total_num,page_num): # 后面django分页器使用
more,others = divmod(total_num, page_num)
if others:
more += 1
print('需要%s页'%more)
get_page_num(1000,30)
# 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代码 使用频率很低
print('print("有点饿了")')
eval('print("有点饿了111")')
exec('print("有点饿了222")')
res = """
for i in range(10):
print(i)
"""
# eval(res) 只能识别简单逻辑的python代码
# exec(res) 能够识别具有与一定逻辑的python代码
生成式结束