高阶函数

数学概念 y=g(f(x))

在数学和计算机科学中,高阶函数应当至少满足下面一个条件的函数

条件1. 接受一个或多个函数作为参数

条件2. 输出一个函数

举例:

def counter(base):

def inc(step=1):

nonlocal base #修改外部变量base,赋值需要nonlocal

base += step

return base

return inc

foo = counter(5)

foo1 = counter(5)

print(foo == foo1) #False

print(id(foo),foo)

print(id(foo1),foo1)

柯里化

指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数

z = f(x,y) 转换成 z = f(x)(y)的形式

举例:

有这样一个add函数

def add(x,y): #柯里化成 add(x)(y) 的格式

return x + y

将此函数柯里化

def add(x):

def _add(y):

return x + y

return _add

foo = add(7) #等同于 add(7)(8)

print(foo(8))

闭包

函数中用到了外层变量就形成了闭包,如果想对外层变量修改,可以使用 global 或者 nonlocal 声明。

自由变量

对闭包来说外层变量就是自由变量,不在本地作用域的变量。

生成器

惰性求值,使用yield关键字可以构造一个生成器函数,调用这个函数就得到一个生成器对象。

使用next函数多次执行。

简单理解就是需要的时候才求值。

下面的例子是模拟一个无限增长的user_id号:

def increasing():

id = 0

while True:

id += 1

yield id

user_id = increasing()

for _ in range(10):

print(next(user_id))

装饰器(无参)

装饰器本身是一个函数

需要一个函数作为它的形参

返回值也是一个函数

可以使用@functionname 方式,简化调用,语法糖

也是高阶函数,两个条件都满足,但装饰器是对传入函数的功能的装饰(功能增强)

举例:

def logger(fn):

def _logger(*args,**kwargs):

print('before')

ret = fn(*args,**kwargs)

print('after')

return ret

return _logger

@logger # add = logger(add)

def add(x,y):

return x + y

print(add(5,600))

带参装饰器:

装饰器返回的是内层函数的引用

举例:

import functools

import datetime

import time

def copy_property(src):

def _copy_property(dst):

dst.__name__ = src.__name__

dst.__doc__ = src.__doc__

#dst.__qualname__ = src.__qualname__ #限定名

return dst

return _copy_property

def timeoutTip(t):

def logger(func):

#@functools.wraps(func)

@copy_property(func)

def wrapper(*args, **kwargs):

'''test2'''

# before 功能增强

start = datetime.datetime.now()

# print('Call:{}() StartTime:{} nowDescription:{}'.format(func.__name__,start,func.__doc__),end='\t\t')

print('Call:{}()'.format(func.__name__), end='\t\t')

ret = func(*args,**kwargs)

# after 功能增强

stopTime = (datetime.datetime.now() - start).total_seconds()

if stopTime > t:

print('Timeout time:{} '.format(stopTime))

return ret

# copy_property(func, wrapper)

return wrapper

return logger

@timeoutTip(2) #带参装饰器与不带参装饰器的区别

def add(x,y):

'''test1'''

#time.sleep(3)

print('returnValue = x+y')

return x+y

print(add(100,y=200))

print(add.__doc__,add.__qualname__)

python相关函数_Python 函数相关概念相关推荐

  1. python相关函数_python常用函数精讲

    原标题:python常用函数精讲 返回值为bool类型的函数 bool是Boolean的缩写,只有真(True)和假(False)两种取值 bool函数只有一个参数,并根据这个参数的值返回真或者假. ...

  2. python 参数_Python函数-参数

    Python中将函数作为参数,区分将参数直接写成函数名和函数名()的区别. def fun1(fun):print("---------------------")print(&q ...

  3. python相关函数_python列表相关函数

    1.python中可用于列表的函数 (1)cmp(list1, list2) 比较两个列表的元素 (2)len(list) 列表元素个数 (3)max(list) 返回列表元素最大值 (4)min(l ...

  4. float函数python作用_python函数每日一讲 - float函数类型转换详解|python教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 函数描述 float([x]) 函数将数字或数字的字符串表示形式转换为与它等效的有符号浮点数..如果参数x ...

  5. python 非_Python函数的非固定参数

    一.概述 在原来的文章中我已经写了,位置参数和关键字参数,下面我们来谈谈默认参数和参数组 二.默认参数 默认参数指的是,我们在传参之前,先给参数制定一个默认的值.当我们调用函数时,默认参数是非必须传递 ...

  6. python 形式参数_Python 函数的参数形式

    形参:在定义函数时,括号内的参数成为形参 特点:形参就是变量名 def foo(x,y): #x=1,y=2 print(x) print(y) 实参:在调用函数时,括号内的参数成为实参 特点:实参就 ...

  7. 【爆肝更新】Python基础教程:第五章_Python函数

    原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...

  8. python中pop函数_Python中的Pop函数

    python中pop函数 什么是弹出功能? (What is the pop function?) The method pop() removes and returns the last elem ...

  9. python数字类型转换函数_Python的数据类型转换函数

    玩蛇网这篇文章给大家介绍关于,Python数据类型的转换函数. Python提供了一些可以把某个值从一种数据类型,转换成为另一种数据类型的内置函数和方法.int函数可以将任何可以转换为整型的值转换为整 ...

  10. python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...

    有许多类似的问题,但没有一个答案解决了我的问题. 我定义了几个解析大型数据集的函数.首先,我调用数据,然后将数据(在.txt中表示为行和列)组织到列表中,我将为各个数据条目编制索引.在此之后,我建立了 ...

最新文章

  1. ggplot2可视化分面图(faceting)使用label_wrap_gen函数设置每个分面图的子图标题自动换行为多行文本(基于设定的当行宽度进行标题文本自动换行)
  2. mysql中tonumber函数_Oracle数据库之oracle的TO_NUMBER函数
  3. JAVA调用R语言之Rserve(二)
  4. 电脑销售技巧_汝州市,如何查询楼盘详细销售数据?官方公布,精确到房间
  5. Android 用虹软SDK做人脸识别
  6. 7-20上午刷题未知点集合
  7. ns-allinone错误锦囊
  8. as工程放到源码编译_方舟编译器学习笔记2 源码编译
  9. win10下mount挂载文件 samba cifs
  10. 你还在使用xml配置mybatis吗,快来试试这种方式吧
  11. 是否担心别人将你的博客文章全部爬下来?3行代码教你检测爬虫
  12. React项目build之后资源文件路径不正确或打开空白页的问题及简易解决方法
  13. 【ccpc网络赛】YJJ's Salesman【1010】【树状数组+离散化+dp】
  14. ubuntu系统共享桌面的使用和配置
  15. 泛微oa流程表单之HTML表单字段必填验证的添加与移除
  16. 20159318 《网络攻防实践》第2周学习总结
  17. 手机虚拟视频替换摄像头_利用OBS虚拟摄像头实现假装开会
  18. 美股网络券商史考特证券被黑 460万客户受影响
  19. 分享两个免费在线shell
  20. MySQL存储过程(CREATE PROCEDURE 存储过程名(参数列表))

热门文章

  1. python多重继承super父类参数_Python super()函数使用及多重继承
  2. maven仓库--私服(Nexus的配置使用)
  3. 将一个文本文件的内容按行读出,每读出一行就顺序加上行号,并写入到另一个文件中。...
  4. python面向对象编程(1)
  5. 《R数据可视化手册》——2.5 绘制箱线图
  6. eclipse、MyEclipse实现批量改动文件编码
  7. 你实现团队管理了吗?
  8. linux系统删除openjdk并安装oracle jdk
  9. idea断点调试继续执行快捷键(keymap设置了eclipse)
  10. mybatis使用mapper代理的方式操作数据库