博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数对象、函数对象嵌套调用、函数定义、名称空间与作用域以及名称空间的查找顺序...
阅读量:5450 次
发布时间:2019-06-15

本文共 2973 字,大约阅读时间需要 9 分钟。

一、函数对象

函数是第一类对象:函数名指向的值可以被当中参数传递

1.1函数名可以被传递

指的是函数名可以被赋值给其他,加括号就可以调用

# name='wuxi'# x=name# print(x,id(x))def func():    print('from func')print(func)#内存地址print(id(func))f = funcprint(f)f()#加()就可以调用函数
View Code

1.2.函数名可以被当做参数传递给其他函数

def func():    print('from func')def index(args):    print(args)    args()    print('from index')# index(1)index(func)#指的是两个函数,一个函数调用另外一个函数,该函数内又有被调用函数的方法(加括号)
View Code

1.3.函数名可以被当做函数的返回值

def index():    print('index')def func():    print('func')    return index#当做返回值res = func()print(res)res()
View Code

1.4.函数名可以被当做容器类型的参数

def func():    print('func')print(func())l = [1,2,func,func()]  # [1,2,
,None]print(l)
View Code

循环打印项目功能提示信息 供用户选择 用户选择谁就执行谁

msg="""1 注册 2 登录 3转账"""def register():    username=input('姓名').strip()    pwd=input('密码').strip()    print('注册完成')def login():    print('login...')def transfer():    print('transfer...')l={    '1':register,    '2':login,    '3':transfer}while True:    print(msg)    choice=input('请输入你想进行的功能:>>>').strip()    if choice in l:        l.get(choice)()
View Code

二、函数的嵌套

2.1函数的嵌套调用

嵌套调用:意思就是一个函数里面有另外一个函数。调用该函数就能调用里面那个函数

def max(x,y):    if x > y:        return x    else :        return ydef my_max(a,b,c,d):    res=max(a,b)    res2=max(res,c)    res3=max(res2,d)    return res3print(my_max(1,2,32,4))
View Code

2.2函数的嵌套定义:

def f1():    def f2():        def f3():            print('from f3')        f3()    f2()f1()

三、名称空间和作用域

3.1什么是名称空间?

#名称空间:存放名称与值绑定关系的地方,三种名称空间,(之前遗留的问题x=1,1存放于内存中,那名 字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方)

3.2名称空间的三种分类?

1.内置名称空间:python解释器提前给你定义好的名字(已经存放到内置名称空间中了)                len                max                min    2.全局名称空间:文件级别的代码                x = 1                if 1 ==1 :                    y = 2                                print(y)                while True:                    z = 3                                    x,y,z都会放到全局名称空间                if for while 无论嵌套多少层 它们内部所创建的名字都是全局名称空间的    3.局部名称空间:函数体内创建的名字都属于局部名称空间            username
View Code

3.3名称空间的加载顺序?

python test.py#1、python解释器先启动,因而首先加载的是:内置名称空间#2、执行test.py文件,然后以文件为基础,加载全局名称空间#3、在执行文件的过程中如果调用函数,则临时产生局部名称空间

3.4名字的查找顺序(总体方向)

局部名称空间--->全局名称空间--->内置名称空间#需要注意的是:在全局无法查看局部的,在局部可以查看全局的,如下示例

3.5名称空间的生命周期?

内置名称空间:只要python解释器已启动立马创建   关闭python解释器的时候内置名称空间自动销毁全局名称空间:只要你右键运行py文件会自动创建   py文件程序运行结束自动销毁 局部名称空间:函数被调用的时候自动创建  函数指向结束立即销毁(动态创建动态销毁)
View Code

四、作用域

#1、作用域即范围        - 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效      - 局部范围(局部名称空间属于该范围):临时存活,局部有效#2、作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关,如下x=1def f1():    def f2():        print(x)    return f2x=100def f3(func):    x=2    func()x=10000f3(f1())

 2.global、nonlocal

global在局部修改全局的不可变类型数据

x=12231name='wuxi'def func():    global x,name    x = 44444444    name = 'qqqqqqqqq'# func()func()print(x)print(name)

 

nonlocal  局部修改局部

def func():    x = 1    def index():        nonlocal x        x = 2        # print(x)    index()    print(x)func()

global:局部修改全局 如果想修改多个 逗号隔开

nonlocal:局部修局部 如果想修改多个 逗号隔开

转载于:https://www.cnblogs.com/ZDQ1/p/11164171.html

你可能感兴趣的文章
mac 上sublime3安装编码插件
查看>>
sql 清空数据库的日志文件
查看>>
数据循环处理重组2
查看>>
[Heoi2013]Alo
查看>>
ML:吴恩达 机器学习 课程笔记(Week7~8)
查看>>
C++编程练习(14)-------“单例模式”的实现
查看>>
Windows10下Anaconda虚拟环境下安装pycocotools
查看>>
rxjs 的用法
查看>>
51Nod 1092 回文字符串
查看>>
函数的值传递与指针
查看>>
发邮件
查看>>
使用SVN时 URL access forbidden for unknown reason
查看>>
冲刺一阶段———个人总结10
查看>>
使用镜像仓库托管自己构建的Docker镜像
查看>>
代码整洁之道阅读笔记01
查看>>
HttpHelper类
查看>>
hdu1664 bfs+余数判重
查看>>
E - Fantasy of a Summation LightOJ1213
查看>>
Android 6.0 运行时权限处理完全解析
查看>>
$(function() {})
查看>>