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
阅读全文
0 0
- python基础-方法嵌套、就近原则、global、nonlocal、函数即变量
- Python 基础 —— global 与 nonlocal
- python global和nonlocal
- python global和nonlocal
- Python-keyword-global & nonlocal
- 变量的就近原则
- python变量作用域(global and nonlocal)
- nonlocal与嵌套函数
- [python]global与nonlocal关键字
- 8.局部变量/全局变量global/内嵌函数/闭包nonlocal
- python语法32[global与nonlocal比较]
- python语法[global与nonlocal比较]
- Python中global与nonlocal 声明
- python(第二天):global和nonlocal
- Python nonlocal 与 global 关键字解析
- Python nonlocal 与 global 关键字解析
- Python nonlocal 与 global 关键字解析
- Python nonlocal 与 global 关键字解析
- pcharm配置pyqt5(Anaconda3 python环境)做界面开发
- 《计算机网络》谢希仁版学习笔记1-概述
- 使用JitPack管理Android项目中公共模块库
- 问题 A: 例题1_09 闰年判定(逻辑表达式)
- cmd杀进程
- python基础-方法嵌套、就近原则、global、nonlocal、函数即变量
- 二分法查找数组中的元素并返回其对应的索引
- 【论文笔记】In Defense of the Triplet Loss for Person Re-Identification
- 文章标题
- POJ1328-Radar Installation(贪心)
- 文章标题
- Python 获取当前文件所在目录
- uboot启动阶段总结
- catkin_make install 报错 The manifest (with format version 2) must not contain the following tags: run