1.3 变量的声明

4/12/2018 Python

# 一、 变量的声明

python语言是动态语言

  • 变量不需要事先声明
  • 变量的类型不需要声明

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

Python 中,变量就是变量,它没有类型,我们所说的 类型是变量所指的内存中对象的类型。

等号(=)用来给变量赋值。

等号(=)运算符左边是一个变量名,等号(=)运算符右边是其指向的具体的值。

a = 1
a = 'liuwq'
1
2

# 二、 变量命名规则

可以包含以下字符

  • 大小写字母(a-z,A-Z

  • 变量名区分大小写; aA 是不同的变量

  • 数字(0-9)

  • 下划线(_)

不可以以数字开头

# 三、 变量命名潜规则:

  • 不要以单下划线和双下划线开头;如:_user__user
  • 变量命名要易读;如:user_name,而不是username
  • 不用使用标准库中(内置)的模块名或者第三方的模块名
  • 不要用这些 Python 内置的关键字:
>>> import keyword ## 进入包文件
>>> keyword.kwlist ## 包文件中的方法
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

> 上面打印出来的数据在 Python 中被称为列表, 列表是 Python中一种数据结构。关于数据结构,后面的章节会详细说明。
>列表的都是 Python3 中的关键字。

#可以使用一下方法验证,返回 True 就是 Python 的关键字
>>> keyword.iskeyword('del')
True
>>>
1
2
3
4
5
6
7
8
9
10
11

# 四、变量赋值

python 中使用等号 = 对变量进行赋值,。

等号左边被称为变量名,等号右边称为变量的值,确切的说是对象

n = 5
1

# 五、Python 中的变量是什么

在 python 中究竟该如何正确理解变量的赋值过程呢?

s = 'hello'
1

以上的变量赋值,应该说成把变量分配给对象更合理。

hello 这个字符串对象会在内存中先被创建,之后再把变量名 s 分配给这个对象。

image.png

所以要理解 Python 中的变量赋值,应该始终先看 等号右边

对象是在右边先被创建或者被获取,在此之后左边的变量名才会被绑定到对象上,这就像为对象贴上了标签。

变量名本质上是对象的标签或者说是对象的名字,当然一个对象可以有多个标签或者名字

比如: 张三 和 小张 指的都是同一个人

请看下面的代码示例:

a = 1
b = a
a = 2
print(b)  # b 会是 ?
1
2
3
4

a = 1 时如下图: image.png

b = a 时如下图: image.png

a = 2 时如下图: image.png

上面的 b = a 我们称它为 传递引用,此时对象会拥有两个名称(标签) ,分别是 ab

# 六、变量的多元赋值

在 Python3 中你可以这样给变量赋值

In [2]: x, y, z = 1, 2, 3

In [3]: x
Out[3]: 1

In [4]: y
Out[4]: 2

In [5]: z
Out[5]: 3
1
2
3
4
5
6
7
8
9
10

当然也可以这样

In [10]: a, b, c = 'abc'

In [11]: a
Out[11]: 'a'

In [12]: b
Out[12]: 'b'

In [13]: c
Out[13]: 'c'
1
2
3
4
5
6
7
8
9
10

假如你需要对一个序列类型中的数据进行一一解开赋值,那就需要等号左边的变量名和序列类型数据中的元素个数相同。

这种多元赋值方式在 Python 中也可以称为元组解包。

# 七、Python 中对象(变量的值)都有三个特性

# 唯一标识,是对象在内存中的整数表示形式,在 CPython 中可以理解为# 内存地址
# 可以用 id 这个函数查看   id() 函数用于获取对象的内存地址。

In [12]: id(10)
Out[12]: 9466912

In [13]: id(n)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-13-072affd611e2> in <module>
----> 1 id(n)

NameError: name 'n' is not defined

##需要提前赋值变量
In [14]: n = 10

In [15]: id(n)
Out[15]: 9466912

# 类型, 对象都有不同的类型,用 type 这个函数查看
In [18]: type(10)
Out[18]: int

In [19]: str_n = "hellow"

In [20]: type(str_n)
Out[20]: str

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29