python 怎么提前声明类 python 声明类型

您所在的位置:网站首页 变量variable有什么类别 python 怎么提前声明类 python 声明类型

python 怎么提前声明类 python 声明类型

#python 怎么提前声明类 python 声明类型| 来源: 网络整理| 查看: 265

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中的等号大不相同

对于等号左边是单一目标的定义

1,name = object目标是indentifier(name)

将object关联到当前namespace,

如果当前namespace没有这个name就创建

2,mutable.attr=object目标是一个可变对象的属性

对象属性被修改为(或者说指向)object

这个与C中的把等号右边的值放入左边的存储空间的概念完全不同。其它的类型赋值语句可以自己看手册。

对象的可变与不可变

python奇特的可变数据numbers(整数,浮点,布尔等)不可变,对!不可修改

list,dict之类的容器类对象,是可变对象注意,容器实际存储的是对象的reference

可变是指reference可变,也就是可以把reference指向新的object

语法上a=list[0]返回的是list的0位置reference关联的object的值

list[0]=4,实际是将list的0位置reference改成关联到4这个对象

也就是说,python压根就不能直接修改基础对象的值,只能修改容器中的renference

几个小实验

这个测试中如果按C语言,对I存储空间赋值理解,id应该不变,但事实是变的

以python的name关联来理解,每个循环步骤,i关联到不同的数字object,所以ID不同

这个试验中修改list,0位置的中的值,导致0位置ID的变化

说明list存储的是reference,

这个试验中a在做加法后id变了,也就是不是同一个object了

这与C语言的赋值大不相同

python只有对象和name,基础的数据不可修改,所以在加法后创建了新的object用于存储结果,然后重新关联到name a

写在最后

相比C和C++语言,python的概念模型显得很特别。它让编程者,更关注与数据对象的操作,而不是数据存储。这使得编程者能快速的实现想法,而不过多专注于存储细节。

当然要使用好python,就要按它的思维方式去思考,这对于从C、C++这种以内存为基础的编程模式转换过来的人来说,可能是一个挑战。但你只要用python,name vs object的思维,很多疑惑都会消除。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3