三元表达式,仅应用于::
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