lambda 表达式(匿名函数表达式)
作用:
创建一个匿名函数对象
同def类似,但不提供函数名
语法:
lambda [形参1,形参2,...]:表达式
示例:
def myadd(x,y):
return x + y
可以改写为:
myadd = lambda x, y: x + y
说明:
1.lambda只是一个表达式,它用来创建一个函数对象
2.当lambda表达式调用时,先执行冒号后的表达式,并返回表达式的结果的引用
3.lambda表达式创建的函数只能包含一条表达式
4.lambda比函数简单,且可以随时创建和销毁,有利于减少程序的偶合度
eval 和 exec 函数
eval 函数:
作用:
把一个字符串当成一个表达式执行,返回表达式执行后的结果
格式:
eval(source,globals=None,locals=None)
示例:
x=100
y=200
s="x+y"
v=eval(s)
print(v)
exec 函数:
作用:
把一个字符串当做程序来执行
格式:
exec(source,globals=None,local=None)
示例:
s='x=100;print("hello");x+=1;print(x)'
print(s)
exec(s)
函数式编程:
是指用一系列函数解决问题
函数是一等公民
1.函数本身是对象,可以赋值给变量,赋值后变量绑定函数
2.允许讲函数作为实参传入另一个函数
3.允许函数返回一个函数
函数式编程的好处:
1.每一个函数完成细小的功能,一系列子数的任意组合可以解决大的问题
2.函数仅接受输入并产生输出,不会影响其他全局变量的状态
思考:
求1+2+3+...+n的和
print(sum(range(n+1)))
高阶函数 High Order Function
什么是高阶函数:
满足一个条件即为高阶函数
1.函数接受一个或多个函数作为参数传入
2.函数返回一个函数
python内置(builtins)的高阶函数:
map,filter,sorted
map 函数:
map(func,*iterables)
用函数对可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象不再提供数据时,此可迭代对象生成结束
示例:
#生成一个可迭代对象,要求次迭代对象可以生成1~9自然数的平方
def power2(x):
return x**2
for x in map(power2,range(1,10)):
print(x)
#1**4,2**3,3**2,4**1
for x in map(pow,[1,2,3,4],[4,3,2,1]):
print(x)
filter 函数:
格式:
filter(func,iterable)
作用:
筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象将对iterable中的每个元素进行求值,返回Flase时将此数据丢弃,返回True,则保留此数据
示例:
# isodd函数判断x是否为奇数,是奇数返回True否False
def isodd(x):
return x % 2==1
#打印10以内的奇数
for x in filter(isodd,range(10)):
print(x)
sorted 函数:
作用:
将原可迭代对象的数据进行排序,生成排序后的列表
格式:
sorted(iterable,key=None,reverse=False)
参数说明:
iterable 可迭代对象
key 绑定函数,此函数用来提供一个排序的依据
reverse 标志用来设置是否将序排序(从小到大)
示例:
L=[5,-2,-4,0,3,1]
L2=sorted(L) #L2 = [-4,-2,0,1,3,5]
递归函数 recursion
函数直接或间接的调用自身
示例:
#直接调用自身
def f():
f() #调用自己
f()
print("递归完成")
#间接调用自身
def fa():
fb()
def fb():
fa()
fa()
递归说明:
递归一定要控制递归的层数,当符合某一条件时要终止递归,几乎所有的递归都能用循环来代替
递归的优缺点:
优点:
递归可以把问题简单化,让路径更为清晰,代码更为简洁
缺点:
递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果
示例:
count = 0
def story():
if count>5:
print("故事讲完了")
return
print("从前有座山,山前有座庙,庙里有个老和尚讲故事")
print("讲的什么捏?")
count+=1
story()
story()
递归函数的实现方法:
先假设函数已经实现
示例:
求:100+99+98+...+1的和
分析:
先假设mysum(x)已经完成 且能求
x+(x-1)+...+1的和
def mysum(x):
#先判断终止条件
if x==1:
return 1
return x + mysum(x-1)
print(mysum(100))