day13 函数三元表达式,递归

三元表达式,仅应用于::

1、条件成立返回一个值

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

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

进化

x=1
y=2
res=x if x > y else y

进化

def max2(x,y):
x if x > y else y
print(max2(10,11))
二、函数递归

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

(了解)python里递归最多1000次,可以sys.setrecursionlimit(次数)设置,但无意义
#直接调用
def foo():
  print('foo')
  foo()
  
foo()
#间接调用
def bar():
  print('bar')
  foo()
 
def foo():
  print('foo')
  bar()
  
foo()

#递归分两个阶段

1、回溯

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

2、递推

 

总结

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

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

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

age(3)=age(2)+2
age(2)=age(1)+2
age(1)=18
age(n)=age(n-1)+2 #n>1
age(n)=18
def age(n):
if n==1:
return 18
return age(n-1)+2

age(5)

#python 推崇的是简洁优美

循环解决的了为什么还要递归

while:满足条件循环一次,需要知道多少次

#10.41

匿名函数

def foo(x,n):
  return x ** n
#可以转换成
f=lambda x,n:x ** n
print(f(2,3))
print(f(2,4))

强调:

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

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

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

匿名函数自带return

lambda x,n:return x+n 相等 lambda x,n:x+n

f(1,2)

lambda 匿名行数的应用

#max,min,sorted,map,filter,reduce 相当于for循环,传入的值需是可迭代的

print(max(字典,key=自定义函数))

print(max(字典,key=lambda x:salaries[x]))

原理

for item in salaries:

item #告诉max,比较的依据,salaries[k]

nums=[1,11,9]

nums=sorted(nums)

print(nums)

salaries={'k':v}

sorted默认按照字典的键排序

salaries=salaries(nums,key=lambda x:salaries[x],reverse=True)

大概讲了3遍,后面走神没听(11:18)

#lambda与map,reduce,filter
nums=[1,2,3,4,5]
res=map(lambda x:x**2,nums)

#map

names=['alex','wupeiqi','yuanhao']
res=map(lambda x:x+'_sb',names)
print(list(res))
names=['alex','wupeiqi','yuanhao']
res=map(lambda x:x+'_NB' if x=='egon' else x + '_sb',names)
print(list(res))
from functools import reduce
reduce(lambda x,y: x+y,range(1,101),0)
print(res)

#reduce(了解)

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

#filter

names=['alex_sb','wxx_sb','yxx_sb','egon']
res=filter(lambda x: x.endswith('sb')  ,name)
print(list(res))
ages=[18,19,10,23,99,30]
res=filter(lambda n:n>=30,ages)
print(list(res))
info={
'egon1':18,
'egon2':28,
'egon3':38,
'egon4':48,
}

print(abs(-1))
print(all([1,'a',True]))==》true
print(all([1,'a',True,'']))==》false
print(all(''))==》true
但凡一个为真,整体为真
print(any(0,'',None,False))
print(any([]))

print(bin(11))
print(oct(11))
print(hex(11))
print(bool(0))  #0,None,空的布尔会为假

res='你好'.encode('utf-8')
res=bytes('你好'.encode('utf-8'))
print(res)

def func():
  pass
print(callabe())
加括号的就能调用

print(chr(65))
吧数字转成字母(ASCII表)
print(ord('A'))
吧字母转数字

print(divmod(10,3)) #前端分页功能

吧字符砖当成表达式拿到

值为什么一定会传给X

原文地址:https://www.cnblogs.com/shanjinghao/p/8694681.html