python对象、引用、全局变量和局部变量的关系
2016-11-22 08:50
597 查看
使用的python的过程中,习惯性按照C++的思维来理解python,导致一些困惑,例如下面这个例子。
ga是一个全局变量,lb是函数fun()里面的局部变量,而且在函数fun()里面先把lb赋值给ga后,lb的n才被赋值为2,当这个函数执行完以后,ga.n竟然也跟着变为2了。
因为python通过引用来访问数据的值。
引用是什么?
引用是对象的别名,对象和引用的关系就像是你的大名和小名的关系,都能找到你。
所以在python里面,不管是全局变量还是局部变量,都是引用。
这和c语言是不一样的,大家应该都记得学习c语言时候那个著名的交换数据的swap函数,函数的参数是形参就是不能交换成功,得定义为引用才行。
但话又说回来,变量还是会区分作用域的,例如lb在函数外访问就报not defined,如例子所示。
好了,现在明白了。
下面再给出点补充知识,来自《python技术手册》第二版4.3节“变量和其他应用”
1.不管是全局变量还是局部变量,只要存在对对象的引用,对象就不会消失,始终保持在内存
2.引用可以表现为变量、属性和项目的形式
3.通过赋值语句(=),将对象的引用绑定到变量上;通过del语句,可以取消对引用的绑定
4.对象的属性(attribute)和项目(item)之间的区别在于访问的语法不同。对象的属性是通过该对象的引用,后面再带一个点号和属性名来表示;项目是通过该对象的引用,后面带一个方括号中的表达式来表示的。方括号的表达式被称为该项目的索引(index)或键(key),而该对象被成为这个项目的容器(container)。
美貌与智慧并重如你,一定会关注我的公众号zhixin991
ga是一个全局变量,lb是函数fun()里面的局部变量,而且在函数fun()里面先把lb赋值给ga后,lb的n才被赋值为2,当这个函数执行完以后,ga.n竟然也跟着变为2了。
>>> class cls(object): ... n = 1 ... >>> ga = cls() >>> ga.n = -1 >>> print ga.n -1 >>> def fun(): ... global ga ... lb = cls() ... ga = lb ... lb.n = 2 ... print lb.n ... >>> fun() 2 >>> print ga.n 2 >>> print lb.n Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'lb' is not defined >>> print ga.n 2
因为python通过引用来访问数据的值。
引用是什么?
引用是对象的别名,对象和引用的关系就像是你的大名和小名的关系,都能找到你。
所以在python里面,不管是全局变量还是局部变量,都是引用。
这和c语言是不一样的,大家应该都记得学习c语言时候那个著名的交换数据的swap函数,函数的参数是形参就是不能交换成功,得定义为引用才行。
但话又说回来,变量还是会区分作用域的,例如lb在函数外访问就报not defined,如例子所示。
好了,现在明白了。
下面再给出点补充知识,来自《python技术手册》第二版4.3节“变量和其他应用”
1.不管是全局变量还是局部变量,只要存在对对象的引用,对象就不会消失,始终保持在内存
2.引用可以表现为变量、属性和项目的形式
3.通过赋值语句(=),将对象的引用绑定到变量上;通过del语句,可以取消对引用的绑定
4.对象的属性(attribute)和项目(item)之间的区别在于访问的语法不同。对象的属性是通过该对象的引用,后面再带一个点号和属性名来表示;项目是通过该对象的引用,后面带一个方括号中的表达式来表示的。方括号的表达式被称为该项目的索引(index)或键(key),而该对象被成为这个项目的容器(container)。
美貌与智慧并重如你,一定会关注我的公众号zhixin991
相关文章推荐
- python的全局变量(属性的用法),私有属性,计算对象引用数
- python的全局变量(属性的用法),私有属性,计算对象引用数
- python学习(九)python中的变量、引用和对象的关系
- Python笔记(2):多参数,全局变量与局部变量,层状作用域,函数式编程,面向对象
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- 全局变量,局部变量,静态变量,寄存器变量的存储及关系
- python中的局部变量与全局变量
- Python语法基础——关于全局变量与局部变量
- [零基础学Python]深入变量和引用对象
- python 局部变量和全局变量 global
- Python函数中的局部变量和全局变量
- C++ 全局对象 全局变量和局部变量 静态变量
- Python学习笔记(2)-局部变量与全局变量
- 跟老齐学Python之深入变量和引用对象
- python 学习笔记之 全局变量和局部变量
- Python Special Syntax 1: Python的局部变量和全局变量
- MFC类的组织(类之间的关系)与WinMain函数、theAPP、构造函数、以及全局变量(对象)之间的关系
- python 局部变量和全局变量 global
- python开发_python中的变量:全局变量和局部变量
- python全局变量和局部变量