生成式与内置函数

三元表达式


      def index(a, b):
          print(a) if a > b else print(b)


      index(11, 21)

      # 获取输入判断
      choice = input('是否继续(y/n)>>').strip()
      print('继续') if choice == 'y' else (print('退出') if choice == 'n' else print('他喵的,输错了'))
      # 不推荐嵌套使用

      # if else 分支结构如果子代码是只有一行时,也可简写


      def index(a, b):
          if a > b : print(a)
          else : print(b)  # 不服从PEP8规范

列表生成式

      name_list = {'oliver', 'jason', 'kevin'}
      res = [name+'_DSG' for name in name_list]
      print(res)

      # 可以加执行条件
      name_list = {'oliver', 'jason', 'kevin'}
      res = [name+'_DSG' for name in name_list if name != 'jason']
      print(res)

字典生成式

      name_list = ['oliver', 'jason', 'kevin']
      res = {flag[i]:name_list[i] for i in range(len(flag))}
      print(res)

      # 可加执行条件
      flag = ['DSG', 'XSG', 'DSB']
      name_list = ['oliver', 'jason', 'kevin']
      res = {flag[i]:name_list[i] for i in range(len(flag)) if i != 1}
      print(res)

集合生成式

      name_list = ['oliver', 'jason', 'kevin']
      res = {i for i in name_list}
      print(res)

      name_list = ['oliver', 'jason', 'kevin']
      res = {i for i in name_list if i != 'jason'}
      print(res)

匿名函数

      '''
      顾名思义,没有函数名的函数就是匿名函数,需要配合其他函数使用
      基本结构
              lambda 形参:返回值
      '''

      lambda x: x + 2

      # 获取字典内部最大的值数据
      info = {
          'Aason': 9999999,
          'Jacob': 123,
          'zark': 1000,
          'berk': 33
      }


      def index(k):  # 获取key键
          return info[k]  # 返回对应的值


      print(max(info, key=index))  # 筛选最大的值并返回对象的key键
      print(max(info, key=lambda key:info[key]))  # 使用匿名函数更简单

重要内置函数

      # 1.内置函数之 map映射
      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拉链
      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归总
      '''以前是内置函数 现在是某个模块下面的子函数(后面讲)'''
      from functools import 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

常见内置函数

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

      # 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))
      print(oct(100))
      print(hex(100))

      # 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!'

      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()

      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)


      # 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-23 21:39  Oliver-Chance  阅读(33)  评论(0编辑  收藏  举报