三元表示
'''使用场景:二选一的时候 推荐使用三元表达式'''
# 编写一个求两个数大小的函数
def index(a, b):
if a > b:
return a
else: # 可以省略
return b
# 如果用户名是jason则打印管理员 否则打印DDD
username = input('username>>>:').strip()
if username == 'jason':
print('管理员')
else:
print('DDD')
'''
三元表达式
值1 if 条件 else 值2
条件如果成立则使用1(if前面的数据)
条件如果不成立则使用值2(else后面的数据)
'''
username = input('username>>>:').strip()
res = '管理员' if username == 'jason' else 'DSB'
print(res)
'''三元表达式只用于二选一的情况 最好不要嵌套使用(语法不简洁)'''
res = '下午' if 1 == 1 else (2 if 2==3 else '上午') # 不推荐
"""并不是代码写的最少干的事越多就与牛逼 还有一个前提>>>:简洁易读"""
写一个电影系统 需要决定电影是否收费
is_change = input('是否收费>>>:').strip()
is_free = '收费' if is_change == 'y' else '免费'
print(is_free)
# 补充:针对if分支结构 也有简化版本(了解即可)
'''子代码块都只有简单的一行情况下 也可以简写 没有三元表达式简单 但是也有人用'''
name = 'jason'
if name == 'jason': print(name)
else: print('嘿嘿嘿')
各种生成式
1.列表生成式
name_list = ['jason', 'kevin', 'tony', 'oscar', 'jerry']
'''需求:将列表中所有的人名后面加上_DSB'''
# 以我们之前掌握的知识能否实现>>>:可以
# 1.创建一个空的列表用于存储修改之后的数据
new_list = []
# 2.for循环列表获取每一个人名
for name in name_list: # 'jason' 'kevin' 字符串
# # 3.字符串末位拼接_DSB
res = name + '_DSB'
# # 4.添加到新的列表中
new_list.append(res)
print(new_list)
# 列表生成式:该技术可以简化代码 也可以不用 无外乎写的复杂一点而已
res = [name+'_SB' for name in name_list]
print(res)
# 列表生成式复杂用法:还具备筛选能力
res = [name+'_SB' for name in name_list if name == 'jason']
print(res)
res = [name+'_SB' for name in name_list if name != 'jason']
print(res)
'''列表生成式中值允许出现for和if 不能出现else 因为会产生歧义(for和if都能结合else)'''
2.字典生成式
l1 = ['name', 'age', 'pwd']
l2 = ['jason', 18, 123]
# 需求:将上述两个列表分别制作成字典的键值
# 1.定义一个空字典
new_dict = {}
# 2.每次循环都要拿到两个列表中对应的元素(索引相等)
for i in range(len(l1)):
# 3.索引取值即可
new_dict[l1[i]] = l2[i]
print(new_dict)
# 字典生成式
res = {l1[i]: l2[i] for i in range(len(l1))}
print(res) # {'name': 'jason', 'age': 18, 'pwd': 123}
res = {l1[i]: l2[i] for i in range(len(l1)) if i == 1}
print(res) # {'age': 18}
3.集合生成式
res = {i for i in range(10)}
print(res, type(res))
res = {i for i in range(10) if i != 2}
print(res, type(res))
"""没有元组生成式 依据上述写法得到的时候后续我们要学习的知识:迭代器"""
匿名函数
匿名函数的意思就是没有函数名
没有函数名的函数如何调用呢?
需要结合其他函数一起使用
# 定义匿名函数
lambda x:x+2
'''
lambda 形参:返回值
α β γ
如果用普通函数来表示
def index(x):
return x + 2
'''
print(lambda x:x+2)
max:统计最大值
l1 = [11, 32, 41, 22, 13, 66, 54, 78, 96, 34, 54, 99, 35]
print(max(l1)) # 直接获取数据集中最大的元素值
info = {
'Aason':9999999,
'Jacob':123,
'zark':1000,
'berk':33
}
比如说你要求薪资最高的人姓名
print(max(info)) # zark
'''
max底层可以看成是for循环依次比较 针对字典默认只能获取到K
获取到K之后如果是字符串的英文字母 则会按照ASCII码表转成数字比较
A~Z:65-90
a~z:97-122
'''
def index(k):
return info[k]
print(max(info,key=index)) # key对应的函数返回什么 max就以什么做比较的依据
# 比较的是v 返回的是k key相当于是可以更改比较规则的参数
# 上述代码可以简写 因为函数功能很单一
print(max(info, key=lambda key:info[key])) # Aason
常见重要内置函数
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))
内置函数之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'
打印出来的则是编码
'''针对编码解码 可以使用关键字encode与decode 也可以使用bytes和str'''
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()
'''
可以使用在网站的分页制作上
练习题: 问
总共250条数据 每页展示25条 需要多少页 10页
总共251条数据 每页展示25条 需要多少页 11页
总共249条数据 每页展示25条 需要多少页 10页
'''
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代码