Python——函数的高级应用
2024-09-08 16:05:13
一、函数赋值给变量
函数也是对象,也可以赋值给变量,当把函数赋值给变量后,可以通过变量调用函数。
例:
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表达式在使用完之后会立即释放,提高性能。
最新文章
- Node聊天程序实例01
- Could not find result map com.lrlz.weixin.dao.SysUserDAO.SysUser
- 贴图在Unity中的设置
- python数据库操作pymysql
- 浅谈 cookie 和 session
- java操作spark1.2.0
- 欢迎CSDN-markdown编辑
- centos6.5 64位 openvpn安装配置(转)
- 拥抱大家庭,nodejs走thrift
- python 开发利器
- python _winreg模块
- vue组件里定时器销毁问题
- Cbv源码简单分析图
- [COCI2015]COCI
- angular--解决angular图片加载失败问题
- 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
- 笔记:Sublime Text 3
- 【3-24】css样式表分类、选择器、样式属性
- js 空数组是true还是false
- reportlab包使用指南
热门文章
- [51nod] 1432 独木桥 贪心
- IT兄弟连 Java语法教程 Java语言背景
- Java基础--基本规则、语法
- 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点
- Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性
- Unity 播放的声音比声音文件小很多-AudioListener-AudioClip
- ListView加载完数据屏幕会自动和ListView的顶部对齐,而不是布局中最顶部的控件?
- Linux常用命令(补充)--其他
- BZOJ 4236: JOIOJI map瞎搞
- MapReduce项目之气温统计