函数高阶

命名空间

又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方

名称空间共3种,分别如下

  • locals: 是函数内的名称空间,包括局部变量和形参
  • globals: 全局变量,函数定义所在模块的名字空间
  • builtins: 内置模块的名字空间

不同变量的作用域不同就是由这个变量所在的命名空间决定的。

作用域即范围

  • 全局范围:全局存活,全局有效
  • 局部范围:临时存活,局部有效

查看作用域方法 globals(),locals()

LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__

  • locals 是函数内的名字空间,包括局部变量和形参
  • enclosing 外部嵌套函数的名字空间
  • globals 全局变量,函数定义所在模块的名字空间
  • builtins 内置模块的名字空间

闭包

在函数外部执行函数内部的函数,并且还可以用函数内部作用域里的所有的值称为闭包

闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

装饰器

作用:在不改变源代码的情况下为函数增加功能,遵循软件开发中的一个原则“开放-封闭”原则

  • 封闭:已实现的功能代码块不应该被修改
  • 开放:对现有功能的扩展开放
import time
def show_time(f):    # 查看执行时间的函数
    def inner():
        start = time.time()
        f()
        end = time.time()
        print("spend %s" % (end - start))
    return inner

@ show_time # 相当于foo = show_time(foo)
def foo():
    x = 10
    print(x)
    time.sleep(3)

foo()

注意:

  • 装饰器必须采用至少双层函数,采用返回inner的方式
  • @符号 @show_time = {foo =show_time(foo)} 写在原功能函数前面
  • 功能函数内有参数,相应装饰器函数也应该对应加参数

带参数的装饰器

通过多层函数的嵌套,来达到添加参数的目的

def logger(flag=""):

    def show_time(f): #查看执行时间的函数
        def inner():
            start = time.time()
            f()
            end = time.time()
            print("spend %s" % (end - start))
            if flag =="True":
                print("日志记录")

        return inner
    return show_time

@logger("true")

原文地址:https://www.cnblogs.com/leiyiming/p/9005264.html

时间: 2024-11-10 17:20:43

函数高阶的相关文章

Oracle函数-高阶篇

下面整理了部分oracle函数-高阶篇: 1. CATSTR    举例:SELECT CATSTR(COLUMN_NAME) NAME_LIST FROM DBA_TAB_COLUMNS WHERE TRIM(TABLE_NAME) = 'T_RZ_DKDATA'  --查询出的结果在一个列中2. INSTR() 检索字符串函数:匹配则返回首次检索的位置的索引值(从1开始),值>0,否则返回值=0    举例:SELECT * FROM USER_TABLES WHERE INSTR(TABL

python学习三十四天函数高阶函数定义及用法

python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def test(n): print(n) test(dac) 输出结果为 函数类型function 2,把函数做为返回值,也是高阶函数 def test(x,y): return abs,x,y 输出结果为 列表,包含 函数,参数 文章来自(www.96net.com.cn) 原文地址:https://www.

002_第三部分_[函数 / 高阶函数 / 装饰器]

一.高阶函数: 顺序排序 enumerate([1,2 ,3 , 4, 5]) for idx, item in enumerate([1, 2, 3, 4]):     print(idex)     print(item) def sort(*args):     ret = []     for item in args:         for i, v in enumerate(ret):             if item > v:                 ret.ins

Spark函数高阶编程

package com.dtspark.scala.basics /**  * 函数式编程进阶:  * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量:  * 2, 函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你  *要使用的话,一般会把这个匿名函数赋值给一个变量(其实是val常量),Spark源码中大量存在这种语法,必须掌握:  * 3, 函数可以作为参数直接传递给函数,这极大的简化的编程的语法,为什么这样说呢?原因非

PYTHON学习0028:函数---高阶函数----2019-6-20

1.定义:变量可以指向函数,函数的参数能够接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数.只要把函数作为参数传到其他函数,不管其他函数有没有返回值,,都叫高阶函数.2.函数也可以接收其他函数作为返回值. 原文地址:https://blog.51cto.com/13543767/2411396

Python 函数/高阶函数

def add(x,y,f): return f(x) + f(y) def make(x): return x + 10 print add(3,-8,make) #输出的结果就是15 编写高阶函数,就是让函数的参数能够接收别的函数. 原文地址:https://www.cnblogs.com/jkklearn/p/11297878.html

JavaScript设计模式与开发实践-读书笔记(3)闭包和高阶函数

闭包(closure) 闭包的形成与变量的作用域以及变量的生存周期密切相关. 变量的作用域,就是指变量的有效范围. 全局变量和局部变量. 在JavaScript中,函数可以用来创造函数作用域. 变量的生存周期,全局变量的生命周期是永久的,除非我们主动销毁这个全局变量. 对于在函数体内用var关键字声明的局部变量来说,当退出函数时,这些局部变量即失去了它们的价值,它们都会随着函数调用的结束而被销毁. 利用闭包我们可以完成许多奇妙的工作. 闭包的作用: 1.封转变量 闭包可以帮助我们把一些不需要暴露

一、高阶函数、闭包

什么是高阶函数? 一个函数的参数是否可以接受另外一个函数作为参数,这样的函数就叫做高阶函数. 最简单的高阶函数实例: def func(x,y,z):    return z(x)+z(y)print(func(-20,-10,abs)) 返回函数 高阶函数除了可以接收函数参数之外,还可以把函数作为返回值 def func(*args):    def sum():        ax = 0        for n in args:            ax+=n        retur

Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. 而函数式编程(请注意多了一个"式"字)--Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算. 我们首先要搞明白计算机(Computer)和计算(Compute)的概念. 在计算机的层次上,CPU执行的是加减乘除的指令代码