函数嵌套、函数对象、命名空间

一:函数对象

函数是第一类对象,即表示函数可以当做数据传递

#可以被引用  把函数内存地址赋值给一个变量名,仍然遵循函数的调用规则
#可以被当做参数传递  传递的是函数的运行的结果
#可以当做返回值  把函数作为返回值返回的话,返回的结果是函数的内存地址
#可以当做容器类型的元素  意思就是可以作为列表和字典的元素

利用函数的特性,可以取代多分枝的if

def auth():
    print("登陆......")

def register():
    print("注册.......")

def seach():
    print("查看........")

dic = {
    "1":auth,
    "2":register,
    "3":seach,
}
def interactive():
    while True:
        msg = """1 登陆  2 注册  3 查看"""
        print(msg)
        choice = input("请输入选择:").strip()
        if choice not in dic:
            print("没有该功能编号")
            continue
        else:
            dic[choice]()

interactive()

二:函数的嵌套

2.1.函数的嵌套调用

  在函数中调用了其他函数

def max2(x,y):
    if x > y:
        return x
    else:
        return y

def max3(x,y,z):
    res1=max2(x,y)
    res2=max2(res1,z)
    return res2

print(max3(11,199,2))

2.2.函数的嵌套定义

  在函数中定义其他函数

  函数的嵌套定义只能在定义的同一级别调用

def func1():
    print("weqwewq")
    def func2(): #在函数func1中定义func2
        print("dsadas")
    print(func2)  #打印函数地址
    print(func2())#运行函数,打印函数的返回值
    func2()#运行函数,print("dsadas")

func1()

#嵌套函数调用
def f1():    print("f1")    def f2():        print("f2")        def f3():            print("f3")            def f4():                print("f4")            f4()        f3()    f2()f1()

三:名称空间与作用域

3.1.什么是名称空间

名称空间有内置名称空间、全局名称空间、局部名称空间,名称空间存放着名字与值的绑定关系
  内置名称空间存放python字自带的名字,内置的名字在解释器启动时生效,在解释器关闭后失效
  全局名称空间存放文件级别的名字,要求是顶头写的:如全局变量、函数名等,全局的名字在文件执行的时候生效,在文件结束或文件执行期间被删除的时候失效
  局部名称空间存放在函数内定义的名字(函数内的参数和函数内的名字),在函数调用时生效,在函数调用结束时候失效

3.2.名称空间的加载顺序

  内置名称空间》》全局名称空间》》局部名称空间

  在全局无法查看到局部的名称,但是在局部却可以查看全局的名称

四:作用域

3.1.作用域即范围

   全局范围(内置名称空间与全局名称空间属于该范围):全局存活全局有效

   局部范围:函数调用时存活,调用结束时失效,局部有效

3.2.作用域关系在函数定义阶段就已经固定,与函数的调用位置没有关系

def f1():   #定义函数f1
    def f2():#嵌套定义函数f2    print(x)  #打印变量x的值
    return f2   #返回函数f2的内存地址
x=100            #定义全局变量 x = 100
def f3(func):   #定义函数f3
    x=2     #定义局部变量x=2,其作用域仅在函数f3内有效
    func()    #执行传给的函数
x=10000         #再次定义一个全局变量x=10000,该全局变量覆盖了上一个,x=100全局变量已经失效

f3(f1())    #执行,首先调用函数f1,定义函数f2,在定义阶段函数f2中x的作用域是全局范围,所以获取的是全局变量x的值,得到返       #回的函数f2的内存地址,把其内存地址当做实参传递给函数f3,调用函数f3,局部变量x=2无效,于是输出x的值10000

五:闭包函数

#闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
#应用领域:延迟计算
from urllib.request import urlopen
def index(url):
    def get():
        return urlopen(url).read()
    return get
baidu=index(‘http://www.baidu.com‘)
print(baidu().decode(‘utf-8‘))
#内部函数包含对外部作用域而非全局作用域的引用

#提示:之前我们都是通过参数将外部的值传给函数,闭包提供了另外一种思路,包起来喽,包起呦,包起来哇

        def counter():
            n=0
            def incr():
                nonlocal n
                x=n
                n+=1
                return x
            return incr

        c=counter()
        print(c())
        print(c())
        print(c())
        print(c.__closure__[0].cell_contents)

  

原文地址:https://www.cnblogs.com/li1992/p/8665682.html

时间: 2024-08-30 08:51:35

函数嵌套、函数对象、命名空间的相关文章

装饰器,闭包,高阶函数,嵌套函数

高阶函数代码形式:(1.函数接收的参数是一个函数名 2.函数的返回值是一个函数名) def too(): print('from too') #高阶函数 def foo(): print('from foo') return too a = foo() a() def too(): print('from too') def foo(func): print('from foo') func() a = foo(too) 函数嵌套 定义一个函数,在该函数的代码块中在定义函数(可以一直定义下去)

python-函数&高阶函数&嵌套函数&装饰器

学习随笔: 简单介绍: 函数:函数即变量高阶函数:1.把一个函数名当做一个实参传给一个参数 2.返回值中包含函数名嵌套函数:函数内部再次定义函数装饰器:装饰器就是函数,是为了给其他函数添加功能 原则上不能改变被装饰函数的源代码,不能修改装是函数的调用方式 高价函数+嵌套函数=装饰器 代码如下:1.函数 1 #函数 2 def foo(name):#定义一个函数 3 print('is this foo name:',name) 4 foo('FOO') #函数foo的调用 5 foo2=foo

PYTHON学习0026:函数---嵌套函数和作用域----2019-6-19

1.函数定义后,只要没调用,其内部代码永远不会执行.2.函数内部可以再定义函数3.嵌套函数里有变量时,先在本级函数作用域找函数值,没有则逐级往上找.(本级--父级--爷爷级--....-全局),找到了则就不继续再往上找了. 作用域:一.在PYTHON中,一个函数就是一个作用域,函数定义完成后,作用域已经生成,以后不管在哪里调用,作用域不变. 原文地址:https://blog.51cto.com/13543767/2411285

Python全栈之路----函数----嵌套函数

函数内部可以再次定义函数 要执行函数,必须调用 def func1(): print('alex') def func2(): print('eric') func2() #如果没有这一句,不会print('eric'),只print('alex') func1() 下面在两个不同位置对age赋值,输入结果一致,均为  73 age = 19 def func1(): age = 73 def func2(): print(age) # age = 73? func2() func1() 下面,

python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): return x**2 y=func(10) print(y) def foo(): return None res=foo() print(res) def foo(): return{'a':1} res=foo() print(res['a']) def foo(): return {'a':1},1,'a',[1,2] res=foo() p

函数对象、函数嵌套、闭包函数

1.函数对象 精髓:可以把函数当成变量去用func=内存地址 def func(): print('from func') 1.1.可以赋值 f=func print(f,func) f() 1.2.可以当做函数当做参数传给另外一个函数 def foo(x): # x = func的内存地址 x() foo(func) # foo(func的内存地址) 1.3.可以将函数当做另外一个函数的返回值 def foo(x): # x=func的内存地址 return x # return func的内

node.js中的匿名函数, 回调函数和嵌套函数

定义一个函数相信大家已经很熟悉了, 在javascript里的函数也是非常重要的, 使用率非常高, 有几种函数不是很好理解 一, 匿名函数 var remove = function(num1) { return num1; } var fun = remove(5); console.log(fun); 这里定义的这个函数没有设置函数名, 在使用的时候要使用变量调用这个函数. 最后的输出结果: 5 二, 回调函数, 传递的参数可以定义成任意的对象, 而在这里, 其中的一个参数就是一个函数 fu

python_day04 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式

本节课重要知识点内容如下: 函数嵌套 名称空间和作用域 闭包 装饰器 迭代器 生成器 列表解析 三元表达式 生成器表达式 1.函数嵌套 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数 def bar(): print('from nbar')def foo(): print('from foo') bar()foo()def max2(x,y): if x > y: return x else: return ydef max4(a,

Python--高阶函数、函数嵌套、名称空间及变量作用域、闭包、装饰器

1.高阶函数(map/reduce/filter) 高阶函数是指函数的参数可以是函数 这篇总结几个常用的高阶函数:map/reduce/filter map函数.reduce函数.filter函数都是Python中的内建函数. map函数 map函数的作用是将一个函数作用于一个序列的每一个元素,一行代码即可完成,不需要用我们平常喜欢用的循环.map将运算进行了抽象,我们能一眼就看出这个函数是对一个序列的每个元素进行了同样的一个操作.map()函数接收两个参数,一个是函数,一个是Iterable,

Swift的函数与函数指针、闭包Closure等相关内容介绍

<span style="font-size:24px;">//函数 //demo1 无參数类型 func testConcat(){ println("測试函数"); } testConcat()//调用demo1 //demo2 多參数,一个返回值 /* 函数以func开头,表示一个函数 v1表示參数.String參数类型 ->返回值类型String */ func testConcats(v1:String,v2:String) ->S