逆袭之路——python常见内置函数、表达式【day15】

今日内容概要

  • 三元表达式(简化代码)
  • 各种生成式(简化代码)
  • 匿名函数(简化代码)
  • 常见重要内置函数
  • 常见内置函数补充
    请添加图片描述

今日内容详细

一、三元表达式

三元表达式:
        值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 '上午')  # 不推荐
"""并不是代码写的最少干的事越多就越牛逼 还有一个前提>>>:简洁易读"""

二、各种生成式

  • 生成式的出现就是使代码更加简洁,使用方便

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)

列表生成式实现如下:

name_list = ['jason', 'kevin', 'tony', 'oscar', 'jerry']
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]

用我们之前所学的实现如下:

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))   # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'>
res = {i for i in range(10) if i != 2}
print(res, type(res))   # {0, 1, 3, 4, 5, 6, 7, 8, 9} <class 'set'>

需要知道的是,元组没有生成式

三、匿名函数

  • 匿名函数的意思就是没有函数名

                没有函数名的函数如何调用呢?
                需要结合其他函数一起使用

# 定义匿名函数 lambda(兰姆达)
# 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))  # 直接获取数据集中最大的元素值

字典中取key所对应的最大值
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映射

map()函数,它接收一个函数和一个(也可以说多个)list(不用非得是list,只要是可迭代对象就行)
map()函数不改变原有的list,而是返回一个新的list。

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拉链

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归总

  • reduce函数,reduce函数会对参数序列中元素进行累积。---->#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
"""掌握到能够语言表达出大致意思"""

5、内置函数之abs()

  • 获取绝对值(不考虑正负号)
print(abs(-123))
print(abs(123))

6、内置函数之 all( )与any( )

  • all:数据集中必须所有的元素对应的布尔值为True返回的结果才是True
  • any: 数据集中只要所有的元素对应的布尔值有一个为True 返回的结果就是True
l1 = [0, 0, 1, 0, True]
print(all(l1))  # False  
print(any(l1))  # True   

7、内置函数之bin() oct() hex()

  • 产生对应的进制数
print(bin(100))
print(oct(100))
print(hex(100))

8、内置函数之bytes() 类型转换

  • 多用于文件的编码和解码操作
  • 针对编码解码 可以使用关键字encode与decode 也可以使用bytes和str’’’
s1 = '天黑了 抓紧进屋吧!!!'
# 编码
res = bytes(s1, 'utf8')
print(res)
# 解码
res1 = str(res, 'utf8')
print(res1)

9、内置函数之callable()

  • 判断当前对象是否可以加括号调用
  • 变量名不能加括号调用
  • 函数名可以加括号调用
name = 'jason'
def index():pass
print(callable(name))  # False  变量名不能加括号调用
print(callable(index))  # True  函数名可以加括号调用

10、内置函数之chr()、ord()

  • 字符与数字的对应转换
  • chr:根据数字转字符 依据ASCII码
    ord:根据字符转数字 依据ASCII码
print(chr(65))  # A  根据数字转字符  依据ASCII码
print(ord('A'))  # 65  根据字符转数字  依据ASCII码

11、内置函数之 dir()

  • 返回数据类型可以调用的内置方法(查看对象内部可调用的属性)
print(dir(123))
print(dir('jason'))

12、内置函数之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)

13、内置函数之 enumerate() 枚举

enumerate() 英 /ɪˈnjuːməreɪt/

  • 可以控制起始位置
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")')

14、内置函数之 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代码

了解其他可见:python中常见的内置函数

今天有又是收获满满的一天!!!明天继续加油!!!希望疫情早点过去!!!请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

絵飛·的魚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值