day03.22
三元表达式
三元表达式适用于条件选择判断的语法结构中,在二选一的条件下,可以使程序的语法结构更加简洁明了。
三元表达式的语法结构为:
值1 if 条件 else 值2
条件如果成立则使用值1(if前面的数据);
条件如果不成立则使用值2(else后面的数据)
eg:
is_change = input('是否收费>>>:').strip() is_free = '收费' if is_change == 'y' else '免费' # 输入y,输出收费;否则输出免费 print(is_free)
username = input('username>>>:').strip() res = '管理员' if username == 'jason' else 'DSB' # if条件语句如果是jason就输出管理员,否则就输出DSB print(res)
NOTE:三元表达式一般只适用于两个条件的选择,不要嵌套使用,嵌套的结果也不会很简洁。
eg:
res = '下午' if 1 == 1 else (2 if 2==3 else '上午') # 如果1=1,输出下午,否则判断2是否等于3,如果2=3,输出2,否则输出上午
if分支结构的简化:
name = 'jason' if name == 'jason': print(name) ''' if name == 'jason': print('jason') else: print('嘿嘿嘿') ''' else: print('嘿嘿嘿')
生成式
列表生成式:
将列表中所有的人名后面加上_DSB
eg:
name_list = ['jason', 'kevin', 'tony', 'oscar', 'jerry'] new_list = [] # 创建一个空的列表用于存储修改之后的数据 for name in name_list: # for循环列表获取每一个人名 res = name + '_DSB' # 字符串末位拼接_DSB new_list.append(res) # 添加到新的列表中 print(new_list) # 打印新列表 ['jason_DSB', 'kevin_DSB', 'tony_DSB', 'oscar_DSB', 'jerry_DSB'] # 如果使用列表生成式,程序会更加简洁 res = [name+'_SB' for name in name_list] print(res) # ['jason_SB', 'kevin_SB', 'tony_SB', 'oscar_SB', 'jerry_SB']
列表生成式还具备一定的条件筛选的能力
eg:
name_list = ['jason', 'kevin', 'tony', 'oscar', 'jerry'] res = [name+'_SB' for name in name_list if name == 'jason'] print(res) # ['jason_SB'] res = [name+'_SB' for name in name_list if name != 'jason'] print(res) # ['kevin_SB', 'tony_SB', 'oscar_SB', 'jerry_SB']
NOTE:列表生成式中值允许出现for和if,不能出现else!!!
字典生成式:
l1 = ['name', 'age', 'pwd'] l2 = ['jason', 18, 123]
将上述两个列表分别制作成字典的键值
eg:
l1 = ['name', 'age', 'pwd'] l2 = ['jason', 18, 123] new_dict = {} # 定义一个空字典 for i in range(len(l1)): # 每次循环都要拿到两个列表中对应的元素(索引相等) new_dict[l1[i]] = l2[i] # 索引取值 print(new_dict) # {'name': 'jason', 'age': 18, 'pwd': 123} # 若是使用字典生成式,结构更加的简单 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}
集合生成式:
# 集合生成式 res = {i for i in range(10)} print(res, type(res)) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'> res = {i for i in range(10) if i != 2} # {0, 1, 3, 4, 5, 6, 7, 8, 9} <class 'set'> print(res, type(res))
匿名函数
匿名函数:顾名思义就是没有函数名的函数。一般用来解决功能简单需求的一句话函数。
匿名函数的关键字为lambda,冒号前面是形参,后面是返回值。
匿名函数的语法结构为:
lambda x(形参):x+2(返回值)
# 普通函数 def calc(n): return n*n print(calc(5)) #转换匿名函数 calc = lambda n:n*n print(calc(5))
# max:统计最大值 l1 = [11,32,41,22,13,66,54,78,96,34,54,99,35] print(max(l1)) # 99 直接获取数据集中最大的元素值 # 求:薪资最高的人的姓名 info = { 'Aason':9999999, 'Jacob':123, 'zark':1000, 'berk':33 } print(max(info)) # zark 注意如果是字典结构,则是取k值进行比较,如果k值是字符串的英文字母,则转换成ASCII码进行比较
重要的内置函数
内置函数之map
# 列表中的元素全部自增10 l1 = [11, 22, 33, 44, 55] # 用函数 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')]
# 整合多个数据集合 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)) # [(11, 'jason', 1, 55), (22, 'kevin', 2, 66), (33, 'tony', 3, 77), (44, 'oscar', 4, 88)]
# zip可以整合多个数据集合,但是如果数据集之间个数不一致,那么依据短的数据集合为准 l1 = [11, 22, 33, 44, 55] l2 = ['jason', 'kevin'] res = zip(l1,l2) print(list(res)) # [(11, 'jason'), (22, 'kevin')]
内置函数之filter
# filter的筛选过滤功能 # 筛选出大于30的元素 l1 = [11, 22, 33, 44, 55, 66] # 列表生成式 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)) # [33, 44, 55, 66]
内置函数之reduce
# 将列表中所有的元素相加 l1 = [11, 22, 33] from functools import reduce # 函数方法 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
常见的内置函数
- abs() 取绝对值
print(abs(-123)) # 123 print(abs(123)) # 123
- all()与any()
l1 = [0, 0, 1, 0, True] # 数据集合中必须所有的元素对应的布尔值为True,返回的结果才是True print(all(l1)) # False # 数据集合中只要所有的元素对应的布尔值有一个为True,返回的结果就是True print(any(l1)) # True
- bin()、oct()、hex()
# 进制的转换 print(bin(100)) # 0b1100100 二进制 print(oct(100)) # 0o144 八进制 print(hex(100)) # 0x64 十六进制
- chr()、ord()
# 依据ASCII码,数字转换字符 print(chr(65)) # A # 依据ASCII码,字符转换数字 print(ord('A')) # 65
- dir()
# 查看该数据的数据类型可以调用的内置方法 print(dir(123)) print(dir('jason'))
- divmod()
# 取余 一般用在网站分页上,输出结果第一个参数是整数部分;第二个是余数部分 print(divmod(250,25)) # (10, 0) print(divmod(251,25)) # (10, 1) print(divmod(249,25)) # (9, 24)
- enumerate()
name_list = ['jason', 'kevin', 'oscar', 'tony'] for name in name_list: print(name) ''' jason、 kevin oscar tony ''' for i,j in enumerate(name_list): print(i,j) # i类似于是计数,默认从索引值0开始 ''' 0 jason 1 kevin 2 oscar 3 tony ''' for i,j in enumerate(name_list,start=1): print(i,j) # 还可以控制起始位置,可以从任意索引值开始 ''' 1 jason 2 kevin 3 oscar 4 tony '''
- eval()、exec()
# 识别字符串中的python代码 print('print("有点饿了")') eval('print("有点饿了111")') exec('print("有点饿了222")') ''' note: eval(res) 只能识别简单逻辑的python代码 exec(res) 能够识别具有与一定逻辑的python代码 '''
- help()
# 查看注释信息 help(len) ''' len(obj, /) Return the number of items in a container. '''
- id()
# 返回一串相当于内存地址的数字 print(id('jason')) # 2935348843552
- isinstance()
# 判断数据类型,输出为布尔值 print(type('jason') is str) # 类型判断 很繁琐,不推荐 print(isinstance('jason', str)) # True print(isinstance('jason', int)) # False
- pow()
# 幂指数运算 print(pow(10, 2)) # 100
- round()
# 数据的四舍五入,第二个参数控制需要保留几位小数部分 print(round(11, 1)) # 11 print(round(11.29, 1)) # 11.3 print(round(11.59, 1)) # 11.6
- sun()
# 数据求和 print(sum([11, 2, 2, 3, 4, 3, 2])) # 27
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?