函数(五)

内容概要

  • 三元表达式
  • 各种生成式
  • 匿名函数
  • 常见重要的内置函数
  • 补充常见的内置函数

---------------------------------------------------------------------------------------------

三元表达式

三元表达式:一般的在二选一的时候通常我们会想到使用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')
    '''
    三元表达式只用于二选一的情况 最好不要嵌套使用(语法不简洁)
    '''

各种生成式

  1. 列表生成式
    '''需求给指定用户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']

  1. 字典生成式

    '''需求:将以下两个列表分别制作成字典的键值'''
    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}
  1. 集合生成式
    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代码

posted @ 2022-03-22 23:21  Mr_胡萝卜须  阅读(4)  评论(0编辑  收藏  举报