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

 

posted @   *sunflower*  阅读(68)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示