Python三元表达-内置函数

三元表示

'''使用场景:二选一的时候  推荐使用三元表达式'''
  # 编写一个求两个数大小的函数
    def index(a, b):
        if a > b:
             return a
        else:  # 可以省略
             return b
  # 如果用户名是jason则打印管理员  否则打印DDD
    username = input('username>>>:').strip()
    if username == 'jason':
        print('管理员')
    else:
        print('DDD')
  
  '''
      三元表达式
        值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 '上午')  # 不推荐
  """并不是代码写的最少干的事越多就与牛逼 还有一个前提>>>:简洁易读"""

   写一个电影系统 需要决定电影是否收费

   is_change = input('是否收费>>>:').strip()
   is_free = '收费' if is_change == 'y' else '免费'
   print(is_free)


  # 补充:针对if分支结构 也有简化版本(了解即可)
  '''子代码块都只有简单的一行情况下 也可以简写  没有三元表达式简单 但是也有人用'''

  name = 'jason'
  if name == 'jason': print(name)
  else: print('嘿嘿嘿')

各种生成式

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)

  # 列表生成式:该技术可以简化代码 也可以不用 无外乎写的复杂一点而已
   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]
  # 需求:将上述两个列表分别制作成字典的键值
  # 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))
  res = {i for i in range(10) if i != 2}
  print(res, type(res))

  """没有元组生成式 依据上述写法得到的时候后续我们要学习的知识:迭代器"""

匿名函数

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

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

    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映射

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

内置函数之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'
      打印出来的则是编码
    '''针对编码解码 可以使用关键字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)  第一个参数是整数部分 第二个是余数部分
     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代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lamb!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值