一、函数赋值给变量

函数也是对象,也可以赋值给变量,当把函数赋值给变量后,可以通过变量调用函数。

例:

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表达式在使用完之后会立即释放,提高性能。

最新文章

  1. Node聊天程序实例01
  2. Could not find result map com.lrlz.weixin.dao.SysUserDAO.SysUser
  3. 贴图在Unity中的设置
  4. python数据库操作pymysql
  5. 浅谈 cookie 和 session
  6. java操作spark1.2.0
  7. 欢迎CSDN-markdown编辑
  8. centos6.5 64位 openvpn安装配置(转)
  9. 拥抱大家庭,nodejs走thrift
  10. python 开发利器
  11. python _winreg模块
  12. vue组件里定时器销毁问题
  13. Cbv源码简单分析图
  14. [COCI2015]COCI
  15. angular--解决angular图片加载失败问题
  16. SyntaxError: Non-UTF-8 code starting with &#39;\xe5&#39; in file ***.py on line 105, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for
  17. 笔记:Sublime Text 3
  18. 【3-24】css样式表分类、选择器、样式属性
  19. js 空数组是true还是false
  20. reportlab包使用指南

热门文章

  1. [51nod] 1432 独木桥 贪心
  2. IT兄弟连 Java语法教程 Java语言背景
  3. Java基础--基本规则、语法
  4. 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点
  5. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性
  6. Unity 播放的声音比声音文件小很多-AudioListener-AudioClip
  7. ListView加载完数据屏幕会自动和ListView的顶部对齐,而不是布局中最顶部的控件?
  8. Linux常用命令(补充)--其他
  9. BZOJ 4236: JOIOJI map瞎搞
  10. MapReduce项目之气温统计