二、函数
1. 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比函数简单且可以随时创建和销毁,有利于减少程序的耦合度.
2.eval和exec函数
eval函数:
作用:把一个字符串当成一个表达式执行,返回表达式执行的结果
格式:eval(source, globals = None, locals = None)
示例:
#示例
x = 100
y = 200
s = 'x+y'
v = eval(s)
print(v)
结果是:300
exec函数:
作用:把一个字符串当成程序来执行
格式:exec(source, globals = None, locals = None)
示例:
// 示例
s = 'x = 100; print("hello"); x += 1; print(x)'
print(s)
exec(s)
3.高阶函数(High Order Function)
满足下面函数中的一个的函数即为高阶函数 1.函数接受一个或多个函数作为参数传入 2.函数返回一个函数 python内置(builtins)的高阶函数:map、filter、sorted.map函数:
map(func, *iterables)用函数对可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象不再提供数据时,此可迭代对象生成结束。
示例:
# map函数
def myadd(x):
return x+1
for i in map(myadd, range(10)):
print(i)
filter函数:
格式:filter(func, iterable)
作用:筛选可迭代对象iterabel中的数据,返回一个可迭代对象,此可迭代对象将对iterable进行筛选。函数func将对iterable中的每个元素进行求值,返回False时将此数据丢弃,返回True,则保留此数据。
示例:
#isodd函数判断x是否为奇数,是奇数返回Ture
#filter函数
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标记用来设置是否降序排列(从大到小)
示例:
# sorted函数
L=[5, -2, -4, 0, 3, 1]
L2= sorted()
S='sha'
#反转
S[::-1]='ahs'
4.递归函数(recursion)
定义:函数直接或者间接调用自身
示例:#直接调用自身
# 递归函数
def fun():
fun()
fun()
递归说明:
递归一定要控制递归的层数,当符合某一个条件时要终止递归,几乎所有的递归都能用循环来替代。
递归的优缺点:
优点:递归可以把问题简单化,让路径更为清晰,代码更简洁。
缺点:递归因系统环境影响大,当递归深度太大时,可以会得到不可预知的结果。
5.闭包(closure)
定义:将组成函数的语句和这些语句的执行环境打包在一起后,得到的函数对象称为闭包(closure)。
闭包必须满足以下三个条件:
1.必须有一个内嵌函数
2.内嵌函数必须引用外部函数中的变量。
3.外部函数返回值必须是内嵌函数
示例:
# 闭包
def fun1(y):
def fun2(x):
return x+y
return fun2
print(fun1(1)(2))
说明:如果一个内嵌函数访问了外部嵌套函数作用域内的变量,则这个内嵌函数就是闭包。
6.装饰器(decorators)
定义:装饰器是一个函数,这个函数的主要作用是包装一个函数或者类,包装的目的是在不改变原函数名的情况下改变被包装对象的行为。
示例:
# 装饰器的应用
def myfun(fn):
def myff():
print("hello world")
return myff
@myfun
def mycc():
print("I am a girl")
mycc()
#装饰器zhuangshiqi.py
def pri_check(fn):
def fx(nam, m):
print("正在鉴权")
fn(nam, m)
return fx
@pri_check
def save_money(name, x):
print(name, "正在存", x, "元钱")
def withdraw(name, x):
print(name, "取出", x, "元钱")
save_money("xiaowang", 500)
save_money("xiaosu", 300)