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

在Python中函数也是一种对象,是一种名为function的对象,所以可以将函数赋值给变量,类似整数、浮点数、列表、元组、字典赋值给变量。

我们编写如下程序:

  1. #coding=utf-8
  2. def power(base,exponent):
  3. """定义函数:计算乘方"""
  4. result = 1
  5. for i in range(1,exponent + 1):
  6. result *= base
  7. return result
  8.  
  9. my_function = power
  10. print(my_function(2,3))

运行程序之后控制台打印如下:

解释:我们先定义了一个函数名为power作用就是用来计算乘方,第一个参数为底数,第二个参数为指数,第9行,我们将power() 函数赋值给变量my_pow,所以在第10行我们就可以用my_pow调用power() 函数了,有此可见,我们可以在程序不同的时间或者位置将my_function指向其他已定义过的函数进行调用,从而使程序更加灵活的运行,所以这是使用函数变量的一大好处。

二、将函数作为一个函数的形参

有时候定义一个这样的函数:该函数大部分计算逻辑都能确定,但是有些处理逻辑无法确定,所以某些程序代码需要根据具体情况改变,此时我们可以使用函数形参来解决,这样就可以在调用函数时传入不同函数作为参数,从而动态改变这段代码。

我们编写如下的栗子:

  1. #coding=utf-8
  2. def funcs(data,fn):
  3. """fn形参为函数类型即是function类型"""
  4. result=[]
  5. for x in data:
  6. result.append(fn(x)) #在将data中的元素遍历、计算后放入新数组
  7. return result
  8.  
  9. def square(x):
  10. """计算一个数的平方并返回"""
  11. return x*x
  12.  
  13. def cube(x):
  14. """计算一个数的三次方并返回"""
  15. return x*x*x
  16.  
  17. def factorial(x):
  18. """计算一个数的阶乘并返回"""
  19. result = 1
  20. for index in range(2,x+1):
  21. result *= index
  22. return result
  23.  
  24. data = [2,3,4,9,8,7]
  25. print("原数据:", data)
  26. #在传入不同的函数对象给funcs函数后会得到不同的结果
  27. print("计算列表元素的平方:")
  28. print(funcs(data,square))
  29. print("计算列表元素的三次方:")
  30. print(funcs(data,cube))
  31. print("计算列表元素的阶乘:")
  32. print(funcs(data,factorial))
  33. print("funcs函数的类型:")
  34. print(type(funcs))

在运行程序后,控制台打印如下:

从上面的例子中,可以看出函数可以作为参数,在调用函数时动态传入,这样即使数据是相同的,但实际调用的函数不同。在第34行,我们打印了funcs函数的类型,是function类型即function对象。

三、将函数作为另一个函数的返回值

将上面的代码稍作改变即可:

  1. #coding=utf-8
  2. def get_funcs(func_name):
  3.  
  4. def square(x):
  5. """计算一个数的平方并返回"""
  6. return x*x
  7.  
  8. def cube(x):
  9. """计算一个数的三次方并返回"""
  10. return x*x*x
  11.  
  12. def factorial(x):
  13. """计算一个数的阶乘并返回"""
  14. result = 1
  15. for index in range(2,x+1):
  16. result *= index
  17. return result
  18. """根据传入func_name返回局部函数"""
  19. if func_name == "square":
  20. return square
  21. elif func_name == "cube":
  22. return cube
  23. else:
  24. return factorial
  25.  
  26. #在传入不同的参数名给funcs函数后会得到不同的函数对象
  27. print("计算数字4的平方:")
  28. my_funct = get_funcs("square")
  29. print(my_funct(4))
  30. print("计算数字5的三次方:")
  31. my_funct = get_funcs("cube")
  32. print(my_funct(5))
  33. print("计算数字6的阶乘:")
  34. my_funct = get_funcs("other_function")
  35. 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. 使用BurpSuite做中转代理时候出现Failed to connect to www.xxx.com:443 的时候可能原因

    1.可能是BurpSuite没有设置好代理,需要BurpSuite需要进行设置如下图:

  2. jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?

    针对这个问题,构建方法不变, 变化在动态去获取每次打出来的包名, 比如说,本次打出来的报名mypackage-1.0.3-SNAPSHOT.jar 那么,先进入target目录 #先进入target目 ...

  3. Skyshop.Detail Maps

    Secondary Maps(Detail Maps) & Detail Mask 增加模型细节,而不需要使用单张的超大贴图. 应用:增加皮肤细节,比如毛孔:砖墙添加细小的裂缝和青苔:大型金属 ...

  4. c# 第12节 分支语句if、switch、三位运算符

    本节内容: 1:流程控制语句分类 2:分支语句之if的使用 3:分支语句之switch的使用 4:分支语句之三位运算符 5:分支语句比较 1:流程控5:制语句分类 2:分支语句之if 3:分支语句之s ...

  5. HardFault_Handler的方法转载

    在硬汉平台看到一个比较好的帖子,关于如何定位HardFault_Handler,这里要记录下网址. http://www.armbbs.cn/forum.php?mod=viewthread& ...

  6. Tcp与Http

    TCP协议对应传输层,而HTTP协议对应应用层.Http协议是建立在TCP协议基础之上的.当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通 ...

  7. [LeetCode] 300. Longest Increasing Subsequence 最长递增子序列

    Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...

  8. Linux性能优化实战学习笔记:第七讲

    一.进程的状态 1.命令查看 top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28961 root 20 0 43816 3148 ...

  9. Intellij IDEA通过Plugins导入vue.js

    最近再写vue.js的程序,刚开始使用Intellij IDEA没有导入插件,结果所有vue文件都是文本方式显示,无法使用开发工具的辅助功能,导入vue.js插件后即可. 路径是Setting-> ...

  10. jquery.pagination.js的使用

    html页面 //要显示内容表格 <table id="gifts"> <tr class='first'> <th>时间</th> ...