函数(五)
内容概要
- 三元表达式
- 各种生成式
- 匿名函数
- 常见重要的内置函数
- 补充常见的内置函数
---------------------------------------------------------------------------------------------
三元表达式
三元表达式:一般的在二选一的时候通常我们会想到使用if...else来完成需求,但三元表达式才是最好的,相比于前者三元表达式结构更加简洁
'''
三元表达式的语法结构:
值1 if 条件 else 值2
如果if条件成立则立即使用if前的值1
如果if条件成立则立即使用else后的值2
'''
使用案例
# 二选一的情况
num = input('请输入数字>>>:').strip()
num = int(num)
# if... else用法
# if num < 10:
# print(num,'小于10' )
# else:
# print(num, '不小于10')
# 三元表达式用法
res = '小于10' if num < 10 else '不小于10'
print(res)
# 嵌套使用 不推荐使用
res = '小于10' if num < 10 else (a = '等于10' if num == 10 else '大于10')
'''
三元表达式只用于二选一的情况 最好不要嵌套使用(语法不简洁)
'''
各种生成式
- 列表生成式
'''需求给指定用户tom绑定VIP'''
# 用户列表
name_list = ['jason', 'jimi', 'herr', 'tom', 'jerry']
# 定义变量名name并for循环列表 依次判断指定用户tom是否在列表中 再则绑定VIP
res = [name+'_VIP' for name in name_list if name == 'tom']
print(res) # ['tom_VIP']
# 除了tom之外的用户绑定SB
res = [name+'_SB' for name in name_list if name != 'tom']
print(res) # ['jason_SB', 'jimi_SB', 'herr_SB', 'jerry_SB']
- 字典生成式
'''需求:将以下两个列表分别制作成字典的键值'''
name_lt = ['tom', 'jimi', 'aili']
age_lt = [20, 18, 24]
'方式1 其他方法'
# 1.定义一个空字典
new_dict = {}
# 2.每次循环都要拿到两个列表中对应的元素(索引相等)
for i in range(len(name_lt)):
# 3.索引取值即可
new_dict[name_lt[i]] = age_lt[i]
print(new_dict) # {'tom': 20, 'jimi': 18, 'aili': 24}
'字典生成式'
# 用索引取值方式取对应的key 和value
res = {name_lt[i]: age_lt[i] for i in range(len(name_lt))}
print(res) # {'tom': 20, 'jimi': 18, 'aili': 24}
- 集合生成式
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 != 5}
print(res, type(res))
# {0, 1, 2, 3, 4, 6, 7, 8, 9} <class 'set'>
匿名函数
匿名函数的意思就是没有函数名,需要于其他函数一起结合使用匿名函数的定义
# lambda x:x+2
"""
结构:
lambda 形参:返回值
如果用普通函数来表示
def index(x):
return x + 2
"""
# print(lambda x:x+2)
# 求:薪资最高的人的姓名
info = {
'Tom': 100000,
'jimi': 10000,
'aili': 1000,
'berry': 100
}
# max:统计最大值
print(max(info)) # jimi
'''
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])) # Tom
常见重要内置函数
1.map映射
l1 = [11, 22, 33, 44, 55]
# 需求:元素全部自增10
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 = [1000, 100, 200, 2000, 300]
l2 = ['Tom', 'aili']
res = zip(l1,l2)
print(list(res)) # [(1000, 'Tom'), (100, 'aili')]
3.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))
4.reduce归总
'''需求:讲列表中所有的元素相加'''
l1 = [11, 22, 33]
res = reduce(lambda x, y: x + y, l1)
print(res) # 66 相当于((11+22)+33)
res = reduce(lambda x, y: x + y, l1, 100)
print(res) # 166 相当于((11+22)+33)+100
常见内置函数
1.abs()
'''取绝对值'''
print(abs(-10)) # 相当于数学中|-10|
print(abs(+10)) # 相当于数学中|+10|
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)) # 转为二进制 0b1100100
print(oct(100)) # 转为8进制 0o144
print(hex(100)) # 转为16进制 0x64
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!'
'''针对编码解码 可以使用关键字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) 第一个参数是整数部分 第二个是余数部分
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代码
本文来自博客园,作者:{Mr_胡萝卜须},转载请注明原文链接:https://www.cnblogs.com/Mr-fang/p/16042126.html