zoukankan      html  css  js  c++  java
  • 三元表达式、生成式和函数递归

    三元表达式

    1 语法风格

    • 条件成立时要返回的值 if 条件 else 条件不成立时要返回的值
    x=1
    y=2
    
    res=x if x > y else y
    print(res)
    
    res=111111 if 'egon' == 'egon' else 2222222222
    print(res)
    

    2 应用案例

    #三元表达式可直接做返回值
    def func(x,y):
        if x > y:
            return x
        else:
            return y
    
    def func(x,y):
        return x if x>y else y
    
    res=func(1,2)
    print(res)
    

    生成式

    1 列表生成式

    #需求:将l中的带有dsb字段的元素添加到新的列表中
    l = ['alex_dsb', 'lxx_dsb', 'wxx_dsb', "xxq_dsb", 'egon']
    new_l=[]
    for name in l:
        if name.endswith('dsb'):
            new_l.append(name)
    
    new_l=[name for name in l if name.endswith('dsb')]
    new_l=[name for name in l]
    
    print(new_l)
    
    # 把所有小写字母全变成大写
    new_l=[name.upper() for name in l]
    print(new_l)
    
    # 把所有的名字去掉后缀_dsb
    new_l=[name.replace('_dsb','') for name in l]
    print(new_l)
    

    2 字典生成式

    keys=['name','age','gender']
    dic={key:None for key in keys}
    print(dic)
    
    items=[('name','egon'),('age',18),('gender','male')]
    res={k:v for k,v in items if k != 'gender'}
    print(res)
    

    3 集合生成式

    keys=['name','age','gender']
    set1={key for key in keys}
    print(set1,type(set1))
    

    4 生成器表达式

    强调:

    直接使用生成器表达式创建一个生成器对象,在没有next之前,内部没有值

    g=(i for i in range(10) if i > 3)
    #!!!!!!!!!!!强调!!!!!!!!!!!!!!!
    #此刻g内部一个值也没有
    
    print(g,type(g))
    print(g)
    print(next(g))
    print(next(g))
    
    #计算文件中的字数总和
    with open('笔记.txt', mode='rt', encoding='utf-8') as f:
        # 方式一:
        # res=0
        # for line in f:
        #     res+=len(line)
        # print(res)
    
        # 方式二:
        # res=sum([len(line) for line in f])
        # print(res)
    
        # 方式三 :效率最高
        # res = sum((len(line) for line in f))
        # 上述可以简写为如下形式
        res = sum(len(line) for line in f)
        print(res)
    

    函数的递归调用

    1 递归的定义

    函数的递归调用:

    ​ 是函数嵌套调用的一种特殊形式

    具体是指:
    在调用一个函数的过程中又直接或者间接地调用到本身

    #直接调用本身
    def f1():
        print('是我是我还是我')
        f1()
    f1()
    
    #间接接调用本身
    def f1():
        print('===>f1')
        f2()
    
    def f2():
        print('===>f2')
        f1()
    

    2 递归的用途

    #一段代码的循环运行的方案有两种
    #方式一:while、for循环
    while True:
        print(1111)
        print(2222)
        print(3333)
    
    #方式二:递归的本质就是循环:
    def f1():
        print(1111)
        print(2222)
        print(3333)
        f1()
    f1()
    

    3 递归的基本要求

    ​ 递归调用不应该无限地调用下去,必须在满足某种条件下结束递归调用

    n=0
    while n < 10:
        print(n)
        n+=1
    
    def f1(n):
        if n == 10:
            return
        print(n)
        n+=1
        f1(n)
    
    f1(0)
    

    4 递归的两个阶段

    • 回溯:一层一层调用下去
    • 递推:满足某种结束条件,结束递归调用,然后一层一层返回
    age(5) = age(4) + 10
    age(4) = age(3) + 10
    age(3) = age(2) + 10
    age(2) = age(1) + 10
    age(1) = 18
    
    def age(n):
        if n == 1:
            return 18
        return age(n-1) + 10
    
    res=age(5)
    print(res)
    

    5 递归的应用

    l=[1,2,[3,[4,[5,[6,[7,[8,[9,10,11,[12,[13,]]]]]]]]]]
    
    def f1(list1):
        for x in list1:
            if type(x) is list:
                # 如果是列表,应该再循环、再判断,即重新运行本身的代码
                f1(x)
            else:
                print(x)
    
    f1(l)
    
  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/Henry121/p/12568507.html
Copyright © 2011-2022 走看看