python基础-方法嵌套、就近原则、global、nonlocal、函数即变量

来源:互联网 发布:企业基础数据规范标准 编辑:程序博客网 时间:2024/05/21 18:39

方法嵌套

#函数的嵌套定义def func():    def qqxing():        print('我是qqxing')    qqxing()func()

输出如下:

我是qqxing

方法覆盖

def method1():    print("ssss")def method1():    print("tttt")method1()

输出如下:

tttt

就近原则

def method2():    n = 3    m = 7    def method():        n = 2        print(n)        print(m)    method()method2()

输出如下:

27

globals\locals

globals() #保存了在全局作用域中的名字和值
locals() #中的内容会根据执行的位置来决定作用域中的内容
如果在全局执行
globals和locals打印的结果是一致的

n = 1m  =2def method6():    a = 10    b = 11#globals方法保存了全局的变量print(globals())#在全局环境执行是全局的print(locals())

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/test.py{'__name__': '__main__', '__doc__': '\n全局作用域\n\n局部作用域\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x01596330>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/python/py_pro/test.py', '__cached__': None, 'n': 1, 'm': 2, 'method6': <function method6 at 0x038B1A50>}{'__name__': '__main__', '__doc__': '\n全局作用域\n\n局部作用域\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x01596330>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/python/py_pro/test.py', '__cached__': None, 'n': 1, 'm': 2, 'method6': <function method6 at 0x038B1A50>}

我们看如下的方法中的locals\globals

#放在方法里面a = 1def methon11():    a  = 15    b = 11    print(locals())    print(globals())methon11()

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/test.py{'b': 11, 'a': 15}{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x03486330>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/python/py_pro/test.py', '__cached__': None, 'a': 1, 'methon11': <function methon11 at 0x0344D660>}

global

globals和locals方法
小范围可以使用大范围的,但不能修改
如果想要修改全局的:使用global关键字 —— 尽量避免
如果想要修改最近拥有该变量的外层函数的:使用nonlocal ——不影响全局

如下的代码就是因为没有声明global而报错

n = 1def func():    n = n+1func()print(n)

报错内容如下:

E:\python\python_sdk\python.exe E:/python/py_pro/4函数的命名空间.pyTraceback (most recent call last):  File "E:/python/py_pro/4函数的命名空间.py", line 7, in <module>    func()  File "E:/python/py_pro/4函数的命名空间.py", line 5, in func    n = n+1UnboundLocalError: local variable 'n' referenced before assignment

我们进行修改如下:

n = 1def func():    global n    n = n+1func()print(n)

输出如下:

2

nonlocal

如果想要修改最近拥有该变量的外层函数的:使用nonlocal ——不影响全局

n = 0def func():    n = 1    def func2():        def func3():            nonlocal n            n+=1        func3()        print(n)    func2()    print(n)func()print(n)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/4函数的命名空间.py220

我们将上面的代码修改如下:

n = 0def func():    n = 1    def func2():        n = 2        def func3():            nonlocal n            n+=1        func3()        print(n)    func2()    print(n)func()pri::::t(n)

输出如下:

310

函数变量

第一类对象的概念:
函数名可以赋值
可以作为一个数据结构的元素
可以作为一个函数的参数
可以作为一个函数的返回值

#函数的名字def func():    print('in func')    return 10def func2():    print('in func2')    return 20#打印方法的内存地址值print(func)#方法赋值变量t = funcprint(t)print(t())print("---------")#方法变量存放列表l = [func,func2]for i in l:    i()def func():    print('in func')    return 10def func2(arg):    arg()    return argprint("--------")f = func2(func)f()print(f())

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/5函数的名字.py<function func at 0x002CD660><function func at 0x002CD660>in func10---------in funcin func2--------in funcin funcin func10Process finished with exit code 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 绑定qq账号消息不见了怎么办 现在的注册微信怎么办 爱奇艺手机号码被别人绑定了怎么办 手机号码换了支付宝账号怎么办 qq换手机号了怎么办呢 公司被注销了公众号怎么办 qq号被限制查找怎么办 qq号别人查找不到怎么办 qq邮箱已被注册怎么办 微信付款没网络怎么办 天猫买的假货店铺关门了怎么办 鞋小了半码怎么办 迅雷会员种子不能加速怎么办 迅雷会员为什么不能加速怎么办 持有st创智股票怎么办 租的房子床坏了怎么办 宜家定时器不响怎么办 新插座插不进去怎么办 本溪人社app打不开怎么办 南宁电车超过上牌时间怎么办 苹果6s降频怎么办 0首付手机还不起怎么办 乐才app登录不上怎么办 买了笔记本网要怎么办? 电脑连接不上网络怎么办 电脑上没网络了怎么办 手机返回键不好使怎么办 笔记本无线网连接受限怎么办 魅族打电话图标没有了怎么办 京东价格保护后发票怎么办 淘宝未满十八岁怎么办 SVN提交时代码冲突怎么办 京东自营没货了怎么办 京东下了单 没货怎么办 万达广场购物卡怎么办 京东白条没额度怎么办 京东退款还收到货怎么办 退货不想要货了怎么办 安装微擎创建数据库失败怎么办 tp文件损坏或丢失怎么办 手机QQ启动有问题应该怎么办