zoukankan      html  css  js  c++  java
  • 三元运算符、推导式、递归、匿名函数

    一、三元运算符

    • 三目(元)运算符:就是 if...else...语法糖
    • 前提:简化if...else...结构,且两个分支有且只有一条语句
    • 注:三元运算符的结果不一定要与条件直接性关系
    cmd = input('cmd: ')
    print('可以转化为数字') if cmd.isdigit() else print('不可以转化为数字')
    # 案例:得到两个数大值
    a = 20
    b = 30
    res = a if a > b else b  # 求大值
    print(res)
    
    # 三元运算符的结果不一定要与条件直接性关系
    res = 'b为小值' if a > b else 'a为小值'  # 求小值
    print(res)
    案例

    二、推导式

    • 列表推导式:[v for v in iterable]
    dic = {'a': 1, 'b': 2, 'c': 3}  # => [('a', 1), ('b', 2), ('c', 3)]
    res = [(k, v) for k, v in dic.items()]
    • 字典推导式:{k: v fro k, v in iterable}
    ls = [('a', 1), ('b', 2), ('c', 3)]  # => {'a': 1, 'b': 2, 'c': 3}
    res = {k: v for k, v in ls}
    # 案例
    # range(10)  # 可以被推导为列表
    res_ls = [arg for arg in range(10)]
    print(res_ls)
    res_dic = {'a': arg for arg in range(10)}
    print(res_dic)
    
    # 迭代出可解压为的单列容器可以推导出字典
    res_dic = {v: k for k, v in enumerate('abc')}
    print(res_dic)
    案例

    四、递归

    • 递归:回溯与递推 
    • 回溯:询问答案的过程
    • 递推:推出答案的过程
    • 本质:函数的自我调用
    • 直接:自己调自己
    • 间接:自己调别人,别人最终由调回自己
     #递归本质:函数的自我调用(自己调自己)
     import sys
     sys.setrecursionlimit(100)  # 手动设置递归深度
     print(sys.getrecursionlimit())  # 默认1000
    
     count = 0
     #自己调自己
     def a():
         global count
         count += 1
         if count > 50:
             return
         a()
     a()
    # 询问第一个人年龄,回溯条件 小两岁,第五个人说出自己的年龄,推导出第一个人年龄
    # 条件:下一个人的年龄比这个人年纪大两岁
    def get_age(num):  # 得到年龄
        if num == 1:
            return 58
        age = get_age(num - 1) - 2
        return age
    res = get_age(5)
    print(res)
    
    
    # 阶乘
    # 5! = 5 * 4!    4! = 4 * 3!   ...   2! = 2 * 1
    def factorial(num):
        if num == 1:
            return 1
        temp = num * factorial(num - 1)
        return temp
    res = factorial(5)
    print(res)
    案例

    五、匿名函数

    • 匿名函数:没有函数名
    • 语法:lambda 参数列表: 一个返回值表达式

    重点:

    • 匿名函数:没有函数名,没有函数体,只有一个返回值
    • 关键字:lambda  |  参数列表省略()  |  返回值return关键字也被省略
    f = lambda x, y: (x + y, x - y)
    print(f)
    print(f(10, 20))

    应用场景:

    • 匿名函数函数地址可以被一个变量接受,该变量就可以作为函数名来使用,但就违背了匿名初衷
    • 结合内置函数来使用: 内置函数某些参数需要一个函数地址,
    • 可以赋值一个有名函数名,也可以直接赋值匿名函数
    def fn(arg):
        print(arg)
        return arg
    
    ls = [100, 200, 50, 10]
    res = max(ls, key=fn)
    print('------------------------')
    print(res)
    
    res1 = max(ls, key=lambda ele: ele)
    print(res1)

    六、内置函数

    https://docs.python.org/zh-cn/3.7/library/functions.html#all

    # 递归:回溯与递推 # 回溯:询问答案的过程# 递推:推出答案的过程
    # 本质:函数的自我调用# 直接:自己调自己# 间接:自己调别人,别人最终由调回自己

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/wangyisen/p/10657534.html
Copyright © 2011-2022 走看看