一、函数赋值给变量
函数也是对象,也可以赋值给变量,当把函数赋值给变量后,可以通过变量调用函数。
例:
def test(x,y): return x * y # 把函数赋值给变量 a = test print (a) # 打印 <function test at 0x00000000030187B8> # 通过变量调用函数 print (a(2,3)) # 打印 6 # 把函数的返回值赋值给b b = test(4,5) print (b) # 打印 20
上面例子中,可以看出a = test 和a = test(4,5)的区别,a = test属于把变量指向函数,此时调用test(2,3)和调用变量a(2,3)完全一样;a = test(4,5)属于变量a接收了test(4,5)的返回值,如果test(4,5)没有返回值的话,a=None,而且在执行a = test(4,5)这个过程中,test(4,5)也执行了一次。
二、用函数作为函数形参
先看一段简单的代码:
def test(x,y): a = x + y return 2 * a
当编写程序的时候,由于上面代码中x + y会经常变化,这时候可以把其中经常变化的逻辑分离出去,这时候就需要用函数作为函数的形参。
例:
def subtraction(x,y): return x - y def addition(x,y): return x + y def double(n): return 2 * n # 下面代码分别使用subtraction()和addition()函数返回值作为double()的参数,从而动态改变这段代码 # 相加后乘以2 print (double(addition(2,3))) # 打印 10 # 相减后乘以2 print (double(subtraction(6,2))) # 打印 8
三、使用函数作为返回值
Python可以使用函数作为其他函数的返回值。
例:
def num(fn): def subtraction(x,y): return x - y def addition(x,y): return x + y # 返根据fn参数的值,回局部函数 if fn == 'subtraction': return subtraction else: return addition # 当调用num()函数时,返回一个嵌套函数 a = num('subtraction') # 也可以这样写 print (num('subtraction')(5,1)) print (a(5,2)) # 打印 3 b = num('addition') print (b(2,4)) # 打印 6
上面代码中,定义了num()函数,该函数返回该函数局部函数中的其中一个,num()函数内分别定义了subtraction()和addition()两个局部函数,num()函数会根据传入的参数,选择两个局部函数中的其中一个作为返回值。
四、lambda表达式
使用lambda表达式,可以使代码更加简洁,lambda表达式可以在程序中被调用和传递。
lambda表达式语法格式如下:
lambda [参数列表] : 表达式
如第三小点中的代码,就可以使用lambda表达式简化局部函数,例:
# 原来的代码 def num(fn): def subtraction(x,y): return x - y def addition(x,y): return x + y if fn == 'subtraction': return subtraction else: return addition # 简化后的代码 def num(fn): if fn == 'subtraction': return lambda x , y : x - y else: return lambda x , y : x + y print (num('subtraction')(5,2)) # 打印 3 print (num("abc")(5,2)) # 打印 7
上面简化后的代码中,使用lambda关键字定义的就是lambda表达式,这里需要注意的是,lambda表达式只能是单行表达式,且必须使用lambda关键字去定义。lambda表达式在使用完之后会立即释放,提高性能。