Python中的函数(高级使用)
一、将函数作为变量去使用
在Python中函数也是一种对象,是一种名为function的对象,所以可以将函数赋值给变量,类似整数、浮点数、列表、元组、字典赋值给变量。
我们编写如下程序:
#coding=utf-8
def power(base,exponent):
"""定义函数:计算乘方"""
result = 1
for i in range(1,exponent + 1):
result *= base
return result my_function = power
print(my_function(2,3))
运行程序之后控制台打印如下:
解释:我们先定义了一个函数名为power作用就是用来计算乘方,第一个参数为底数,第二个参数为指数,第9行,我们将power() 函数赋值给变量my_pow,所以在第10行我们就可以用my_pow调用power() 函数了,有此可见,我们可以在程序不同的时间或者位置将my_function指向其他已定义过的函数进行调用,从而使程序更加灵活的运行,所以这是使用函数变量的一大好处。
二、将函数作为一个函数的形参
有时候定义一个这样的函数:该函数大部分计算逻辑都能确定,但是有些处理逻辑无法确定,所以某些程序代码需要根据具体情况改变,此时我们可以使用函数形参来解决,这样就可以在调用函数时传入不同函数作为参数,从而动态改变这段代码。
我们编写如下的栗子:
#coding=utf-8
def funcs(data,fn):
"""fn形参为函数类型即是function类型"""
result=[]
for x in data:
result.append(fn(x)) #在将data中的元素遍历、计算后放入新数组
return result def square(x):
"""计算一个数的平方并返回"""
return x*x def cube(x):
"""计算一个数的三次方并返回"""
return x*x*x def factorial(x):
"""计算一个数的阶乘并返回"""
result = 1
for index in range(2,x+1):
result *= index
return result data = [2,3,4,9,8,7]
print("原数据:", data)
#在传入不同的函数对象给funcs函数后会得到不同的结果
print("计算列表元素的平方:")
print(funcs(data,square))
print("计算列表元素的三次方:")
print(funcs(data,cube))
print("计算列表元素的阶乘:")
print(funcs(data,factorial))
print("funcs函数的类型:")
print(type(funcs))
在运行程序后,控制台打印如下:
从上面的例子中,可以看出函数可以作为参数,在调用函数时动态传入,这样即使数据是相同的,但实际调用的函数不同。在第34行,我们打印了funcs函数的类型,是function类型即function对象。
三、将函数作为另一个函数的返回值
将上面的代码稍作改变即可:
#coding=utf-8
def get_funcs(func_name): def square(x):
"""计算一个数的平方并返回"""
return x*x def cube(x):
"""计算一个数的三次方并返回"""
return x*x*x def factorial(x):
"""计算一个数的阶乘并返回"""
result = 1
for index in range(2,x+1):
result *= index
return result
"""根据传入func_name返回局部函数"""
if func_name == "square":
return square
elif func_name == "cube":
return cube
else:
return factorial #在传入不同的参数名给funcs函数后会得到不同的函数对象
print("计算数字4的平方:")
my_funct = get_funcs("square")
print(my_funct(4))
print("计算数字5的三次方:")
my_funct = get_funcs("cube")
print(my_funct(5))
print("计算数字6的阶乘:")
my_funct = get_funcs("other_function")
print(my_funct(6))
运行程序,控制台打印如下:
解释:在定义了返回函数的函数get_funcs() 后,在调用该函数时直接传入你需要调用的函数名即可返回你需要的函数,用变量接收即可使用,如上面的代码。
Python中的函数(高级使用)的更多相关文章
- 11、python中的函数(基础)
一.什么是函数? 在数学中,x2+2x2+3=10这样的叫方程. 而ax2+bx2+c=d这样的才叫函数.数学的函数中,abcd等待输入的未知量叫自变量,它需要我们自己去输入,而x这种待求得未知量叫因 ...
- Python中split()函数的用法及实际使用示例
Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- python中range()函数的用法
python中range()函数可创建一个整数列表,一般用在for循环中. range()函数语法: range(start,stop[,step]) 参数说明: star: 计数从star开始.默认 ...
- Python 中的函数
学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数是结构化编程的核心.我们使用函数可以增加程序的可读性.自定义函数时使用关键字def 函数由多条语句组成.在定义函数 ...
- python中format函数
python中format函数用于字符串的格式化 通过关键字 1 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2 grade = {'nam ...
- Python中readline()函数 去除换行符
从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: f = open ...
- Python中int()函数的用法浅析
int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builti ...
- 【313】python 中 print 函数用法总结
参考:python 中 print 函数用法总结 参考:Python print() 函数(菜鸟教程) 参考:Python 3 print 函数用法总结 目录: 字符串和数值类型 变量 格式化输出 p ...
- python中filter函数
python中filter()函数 filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断 ...
随机推荐
- Maven+SSM框架,实现单表简单的增删改查
目录 1.创建web Maven项目 2.创建java源码文件和resources资源文件 3.创建数据库配置文件:jdbc.properties 4.项目总体目录: 5.添加spring配置文件:a ...
- 设置VMware中Kali 共享文件夹
(软件环境: Vmware Workstation 15.5 Pro , Kali Linux2019.3) 1. VMware设置共享目录 2. 安装VMware-Tools 命令: apt-get ...
- Shel脚本-初步入门之《02》
Shel脚本-初步入门-什么是 Shell 脚本 2.什么是 Shell脚本 当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,改程序就被称为 Shell 脚本.如果在 Shell 脚本 ...
- python cookie登录DVWA,phpstudy搭建DVWA参考https://www.jianshu.com/p/97d874548300
import requestsheader={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleW ...
- 外网穿透-natapp安装配置(windows)
natapp官网 natapp服务器更新:全面支持HTTPS协议以及本地SSL证书,支持WSS协议.同时支持HTTP/2 WEB协议,支持微信小程序本地开发.全面自动支持泛子域名与访客真实IP地址. ...
- 基本 Python 面试问题
目录 1.为什么学习Python? 2.通过什么途径学习的Python? 3.Python和Java.PHP.C.C#.C++等其他语言的对比? 4.简述解释型和编译型编程语言? 5.Python解释 ...
- 201871010110-李华《面向对象程序设计(java)》第十四周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- openssl+vsftpd 加密验证方式
[root@localhost ~]# rpm -q opensslopenssl-1.0.1e-48.el6.x86_64[root@localhost ~]# ldd /usr/sbin/vsft ...
- 20180706模拟赛T3——神经衰弱
文件名: card 题目类型: 传统题 时间限制: 1秒 内存限制: 128MB 编译优化: 无 题目描述 天然少女小雪非常喜欢玩一个叫做神经衰弱的游戏. 游戏规则是,有若干种牌,每种牌有若干对,开始 ...
- vs在matlab生成的dll中,load treebigger错误
提示的错误:Warning: Variable 'model' originally saved as a TreeBagger cannot be instantiated as an object ...