一、将函数作为变量去使用

在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中的函数(高级使用)的更多相关文章

  1. 11、python中的函数(基础)

    一.什么是函数? 在数学中,x2+2x2+3=10这样的叫方程. 而ax2+bx2+c=d这样的才叫函数.数学的函数中,abcd等待输入的未知量叫自变量,它需要我们自己去输入,而x这种待求得未知量叫因 ...

  2. Python中split()函数的用法及实际使用示例

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...

  3. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  4. python中range()函数的用法

    python中range()函数可创建一个整数列表,一般用在for循环中. range()函数语法: range(start,stop[,step]) 参数说明: star: 计数从star开始.默认 ...

  5. Python 中的函数

    学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数是结构化编程的核心.我们使用函数可以增加程序的可读性.自定义函数时使用关键字def 函数由多条语句组成.在定义函数 ...

  6. python中format函数

    python中format函数用于字符串的格式化 通过关键字 1 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2 grade = {'nam ...

  7. Python中readline()函数 去除换行符

    从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: f = open ...

  8. Python中int()函数的用法浅析

      int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int)  Help on class int in module __builti ...

  9. 【313】python 中 print 函数用法总结

    参考:python 中 print 函数用法总结 参考:Python print() 函数(菜鸟教程) 参考:Python 3 print 函数用法总结 目录: 字符串和数值类型 变量 格式化输出 p ...

  10. python中filter函数

    python中filter()函数   filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断 ...

随机推荐

  1. eclipse springboot工程打war包方法及在Tomcat中运行的方法

    一, eclipse springboot打war包 1. 配置pom.xml文件 <packaging>war</packaging> <!-- 配置servlet,打 ...

  2. docker研究-3 docker简介和基本操作

    Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker 是通过内核虚拟化技 ...

  3. Linux---基本目录与文件命令

    一.目录 1.显示工作目录命令pwd 2.改变工作目录命令cd 3.创建目录命令mkdir 二.文件 1.创建空文件命令touch 2.显示文件列表ls 3.复制文件或目录命令cp 4.删除文件或目录 ...

  4. 破解Beyond Compare 4

    Beyond Compare 4 30天试用期后,破解方法. 方法一:在安装目录下找到文件BCUnrar.dll,比如:D:\software\Beyond Compare 4,重命名该文件即可. 重 ...

  5. 201871010124-王生涛《面向对象程序设计(java)》第十五周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  6. 201871010125 王玉江 《面向对象程序设计(java)》 第四周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/wswyj/ 作业学习目 ...

  7. luoguP3704 [SDOI2017]数字表格

    题意 默认\(n\leqslant m\) 所求即为:\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mf[\gcd(i,j)]\) 枚举\(\gcd(i,j)\)变 ...

  8. Java System.getProperty vs System.getenv

    转自:https://www.baeldung.com/java-system-get-property-vs-system-getenv 1. Introduction The package ja ...

  9. 宏任务和微任务:setTimeout和Promise执行顺序

    先以一道面试题做引子: 写出这段程序的输出内容: setTimeout(function(){ console.log(); },); new Promise(function(a,b){ conso ...

  10. PKUSC2018题解

    PKUSC2018题解 真实排名 分别考虑第\(i\)个人翻倍和不翻倍的情况,组合数算一下即可,务必注意实现细节. 代码 最大前缀和 设\(sum_s\)表示集合\(\sum_{i\in s} a_i ...