三元表达式,递归,

三元表达式

三元表达式仅应用于:

1.条件成立返回一个值

2、条件不成立返回一个值。

若一般函数表达如下

比大小:

def max2(x,y):
    if x>y:
        returrn x
    else:
        return y
res=max2(10,11)
print(res)

若我们用三元表达式表达:

def max2(x,y):
    return x if x> y else y
print(max2(10,11)

由此对比 三元表达式

就会比一般函数表达简单 不复杂, 由之前的几行代码 最后3行代码搞定

二、函数的递归:

函数的递归调用,即在函数调用的过程中,又直接或间接的调用了函数的本身

直接调用:
def foo():
    print(‘from foo‘)
    foo()
foo()

直接调用
第一层结束foo(). 需要第2层代码块里的foo()结束,而第二层结束又需要冲洗调用foo()。。。。。以此类推 。。  死循环。
这个主要是讲 第一层结束 需要第二层给出结果, 第二层结束需要第三层给出结果, 直至给个结果出来 (结束回溯)才会重新反馈给上一层,然后由上一层的结果在返回给上上一层, 以此类推。直至调用的函数有了结果
间接调用
def bar():
    print(‘from bar‘)
    foo()

def foo():
    print(‘from foo‘)
    bar()

foo()

原理同上,调用foo()  在运行foo()代码块 需要调用bar()由bar ()的 结果来给到foo(),在运行bar()代码块时也会调用foo(), 由foo()的结果来给到bar().  虽然这个也是一个死循环。但是能很清楚的讲述递归 含义

递归:

递归分为两个阶段:

1:回溯:

注意:一定要在满足某种条件结束回溯,否则的会无限递归

2、递推

总结:

1、递归一定要有一个明确的结束条件

2、每进入下一次递归,问题的规模都应该减少

3、在python中没有尾递归优化

完整的递推

age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=18

def age(n):

    if n ==1:
        return 18
    return age(n-1)+2

age(5)

print(age(5))
#打印结果 26

小练习

要求把列表里每个元素都打印出来
items=[1,[2,[3,[4,[5,[6,[7,[8,]]]]]]]]
def tell(l):
    for item in l:
        if type(item) is not list:
            print(item)
        else:
            tell(item)
tell(items)

匿名函数:

匿名函数:没有名字,一次性使用, 随时定义

有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能

强调:

1、匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的

2 、匿名函数的参数规则,作用域关系与有名函数是一样的

3、匿名函数的函数体通常应该是一个表达式,该表达时必须要有一个返回值

匿名函数(lambda)应用:lambda x:代码块 ,nums     nums   是给前面的代码块赋值的

salaries={
    ‘egon‘:3000,
    ‘alex‘:100000000,
    ‘wupeiqi‘:10000,
    ‘yuanhao‘:2000
}
def get(k):
    return salaries[k]
print(max(salaries,key=lambda x:salaries[x]))
#key=lambda x:salaries[x]   这个是出薪资最高的那个人的名字 而不是字典里key 的名字按照字母顺序 比出高低
lambda x:salaries[x] 这就是一个匿名函数 比完就可以不用再用直接扔掉

print(min(salaries,key=lambda x:salaries[x]))打印结果 yuanhao

与sorted连用   排序

salaries={
    ‘egon‘:3000,
    ‘alex‘:100000000,
    ‘wupeiqi‘:10000,
    ‘yuanhao‘:2000
}

salaries=sorted(salaries)
print(salaries)#[‘alex‘, ‘egon‘, ‘wupeiqi‘, ‘yuanhao‘]
                #默认按照字典的键的大小排序,不是按照工资高低排序

salaries=sorted(salaries,key=lambda x:salaries[x])print(salaries)#[‘yuanhao‘, ‘egon‘, ‘wupeiqi‘, ‘alex‘]  这个是按照升序的方式排列

salaries=sorted(salaries,key=lambda x:salaries[x],reverse=True) #降序# print(salaries)    # 这个是按照降序的方式排列###打印结果[‘alex‘, ‘wupeiqi‘, ‘egon‘, ‘yuanhao‘]

与map 连用  映射关系

求出下列列表元素的平方并组成个列表
nums=[1,2,3,4,5]
res=map(lambda x:x**2,nums)
print(list(res))
#打印结果  [1, 4, 9, 16, 25]
把下面所有人的名字户后面都加上‘_SB‘names=[‘alex‘,‘wpeiqi‘,‘yuanhao‘]
res=map(lambda x:x+‘_SB‘,names)
print(list(res))
#打印结果 [‘alex_SB‘, ‘wpeiqi_SB‘, ‘yuanhao_SB‘]
下面名字中egon 后面加上_NB ,其他加_SB。这里要用到三元表达式与匿名函数的结合使用
names=[‘alex‘,‘wpeiqi‘,‘yuanhao‘,‘egon‘]
res=map(lambda x:x+‘_NB‘ if x==‘egon‘ else x+‘_SB‘,names)
print(list(res))

打印结果[‘alex_SB‘, ‘wpeiqi_SB‘, ‘yuanhao_SB‘, ‘egon_NB‘]

reduce 合并,与 from   functools import reduce 连用

from functools import reduce
l=[‘my‘,‘name‘,‘is‘,‘alex‘,‘alex‘,‘is‘,‘sb‘]
res=reduce(lambda x,y:x+‘ ‘+y,l)
print(res)

#打印结果 my name is alex alex is sb

filter 过滤

将名字中没有sb结尾的名字过滤掉names = [‘ales_sb‘,‘wxx_sb‘,‘yxx_sb‘,‘egon‘]
res=filter(lambda x:True if x.endswith(‘sb‘) else False,names )
print(list(res))

#打印结果 [‘ales_sb‘, ‘wxx_sb‘, ‘yxx_sb‘]  将egon 过滤掉
选出年龄超过30岁以上的年龄

ages=[18,19.25,33,50,99]
res=filter(lambda  x:x>30,ages)
print(list(res))

#[33, 50, 99]
salaries ={
    ‘egon‘:3000,
    ‘alex‘:100000000,
    ‘wupeiqi‘:10000,
    ‘yuanhao‘:2000
}

res=filter(lambda k:salaries[k]>10000,salaries)
print(list(res))
#打印结果# [‘alex‘]

原文地址:https://www.cnblogs.com/lx3822/p/8696197.html

时间: 2024-09-28 18:20:26

三元表达式,递归,的相关文章

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

一 三元表达式.列表推导式.生成器表达式 1.三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推导式 #1.示例 egg_list=[] for i in range(10): egg_list.append('鸡蛋%s' %i) egg_list=['鸡蛋%s' %i for i in range(10)] #2.语法 [expression for item1 in iterabl

函数之三元表达式,递归,匿名函数,内置函数

三元表达式 条件成立会返回一个值,不成立会返回一个值 def func(x,y): if x>y: return x else: return y res=x if x > y else y #三元表达式 print(res) 列表推导式,生成器表达式 # 列表推导式egg_list=[] for i in range(10): egg_list.append('鸡蛋%s' %i) egg_list=['鸡蛋%s' %i for i in range(10)] # 将列表推导式的 [ ]  换

4/2 三元表达式/函数递归/匿名函数/内置函数

三元表达式 def max2(x,y) if x > y: return x else return y res=max2(10,11) 三元表达式仅应用于: 1 条件成立返回一个值 2 条件不成功返回一个值 def max2(x,y): return x if x>y else y print (max2(2,10)) 10 函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数的本身. 直接调用 def foo(): print ('fffff') foo() 间接调用

三元表达式、递归、二分法、匿名函数、内置函数

三元表达式: def max2(x,y): if x>y: return x else: return y res=max2(10,11) print(res) x=10 y=11 三元表达式仅应用于: 1.条件成立返回一个值 2.条件不成立返回一个值 res=x if x>y else y print(res) def max2(x,y): return x if x>y else y print(max2(10,11)) 函数的递归.二分法 函数递归:函数的递归调用,即在函数调用的过

递归/匿名函数/三元表达式/列表生成式/字典生成式/二分算法

让在下揭开尔等的面纱,一探究竟:) >>>递归: 递归是一个往复的过程,也就是由两个过程组成,一个是计算过程,一个是将值层层返回的过程,递归的奇妙之处,就在于自身调用自身,然后,过程遵循由复杂到简单,最终满足相应条件后,退出,返回结果.说了一大堆,不过直接上代码: test_list = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]] res = 0 def sum_list(test_list, res): f

十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数

一.函数递归: 函数的递归:函数在调用阶段直接或间接的又调用自身 递归分为两个阶段 1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降 直到有一个最终的结束条件 2.递推:一次次往回推导的过程 3.递归函数在运行过程中一定要有出口,否则会无限循环下去 # 1.求4以内的和: def sum_numbers(num): if num == 1: return 1 return num + sum_numbers(num - 1) # 递归特点:函数内部自己调用

函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法

1 递归函数 函数在调用阶段,直接或间接的调用了自身 递归函数不应该一直递归下去,我们不考虑它到底循环多少次,我们只考虑它的结束条件 递归函数分为两个阶段 1 回溯:就是一次次重复的过程,这个重复的过程,每一次都应该比上一次简单 2 地推:一次次往回推导的过程 2 二分法 可以在一个有序的序列,快速的查找一个元素: b = [1,2,3,4,5,6] a = 3 def func(l,n): if not l: return ret = len(l) // 2 if n > l[ret]: li

叠加多个装饰器、yield表达式、三元表达式、生成式、函数的递归

叠加多个装饰器 # 一.叠加多个装饰器的加载.运行分析(了解***) # def deco1(func1): # func1 = wrapper2的内存地址# def wrapper1(*args,**kwargs):# print('正在运行===>deco1.wrapper1')# res1=func1(*args,**kwargs)# return res1# return wrapper1 # def deco2(func2): # func2 = wrapper3的内存地址# def