Python——函数的高级应用
一、函数赋值给变量
函数也是对象,也可以赋值给变量,当把函数赋值给变量后,可以通过变量调用函数。
例:
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表达式在使用完之后会立即释放,提高性能。
Python——函数的高级应用的更多相关文章
- python:函数的高级特性
很多语言中,都允许把函数本身做为参数,传递给其它参数:即所谓的高阶函数.python中也有类似特性: 一.map/reduce.filter.sorted hadoop里的map-reduce思想在p ...
- 多测师讲解python函数 _open_高级讲师肖sir
open()函数 #open() 函数用于打开一个文件,创建一个 file 对象 #Python open() 函数用于打开一个文件,并返回文件对象, # 在对文件进行处理过程都需要使用到这个函数,如 ...
- 多测师讲解python函数 _zip_高级讲师肖sir
# zip函数 #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存.1.使用zip讲两个列表打印出来的结果是 ...
- python函数和lambda表达式学习笔记
1. python函数 不同于其他语言,python支持函数返回多个值 为函数提供说明文档:help(函数名)或者函数名.__doc__ def str_max(str1, str2): ''' 比较 ...
- Python函数装饰器高级用法
在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...
- [Python学习笔记][第五章Python函数设计与使用]
2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...
- python 的一些高级编程技巧
正文: 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合 ...
- Python 函数之路
---恢复内容开始--- python函数的定义 def add(): a = 1 b = 2 c == a + b print(c) 函数就是把一段实现某一个功能的代放进一个封装的方法名里,这个方法 ...
- Python函数属性和PyCodeObject
函数属性 python中的函数是一种对象,它有属于对象的属性.除此之外,函数还可以自定义自己的属性.注意,属性是和对象相关的,和作用域无关. 自定义属性 自定义函数自己的属性方式很简单.假设函数名称为 ...
随机推荐
- linux mysql 简单记录
mysql 1.linux下启动mysql的命令:mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: ...
- express解决ajax跨域访问session失效问题
最近在学习express,就用以前做的项目来进行express前后端分离的练手了,在做登陆注册的时候发现跨域的时候,session的值是会失效的,导致session里面的数据获取为undefined, ...
- Awesome Blockchain 区块链技术导航
区块链技术导航:收集整理最全面最优质的区块链(BlockChain)技术开发相关资源. 以后找不到文档资料的时候去导航站看看. 先亮个像,我长这样: 导航站内容 区块链开发所涉及的资源: 如 项目白皮 ...
- python3 安装虚拟镜像
virtualenvwrapper--提供了一系列命令使得和虚拟环境工作变得愉快很多,他把你所需要的虚拟环境都放在一个地方. 1.先安装virtualenv:pip install virtualen ...
- Jmeter 的 vars 和 props 用法
meter 的 JSR223 控件是 代替 BeanShell 的新一代脚本控件,支持多种脚本语言,尤其是其中的 Groovy,更是重点推荐使用的脚本语言,本文研究其中的 vars 和 props 两 ...
- Codeforces Round #565 (Div. 3) C. Lose it!
链接: https://codeforces.com/contest/1176/problem/C 题意: You are given an array a consisting of n integ ...
- CodeForces - 1003-B-Binary String Constructing (规律+模拟)
You are given three integers aa, bb and xx. Your task is to construct a binary string ssof length n= ...
- 2017ACM/ICPC广西邀请赛 CS Course
题意:删除指定数字,求剩下数字的与或非值 解法:保存一下前缀和后缀 #include <iostream> #include <stdio.h> #include <ve ...
- namedJDBC查询
import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.spring ...
- Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录
[翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...