close
当前位置: 物联网在线 > 技术文库 >

Python基础语法-常量与变量

 Python基础语法-常量与变量

Python是一门强类型的动态语言。

字面常量,变量没有类型,变量只是在特定的时间指向特定的对象而已,变量所指向的对象是有类型的。

变量:变量在赋值时被创建,它可以是任何对象的引用,但必须在引用前被赋值。

 Python基础语法-常量与变量

举例来说:当我们如下赋值时:
a = 3 # 给一个对象3赋予变量a

对于上面的赋值,Python将会明确的执行3个步骤来响应这个语句:
创建一个对象代表值3;
如果不存在变量a,就创建变量a;
把变量a与新创建的对象3关联。
变量随着赋值操作出现的。变量和对象是被存储在不同的内存空间中的。变量与对象通过指针相关联。变量永远指向对象且永不指向变量。随着赋值a = 3语句的执行,变量a就变成了对象3的一个引用。

如果你想学习Python可以来这个群,首先是472,中间是309,最后是261,里面可以学习和交流,也有资料可以下载。

变量与对象之间的链接在Python中称之为引用。也就是说,一个引用也就是一种关联,在内存中以指针的形式实现。

变量、对象与引用的区别:
+ 变量 是Python解释器系统表中的一些条目, 它们是用来指向对象的。
+ 对象 是一些列的被分配的内存, 有足够的空间存储与之相关的数据类型。
+ 引用 自动地跟随在变量与对象之间。

对象才有类型, 而变量没有。一个例子:
a = 3 # a是一个整型数据
a = ‘spam’ # 现在是一个字符串了
a = 1.23 # 现在是一个浮点数了

在Python中,事情工作的很简单,再次强调:Names没有类型;只有对象有类型,而不是变量。

变量的命名规则:
只能包含字母、数字和下划线
只能以字母或下划线开头
不能是Python解释器的保留字

共享引用

接下来我们看两个变量同时指向一个对象的情况:
a = 3
b = a

现在,假设我们再进行如下的赋值语句:
a = 3
b = a
a = ‘spam’

现在变量a指向的对象spam。然而变量b却依然指向对象3。赋值意味着创建了新的对象。

共享引用与原地改变

接下来要看的是有一些对象会进行原地改变,那就是Python的可变对象,包括列表,字典及集合。对于一个支持原地改变的对象,我们需要知道共享引用,如果一个改变会影响其他的对象。还是看个例子吧:
L1 = [2, 3, 4]
L2 = L1

L1是一个列表且包含2、3、4三个对象。列表中的元素通过它们的位置进行访问,所以L1[0]指向对象2,它是列表L1的第一个对象。当然列表也是一个对象,就像其他的整数与字符串。当进行上面的两个赋值后,L1与L2都指向了同一个共享的对象。

现在,我们进行如下的赋值:
L1 = 24

这个赋值语句简单地把L1指向了不同的对象;L2依然指向原来的列表。接下来我们进行一些改变:
L1 = [2, 3, 4] # 一个可变的对象
L2 = L1 # L2与L1指向了同样的对象
L1[0] = 24 # 一个原地改变的操作
L1 # L1已经改变了
[24, 3, 4]
L2 # L2也是与L1相同
[24, 3, 4]

上面的例子中,我们并没有改变L1对象本身,只是改变了L1中的一个对象。这种原地改变的操作的情况只出现在可变对象中。举个字典的例子:
d1 = {‘a’: 1, ‘b’: 2}
d2 = d1
d1
{‘b’: 2, ‘a’: 1}
d2
{‘b’: 2, ‘a’: 1}
d1[‘a’] = ‘a’
d2
{‘b’: 2, ‘a’: ‘a’}

我们可以使用copy的方法:
L1 = [2, 3, 4]
L2 = L1[:] # 制作L1的拷贝
L1[0] = 24
L1
[24, 3, 4]
L2 # L2并没有改变
[2, 3, 4]

通过上面的例子我们发现,L1的改变并没有影响L2,L2只是引用了L1的一份拷贝,并不是原来的L1自身,也就说,L1与L2指向了两个不同的内存空间。

接下来谈论另外一个话题,Python会缓存小的整数及小的字符串。举个例子吧:
L = [1, 2, 3]
M = L # M与L指向相同的对象
L == M # 具有相同的值
True
L is M # 依然相同
True
id(L)
4338913608
id(M)
4338913608

通过上面的例子,==判断两个引用的对象是否有相同的值;第二个操作符is是用来判断对象id的,只有两个names指向相同的对象,is比==判断对象是否相同更强壮。is只是简单地比较两个对象的指针。再看一个例子:
L = [1, 2, 3]
M = [1, 2, 3] # M与L指向不同的对象(赋值意味着产生新的对象)
L == M # 具有相同的值
True
L is M # 但是是不同的对象
False
id(L)
4338913480
id(M)
4338915208


(责任编辑:ioter)

用户喜欢...

盘点·GitHub最著名的20个Python机器学习项目

开源是技术创新和快速发展的核心。这篇文章向你展示Python机器学习开源项目以及在分析过程中发现的非常有趣的见解和趋势。 我们分析了GitHub上的前20名Python机器学习项目,发现scikit-Lear...


基础无刷栅极驱动器设计 —— 第2部分

进入这一部分之前,让我们回顾一下 第1部分 : 无刷直流电机很酷(可以帮您结交朋友)。 没有人喜欢谈论实际的硬件(但是我打算这么做)。 分立式和集成式栅极驱动器各有优缺点。 我...


基础无刷栅极驱动器设计 —— 第1部分

有充分的理由说无刷直流电机绝对是电机驱动器中最酷的一款产品。您可以获得更高的效率、功率和扭矩,更低的噪音、电磁干扰(EMI)及振动,更长的电池及电机寿命,更快的速度,更好的产...


机器学习:朴素贝叶斯--python

今天介绍机器学习中一种基于概率的常见的分类方法,朴素贝叶斯,之前介绍的KNN, decision tree 等方法是一种 hard decision,因为这些分类器的输出只有0 或者 1,朴素贝叶斯方法输出的是某一类...


机器学习:决策树--python

今天,我们介绍机器学习里比较常用的一种分类算法,决策树。决策树是对人类认知识别的一种模拟,给你一堆看似杂乱无章的数据,如何用尽可能少的特征,对这些数据进行有效的分类。...


python的位置参数、默认参数、关键字参数、可变参数区别

一、位置参数 调用函数时根据函数定义的参数位置来传递参数。 #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_dict = {1: u'先生', 2: u'女士'} print 'hello %s %s, welcome to python world!' %(name, sex...


【科普】卷积神经网络(CNN)基础介绍

本文是对卷积神经网络的基础进行介绍,主要内容包括卷积神经网络概念、卷积神经网络结构、卷积神经网络求解、卷积神经网络LeNet-5结构分析、卷积神经网络注意事项。 一、卷积神经网络...


Python并行处理

原文:Parallel Processing in Python  作者:Frank Hofmann  翻译:Diwei 简介 当你在机器上启动某个程序时,它只是在自己的“bubble”里面运行,这个气泡的作用就是用来将同一时刻运行的所有程序进...


Python开发者必备6个基本库

原文:6 essential libraries for every Python developer  作者:Serdar Yegulalp  翻译:Peter 译者注:无论你是想快速入手Python还是想为Python应用程序构建本地UI,亦或者对Python代码进行优化,本文列举的...


Python正则表达式的七个使用范例

作为一个概念而言,正则表达式对于Python来说并不是独有的。但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别。 本文是一系列关于Python正则表达式文章的其中一部分。在...