函数补充和常见的内置函数

函数

三元表达式

图片名称

例子一

# 二选一的场景使用三元表达式更简洁
# 常用方法
nationality = input('请输入你的国籍>>>:')
if nationality == '中国':
    print('龙的传人')
else:
    print('外国友人')
# 三元表达式
nationality = input('请输入你的国籍>>>:')
res = '龙的传人' if nationality == '中国' else '外国友人'
print(res)

例子二

# 常用方法
def two_min(x, y):
    if x > y:
        print(y)
        return y
    else:
        print(x)
        return x


two_min(55, 66)


# 三元表达式
def two_min(x, y):
    res = x if x < y else y
    print(res)


two_min(88, 699)
图片名称

多种生成式

列表生成式

country_list = ['japan', 'italy', 'germany', 'france', 'canada', 'north korea']
'''要求:将列表中所有的国家名后面加上_capitalist'''
# 常见方式
# 创建一个空列表
new_list = []
# for循环列表获取每一个国家名
for item in country_list:
    # 字符串末位拼接_capitalist
    res = f'{item}_capitalist'
    # 添加到新的列表中
    new_list.append(res)
print(new_list)
# 列表生成式
# 列表生成式可以简化代码
res = [item+'_capitalist' for item in country_list]
print(res)
# 列表生成式还具备筛选能力
res = [item+'_capitalist' for item in country_list if item == 'germany']
print(res)
res = [item+'_capitalist' for item in country_list if item != 'north korea']
print(res)

字典生成式

l1 = ['name', 'age', 'height', 'hobby']
l2 = ['Jayce', 22, '188cm', 'swim']
# 要求:将上述两个列表分别制作成字典的键值
# 常规方法
# 定义一个空字典
new_dict = {}
# for循环取值
for i in range(len(l1)):
    # 按照索引通过键添加
    new_dict[l1[i]] = l2[i]
print(new_dict)  # {'name': 'Jayce', 'age': 22, 'height': '188cm', 'hobby': 'swim'}
# 字典生成式
res = {l1[i]: l2[i] for i in range(len(l1))}
print(res)  # {'name': 'Jayce', 'age': 22, 'height': '188cm', 'hobby': 'swim'}
res = {l1[i]: l2[i] for i in range(len(l1)) if i != 3}
print(res)  # {'name': 'Jayce', 'age': 22, 'height': '188cm'}

集合生成式

res = {i for i in range(20)}
print(res, type(res))  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19} <class 'set'>
res = {i for i in range(20) if i % 3 != 0}
print(res, type(res))  # {1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19} <class 'set'>
图片名称

匿名函数

# 统计最大值
salary_info = {
    'jack': 5000,
    'pony': 4000,
    'tom': 1000,
    'zoe': 1500,
    'annie': 2500
}
# 要求:统计出薪资最高的人的姓名
print(max(salary_info))  # zoe
'''
max底层可以看成是for循环依次比较,针对字典默认只能获取到k
获取到k之后如果是字符串的英文字母,就按照ASCII码表转成数字比较
    A~Z:65-90
    a~z:97-122
'''


def my_max(a):
    return salary_info[a]


print(max(salary_info, key=my_max))  # jack

# 上述代码可以用匿名函数简写
print(max(salary_info, key=lambda key: salary_info[key]))  # jack

常见的内置函数

常见重要内置函数

一、内置函数之map映射

l1 = [11, 22, 33, 44, 55, 66, 77]

# 需求:元素全部乘以5
# 方式1:列表生成式
l2 = [item * 5 for item in l1]
print(l2)


# 方式2:内置函数
def index(n):
    return n * 5


res = map(index, l1)
print(res)  # <map object at 0x000001AA3370A320>
print(list(res))  # [55, 110, 165, 220, 275, 330, 385]
res = map(lambda x: x * 5, l1)
print(list(res))  # [55, 110, 165, 220, 275, 330, 385]
图片名称

三、内置函数之zip拉链

l1 = ['001', '002', '003', '004']
l2 = ['tom', 'jack', 'sam', 'michael']
# 需求:将两个列表中的元素一一对应成对即可
res = zip(l1, l2)  # <zip object at 0x000001E444599748>
print(res)  # 用list可转换成列表
print(list(res))  # [('001', 'tom'), ('002', 'jack'), ('003', 'sam'), ('004', 'michael')]
'''zip可以整合多个数据集'''
l1 = ['001', '002', '003', '004']
l2 = ['tom', 'jack', 'sam', 'michael']
l3 = [1, 2, 3, 4]
l4 = [55, 66, 77, 88]
res = zip(l1, l2, l3, l4)
print(list(res))  # [('001', 'tom', 1, 55), ('002', 'jack', 2, 66), ('003', 'sam', 3, 77), ('004', 'michael', 4, 88)]
# 使用列表生成式
res1 = [(l1[i], l2[i], l3[i], l4[i]) for i in range(len(l1))]
print(res1)  # [('001', 'tom', 1, 55), ('002', 'jack', 2, 66), ('003', 'sam', 3, 77), ('004', 'michael', 4, 88)]
'''zip在数据集之间个数不一致时,按照短的整合'''
l1 = ['001', '002', '003', '004']
l2 = ['tom', 'jack']
res = zip(l1, l2)
print(list(res))  # [('001', 'tom'), ('002', 'jack')]

三、内置函数之filter过滤

l1 = [111, 222, 333, 444, 555, 666]
'''需求:筛选出小于300的元素'''


# 方式1:列表生成式
# 方式2:内置函数
def index(x):
    return x < 300


res = filter(index, l1)
print(list(res))  # [111, 222]
res = filter(lambda x: x < 300, l1)
print(list(res))  # [111, 222]

四、内置函数之reduce归总

from functools import reduce

l1 = [111, 222, 333, 444, 555]


# 需求:将列表中所有的元素相加
def index(x, y):
    return x + y


res = reduce(index, l1)
print(res)  # 1665
res = reduce(lambda x, y: x + y, l1)
print(res)  # 1665
res = reduce(lambda x, y: x + y, l1, 666)
print(res)  # 2331
图片名称

内置函数补充

# 1.abs()  获取绝对值(不考虑正负号)
print(abs(-123456))
print(abs(123456))

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

# 3.bin() oct() hex()  转换为对应的进制数
print(bin(1000))  # 0b1111101000
print(oct(1000))  # 0o1750
print(hex(1000))  # 0x3e8

# 4.bytes()  类型转换
s1 = 'One thing I know,that is I know nothing,我所知道的一件事就是我一无所知'
# 编码
res = bytes(s1, 'utf8')
print(
    res)  # b'One thing I know,that is I know nothing\xef\xbc\x8c\xe6\x88\x91\xe6\x89\x80\xe7\x9f\xa5\xe9\x81\x93\xe7\x9a\x84\xe4\xb8\x80\xe4\xbb\xb6\xe4\xba\x8b\xe5\xb0\xb1\xe6\x98\xaf\xe6\x88\x91\xe4\xb8\x80\xe6\x97\xa0\xe6\x89\x80\xe7\x9f\xa5'

# 解码
res1 = str(res, 'utf8')
print(res1)  # One thing I know,that is I know nothing,我所知道的一件事就是我一无所知


# 5.callable()  判断当前对象是否可以加()调用
res = input('>>>:')


def index():
    pass


print(callable(res))  # False  变量名不能加括号调用
print(callable(index))  # True  函数名可以加括号调用

# 6.chr()、ord()  字符与数字的对应转换
print(chr(98))  # b  根据数字转字符,依据ASCII码
print(ord('S'))  # 83  根据字符转数字,依据ASCII码

# 7.dir()  查看数据类型可以调用的内置方法
print(dir(88.88))
print(dir('welcome'))

# 8.divmod()
print(divmod(808, 20))  # (40, 8)
print(divmod(800, 20))  # (40, 8)
print(divmod(799, 20))  # (39, 19)
print(divmod(800, 33))  # (24, 8)


def get_page_num(total_num, page_num):
    num, others = divmod(total_num, page_num)
    if others:
        num += 1
    print(f'一共需要{num}')  # 一共需要46


get_page_num(999, 22)

# 9.enumerate()  枚举
name_list = ['jayce', 'tom', 'sam', 'johnson']
for item in name_list:
    print(item)

for i, j in enumerate(name_list):
    print(i, j)  # i类似于是计数,默认从0开始

for i, j in enumerate(name_list, start=2):
    print(i, j)  # 第二个参数可以控制起始位置

# 10.eval() exec()  识别字符串中的python代码
print("input('>>>:')")
eval("input('>>>:')")
exec("input('>>>:')")
res = """
for i in range(5):
    print(i * 5)
"""
exec(res)
图片名称
posted @ 2022-03-22 19:09  一梦便是数千载  阅读(55)  评论(0编辑  收藏  举报