作者:蔡海洋 链接:https://www.zhihu.com/question/25090486/answer/266513336
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Python 压根就没有变量的概念。用C或C++的变量概念去理解python就会一头雾水。
C、C++中的变量
C/C++中的变量的概念是面向内存的。所以你要声明一个变量:表明空间大小,存储的格式(整数,浮点),以及一个永久不变的名字指向这个变量。
python只有name和object
a = 3
这个语句中 a 是一个名字, 3 是一个object
这个语句其实并不是什么赋值
而是干了以下三件事
- 创建name a
- 创建object 3
- 将name a 关联到 3这个object
以后就可以用a来调用3这个object
所有name在创建时必须关联到一个object。
name可以在创建以后指向任何一个object(包括不同类型)。所以name本身没有类别,他关联的object是有类别的。在python中可以使用type(name)来查看name关联的object的类型。
Python的数据模型(参见手册章3)
python所有的数据都用object(对象)表示对象在创建时有以下属性标识,唯一识别,不可改变,通过id(obj)查看类型,不可改变值,根据类型形式分为mutable(可变),immutable(不可变)
Name(参见手册9.1 以及此文)
对象是用来使用的,比如参与表达式运算,或作为函数参数传递python并不直接使用object,而是使用name的间接方式:将name关联到object,然后name就可以用在表达式。一个object可以被多个name关联。name总是存在于特定的namespace中
直观比喻:
对象,就像一个人,出生时就分配身份证ID,这个终身不变。人可以有不同的name(小明,儿子,父亲,老公)但在特定情境下(namespace)都指的是同一个人。不同情境下(namespace),name可能指代不同人,比如每个家庭都有一个老公。
python语法 “=”的含义C语言中的等号是赋值,而python中的等号大不相同
等号有以下几种形式( 参见7.2 assignment operator10.3.1 )对于等号左边是单一目标的定义
这个与C中的把等号右边的值放入左边的存储空间的概念完全不同
相比C和C++语言,python的概念模型显得很特别。它让编程者,更关注与数据对象的操作,而不是数据存储。这使得编程者能快速的实现想法,而不过多专注于存储细节。当然要使用好python,就要按它的思维方式去思考,这对于从C、C++这种以内存为基础的编程模式转换过来的人来说,可能是一个挑战。但你只要用python,name vs object的思维,很多疑惑都会消除。
作者:蔡海洋 链接:https://www.zhihu.com/question/25090486/answer/266513336
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。