lambda 表达式(又名匿名函数)
作用:
创建一个匿名函数对象
同def类似,但不提供函数名
语法:
lambda [形参1,形参2....]:表达式 (即左为自变量,右为函数式)
示例:
def myadd(x,y):
return x+y
可以改写为:
myadd = lambda x,y:x+y (不用写return ,直接返回)
说明:1.lambda只是一个表达式,它用来创建一个函数对象
2.当lambda表达式调用时,先执行冒号后的表达式,并返回表达式结果的引用
3.lambda表达式创建的函数只能包含一种表达式
4.lambda比函数简单,并且可以随时创建和销毁,有利于减少程序的耦合度
fx = lambda x:not (x**2+1)%5 >>> fx(3) # 返回True >>>fx(5) # 返回False
eval 和 exec 函数
eval 函数:(express value)
作用:把一个字符串当成一个表达式执行,返回表达式执行后的结果
格式:eval(source(字符串),globals=None,locals=None)
示例:x = 100
y = 200
s = 'x+y'
v = eval(s)
print(v) >>>300
全局变量
print(eval('x+y',{'x':10,'y':20}))
>>>30
局部变量
print(eval('x+y',{'x':20,'y':30},{'x':100,'y':200}))
>>>300
print(eval('x+y',{'x':20,'y':30},{'x':100}))
>>>130
exec 函数:
作用:把一个字符串当做程序来执行
格式:exec(source(字符串),globals=None,locals=None)
示例:
s = 'x=100;print("hello");x += 1;print(x)'
(注意:此时单引号过多,注意区分,否则出错)
>>> exec(s)
hello
是指用一系列函数解决问题
函数是一等层次:
1.函数本身是对象,可以复制给变量,复制后变量绑定函数
2.允许将函数作为实参传入另一个函数
3.允许函数返回一个函数
函数式编程的好处:
1.每一个函数完成细小的功能,一系列子函数的任意组合可以完成大问题
2.函数仅接收输入并产生输出,不会影响其它全局变量的状态
高阶函数 HIgh Order Function
满足下列函数中的一个条件的函数即为高阶函数
1.函数接受一个或多个函数作为参数传入
2.函数返回一个函数
python内置(builtins)的高阶函数:
map,filter,sorted
map函数:
map(func,*iterables))
用函数对可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象
不再提供数据时,此可迭代对象生成结束。
示例:
(生成一个可迭代对象,要求此可迭代对象可以生成1~9自然数的平方)
一、
def power(x):
return x**2
for x in map(power,range(1,10))
print(x)
二、
for x in map(pow,[1,2,3,4],[4,3,2,1])
print(x)
********************************
pow函数:
pow(x,y,z=None)
等于 x**y (两个参数) 或 x**y % z (三个参数)。
练习:求 1**2+2**2+3**2...+9**2
1**3.......
1**9+2**8+......9**1
>>> def powe(x):
... return x ** 2
...
>>> print(sum(map(powe,range(1,10))))
或者:
print(sum(map(lambda x:x**2,range(1,10))))
print(sum(map(pow,range(1,10),range(9,0,-1))))
********************************
filter函数:
格式:filter(func,iterable)
作用:筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象对iterable进行筛选
函数func将对iterable中的每个元素进行求值,【返回False时将此数据丢弃,返回True,则保留此数据】。
示例: isodd函数判断x是否为奇数,是的话返回True
def isodd(x):
bool(not x % 2 == 0)
return bool()
********************************
sorted函数:
作用:将原来的可迭代对象数据进行排序,生成排序后的列表
格式:sorted(iterable,key=None,reverse=False)
参数说明:
iterable可迭代对象
函数会处理数据并给出顺序,最后排序完成的元素仍旧是原本的元素。
reverse标志用来设置是否降序排列
示例: L = [4,-2,5,0,1]
L2 = sorted(L) >>> L2 = [-2,0,1,4,5]
取绝对值:
>>> l=[2,10,-5,-3,5,8]
>>> l2 = sort(l,key = abs) #key连接的函数不能加()
********************************
递归函数 recursion:
函数直接或者间接的调用自身
示例:
直接调用自身
def f():
f() #调用自己
f()
print('递归完成’)
间接调用自身
def fa():
fb()
def fb():
fa()
fa()
说明:递归一定要控制递归的层数,当符合某一条件要终止递归
几乎所有递归都能用循环来代替
递归的优缺点:
优点:递归可以把问题简化,让路径更为清晰,代码更为简洁
缺点:递归受到系统环境影响很大,当递归深度太大,可能得到不可预期的结果。
示例:
自调用示例:
def story(times):
print('第',times,'遍')
print('老和尚讲故事:')
if times >= 3:
return
story(times + 1)
print('故事讲完了')
story(1)
#####详细解释
def fx(n):
print('现在在第',n,'层')
if n >= 5:
return
fx(n+1)
print('递归的第',n,'层结束')
fx(1)
print('end')
递归函数的实现方法:
先假设函数已经实现
作用:
创建一个匿名函数对象
同def类似,但不提供函数名
语法:
lambda [形参1,形参2....]:表达式 (即左为自变量,右为函数式)
示例:
def myadd(x,y):
return x+y
可以改写为:
myadd = lambda x,y:x+y (不用写return ,直接返回)
说明:1.lambda只是一个表达式,它用来创建一个函数对象
2.当lambda表达式调用时,先执行冒号后的表达式,并返回表达式结果的引用
3.lambda表达式创建的函数只能包含一种表达式
4.lambda比函数简单,并且可以随时创建和销毁,有利于减少程序的耦合度
fx = lambda x:not (x**2+1)%5 >>> fx(3) # 返回True >>>fx(5) # 返回False
fy = lambda x,y:x if x > y else y >>> fy(2,3) # 返回3 >>>fy(5,3) # 返回5
注意:此种方法命名函数,函数名后不能加括号,参数写在lambda后,调用则写fun(参数1,参数2...)
eval 和 exec 函数
eval 函数:(express value)
作用:把一个字符串当成一个表达式执行,返回表达式执行后的结果
格式:eval(source(字符串),globals=None,locals=None)
示例:x = 100
y = 200
s = 'x+y'
v = eval(s)
print(v) >>>300
全局变量
print(eval('x+y',{'x':10,'y':20}))
>>>30
局部变量
print(eval('x+y',{'x':20,'y':30},{'x':100,'y':200}))
>>>300
print(eval('x+y',{'x':20,'y':30},{'x':100}))
>>>130
exec 函数:
作用:把一个字符串当做程序来执行
格式:exec(source(字符串),globals=None,locals=None)
示例:
s = 'x=100;print("hello");x += 1;print(x)'
(注意:此时单引号过多,注意区分,否则出错)
>>> exec(s)
hello
101
是指用一系列函数解决问题
函数是一等层次:
1.函数本身是对象,可以复制给变量,复制后变量绑定函数
2.允许将函数作为实参传入另一个函数
3.允许函数返回一个函数
函数式编程的好处:
1.每一个函数完成细小的功能,一系列子函数的任意组合可以完成大问题
2.函数仅接收输入并产生输出,不会影响其它全局变量的状态
高阶函数 HIgh Order Function
满足下列函数中的一个条件的函数即为高阶函数
1.函数接受一个或多个函数作为参数传入
2.函数返回一个函数
python内置(builtins)的高阶函数:
map,filter,sorted
map函数:
map(func,*iterables))
用函数对可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象
不再提供数据时,此可迭代对象生成结束。
示例:
(生成一个可迭代对象,要求此可迭代对象可以生成1~9自然数的平方)
一、
def power(x):
return x**2
for x in map(power,range(1,10))
print(x)
二、
for x in map(pow,[1,2,3,4],[4,3,2,1])
print(x)
********************************
pow函数:
pow(x,y,z=None)
等于 x**y (两个参数) 或 x**y % z (三个参数)。
练习:求 1**2+2**2+3**2...+9**2
1**3.......
1**9+2**8+......9**1
>>> def powe(x):
... return x ** 2
...
>>> print(sum(map(powe,range(1,10))))
或者:
print(sum(map(lambda x:x**2,range(1,10))))
print(sum(map(pow,range(1,10),range(9,0,-1))))
********************************
filter函数:
格式:filter(func,iterable)
作用:筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象对iterable进行筛选
函数func将对iterable中的每个元素进行求值,【返回False时将此数据丢弃,返回True,则保留此数据】。
示例: isodd函数判断x是否为奇数,是的话返回True
def isodd(x):
bool(not x % 2 == 0)
return bool()
********************************
sorted函数:
作用:将原来的可迭代对象数据进行排序,生成排序后的列表
格式:sorted(iterable,key=None,reverse=False)
参数说明:
iterable可迭代对象
key绑定函数,此函数用来提供一个排序的依据
###注意:此处绑定的函数是针对列表中的每个元素单独处理的函数。函数会处理数据并给出顺序,最后排序完成的元素仍旧是原本的元素。
reverse标志用来设置是否降序排列
示例: L = [4,-2,5,0,1]
L2 = sorted(L) >>> L2 = [-2,0,1,4,5]
取绝对值:
>>> l=[2,10,-5,-3,5,8]
>>> l2 = sort(l,key = abs) #key连接的函数不能加()
********************************
递归函数 recursion:
函数直接或者间接的调用自身
示例:
直接调用自身
def f():
f() #调用自己
f()
print('递归完成’)
间接调用自身
def fa():
fb()
def fb():
fa()
fa()
说明:递归一定要控制递归的层数,当符合某一条件要终止递归
几乎所有递归都能用循环来代替
递归的优缺点:
优点:递归可以把问题简化,让路径更为清晰,代码更为简洁
缺点:递归受到系统环境影响很大,当递归深度太大,可能得到不可预期的结果。
示例:
自调用示例:
def story(times):
print('第',times,'遍')
print('老和尚讲故事:')
if times >= 3:
return
story(times + 1)
print('故事讲完了')
story(1)
#####详细解释
def fx(n):
print('现在在第',n,'层')
if n >= 5:
return
fx(n+1)
print('递归的第',n,'层结束')
fx(1)
print('end')
递归函数的实现方法:
先假设函数已经实现