变量是我所接触过的编程语言中都具有的一个概念,只是这个概念有的强有的弱罢了。

1、什么是python的变量

变量这个东西怎么解释呢?不怎么好说。

这么说吧,变量就相当于一个代名词,或者说是名字。

计算机处理的都是二进制的数据,而变量就代表了一些二进制数据。

例如变量a给它赋值为5,那么a就代表了一块内存区域,这块区域保存的数据是5。然后又让a="nihao",那么a就不在代表那块保存数据5的内存区域了,而改为代表保存了数据"nihao"的内存区域。

2、变量声明与赋值

python变量与C/C++这些强类型编程语言不同,它是弱类型的,也就是变量的类型并不是从一而终的(一次确定,终身不变)。

python的变量,与对应内存区域的关系是可变的。当重新给变量赋值的时候,如果新赋值的类型与当前保存数据的类型不同,将会重新分派内存区域。

我们并不需要显示的声明一个变量,实际上这也行不通。可以看下面

>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> print(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

我们这里想声明一个变量,但是会报错,原因是它不知道这个x是什么。

变量赋值

我们在声明变量的时候,必须给变量赋一个初始值。

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

赋值方式以 变量 = 。等于号=的左边是变量,右侧的是在变量中存储的值。

举个例子

下面什么了三个变量,然后输出了一下。

再对x重新赋值为字符串"你好",然后重新输出。

对于中文字符串,这里输出的是十六进制的结果。如果在python3.x下,是可以正常输出中文的。

>>> x=123
>>> y=345
>>> z=x*y
>>> print(x,y,z)
(123, 345, 42435)
>>> x="你好"
>>> print(x,y,z)
('\xe4\xbd\xa0\xe5\xa5\xbd', 345, 42435)

多重赋值:

  • Python允许同时指定一个值给几个变量。例如:
>>> a=b=c=123
>>> print(a,b,c)
123 123 123
  • 这里,整数对象创建的值1,并且所有三个变量被分配到相同的内存位置。您也可以将多个对象分别到多个变量。例如:
>>> a,b,c=1,"你好",'X'
>>> print(a,b,c)
1 你好 X

变量的删除

变量的删除可以使用del来进行。

>>> str="操作系统:ubuntu-15.04"
>>> print(str)
操作系统:ubuntu-15.04
>>> del str
>>> print(str)
<class 'str'>

3、python变量的类型

python能够表示的数据类型有五种

  • 数字
  • 字符串
  • 列表
  • 元组
  • 字典

这里并不打算进行非常细致的分析,遵循够用就好的原则来进行说明。

数字

数字是用于表示数值的类型,包括整数,浮点数,复数。

  • 浮点数就是实数,或者通俗点说就是有小数部分的数。

  • 整数又包括一般的有符号整数(int)和长整型数(long),长整型数在表示的时候用一个后缀L或者l表示,通常使用大写的L,避免混淆。注意:这个在python3.x中行不通了,python3.x中整数都是int类型。

  • 复数就是complex了,这里表示与我们在中学时候学习的可能有一点区别。中学时候学的是虚部加i表示,这里是虚部加j表示。也就是类似与1+2j的形式。

python2.7下的示例

>>> a,b,c,d = 100 , 10.3, 10+5j, 9901L
>>> print(type(a),type(b),type(c),type(d))
(<type 'int'>, <type 'float'>, <type 'complex'>, <type 'long'>)

python3.4下的示例

>>> a,b,c,d = 100 , 10.3, 10+5j, 99019999999999999999999999999999999
>>> print(a,b,c,d)
100 10.3 (10+5j) 99019999999999999999999999999999999
>>> print(type(a),type(b),type(c),type(d))
<class 'int'> <class 'float'> <class 'complex'> <class 'int'>

上面没有说负数和整数的进制的。python的数据类型是可以为负数的。整数也可以用十六进制或八进制来表示的。

>>> a,b,c = -15,-0x7f,80-5j
>>> print(a,b,c)
-15 -127 (80-5j)
>>> print(a,hex(b),c)
-15 -0x7f (80-5j)

字符串

  • 字符串是被单引号或者双引号括起来的一串字符序列。
  • 对于字符串的整体的引用,直接使用变量名就是了。如果只是引用其中的部分,那么可以使用类似name[n:m]来表示。
  • python的字符串也可以看做一个字符数组,下标是从0开始的。如果我们要引用其中的某个元素,可以使用变量名[下标]的方式。如果是想引用倒数第几个,那么使用负数就是了,倒数第一个的下标为-1

举个例子,先定义一个字符串str,然后输出它或者它中间的一部分。

注意:使用中括号引用字符串中间的部分的时候如name[n:m]实际上代指的是字符串name中索引在半闭半开区间[n,m)的元素。n的默认值为0m的的默认值为-1

>>> str="0123456789"
>>> print(str)
0123456789
>>> print(str[:]) #中括号内不写数字,直接写冒号也是引用整个字符串
0123456789
>>> print(str[2]) #输出索引为2的元素
2
>>> print(str[2:4]) #输出索引从2开始,到索引为4之间的元素
23
>>> print(str[2:-3]) #输出索引从2开始,到倒数第三之间的元素
23456
>>> print(str[2:]) #输出索引从2开始,到最后的元素
23456789
>>> print(str[:-3]) #输出索引从0开始,到倒数第三之间的元素
0123456
  • 字符串可进行加操作,其结果是两个字符串拼接起来的。字符串还可乘以一个正整数,其结果是该字符串重复多次拼接自身组成新字符串。(如果乘以一个负数,将变成空字符串)
>>> print(list[-1])
你好
>>> str="你好"
>>> print(str+"吗?")
你好吗?
>>> print(str*3)
你好你好你好

列表

  • 列表是最通用的Python复合数据类型。列表中包含以逗号分隔,并在方括号([])包含的项目。

  • 列表和C语言的数组很像,但是列表的各个元素类型是可以不一致的。例如list=[1,'c',"234",3.5]这个列表的元素类型不一致。

  • 上面说过的字符串可以看做列表的一种特殊形式。列表中的元素也有类似与字符串中元素那样的访问形式list[n:m]。这里就不详述了,看示例。

注意下面的输出,有中括号的代表输出的是一个列表,没有的表示是一个元素。

>>> list=[1,2.3,"你好"]
>>> print(list)
[1, 2.3, '你好']
>>> print(list[:]) #打印列表所有元素
[1, 2.3, '你好']
>>> print(list[1]) #打印列表第二个元素(索引为1)
2.3
>>> print(list[1:3]) #打印列表第2到第3个元素元素(索引为1-2)
[2.3, '你好']
>>> print(list[-1]) #打印列表最后一个元素(索引为-1)
你好
  • 列表也可以进行加操作,其结果是两个列表的合并。也可以乘以一个正整数,结果是该列表重复多次。(如果乘以一个负数,其结果是一个空列表)
>>> print(list*3)
[1, 2.3, '你好', 1, 2.3, '你好', 1, 2.3, '你好']
>>> print(list+["+++",100,99.8])
[1, 2.3, '你好', '+++', 100, 99.8]
  • 列表中的元素是可以修改的。这么来说,列表中的元素是变量,列表其实就是多个变量的集合。
>>> print(list)
[1, 2.3, '你好']
>>> list[1]="请问"
>>> print(list)
[1, '请问', '你好']
  • 列表不可以越界访问,否则将报错。
>>> list[3]="?"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
  • 列表的扩展可以使用+=来进行,并不能直接隐式扩展。
>>> print(list)
[1, '请问', '你好']
>>> list+=[100]
>>> list+=["呵呵"]
>>> print(list)
[1, '请问', '你好', 100, '呵呵']
  • 列表中元素的删除可以使用del来进行
>>> print(list)
[1, 2, 100, 'da', 4, 5, 6]
>>> del list[2:4]
>>> print(list)
[1, 2, 4, 5, 6]

元组

  • 元组是类似于列表中的序列数据类型。一个元组由数个逗号分隔的值。不同于列表,不过,元组圆括号括起来。

  • 列表和元组之间的主要区别是:列表使用中括号[]表示,而元组使用小括号()表示。列表中的元素是变量,而元组中的元素是常量,是不可以再改变的。但是元组是可以被重新赋值的,不能改变的只是其元素。要明白python的变量是弱类型的。(原因很简单,你可以给一个变量赋值100,然后又给它赋值为200,但是你不能给100赋值为200吧。100=200不好)

>>> tuple=(100,"头","牛")
>>> print(tuple)
(100, '头', '牛')
>>> print(tuple[2])

>>> print(tuple[1:-1]) #输出元组,当输出的元组只有一个元素
#的时候,元素后会加逗号来标识为元组
('头',)
>>> tuple[2]="猪" #视图改变元组的元素,报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tuple=(123,321) #重赋值给这个变量tuple
>>> print(tuple)
(123, 321)
  • 不能从元组中删除元素。
>>> tuple=(1,2,3,4)
>>> del tuple[1:3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item deletion
>>> tuple=tuple[1:3]
>>> print(tuple)
(2, 3)

字典

  • 字典,dictionary。这是很有用的一个数据结构。C++标准模板库(STL)中的map和这个很像。说白了就是键值对嘛。一个key对应一个value
  • 字典的键通常用数字或者字符串(不可以用列表作为键,但元组可以。因为key必须是不可变的)。值也可以是python支持的任意类型。值有重复的,但是键都是唯一的。
>>> dict={1:"你好","2":"可以了",[0,9]:3.14159}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list' #用列表为键出现错误
  • 字典是由花括号括号{},可分配值,并用方括号(dictionary[key])访问value
>>> dict={1:"你好","2":"可以了",(0,9):3.14159}	#构建字典
>>> print(dict)
{(0, 9): 3.14159, 1: '你好', '2': '可以了'}
>>> print(dict.keys()) #输出所有键key
dict_keys([(0, 9), 1, '2'])
>>> print(dict.values()) #输出所有值value
dict_values([3.14159, '你好', '可以了'])
>>> print(dict["2"]) #引用key "2"对于的value
可以了
  • 字典可以添加元素,修改key对应的value
>>> print(dict)
{(0, 9): 3.14159, 1: '你好', '2': '可以了'}
>>> dict[(0,9)]={1:1,2:[123,345]} #修改,值可以是一个字典
>>> print(dict)
{(0, 9): {1: 1, 2: [123, 345]}, 1: '你好', '2': '可以了'}
>>> print(dict[(0,9)][2]) #引用key对于value
[123, 345]
>>> dict["中国"]="祖国" #添加元素
>>> print(dict)
{(0, 9): {1: 1, 2: [123, 345]}, 1: '你好', '2': '可以了', '中国': '祖国'}
  • 引用不存在的元素的时候,会报错。可以使用in来确定key是否存在。
>>> print(dict["猴子"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '猴子'
>>> "猴子" in dict
False
  • 字典元素的删除,可以同样也是使用del操作。
>>> print(dict)
{(0, 9): {1: 1, 2: [123, 345]}, 1: '你好', '2': '可以了', '中国': '祖国'}
>>> del dict[(0,9)]
>>> print(dict)
{1: '你好', '2': '可以了', '中国': '祖国'}

3-python学习——变量的更多相关文章

  1. python学习 变量的操作 与 基本数据类型

    一变量(本文使用python3.5): #变量:是计算机内存中的一块区域,变量可以存储规定范围内的值,变量可以改变#在python中变量是计算机内存中数据的引用 python的变量没有明显的类型,具体 ...

  2. python学习-变量和简单类型(二)

    学习笔记中的源码:传送门 1.注释: 单行注释(#):多行注释("""或者''') 2.python标准数据类型:数字(numbers).字符串(string).列表(l ...

  3. Python学习-------变量和简单的数据类型(String)

    1.变量命名和使用 变量命名规则:a.变量名只能包含(字母    数字   下划线),且变量不能以数字开头,例如:变量 s_1(正确),变量1_s(错误) b.变量名不能包含空格,可以使用下划线来间隔 ...

  4. Python学习-变量

    什么是变量? 概念:变量就是会变化的量,主要是“变”与“量”二字.变即是“变化”. 特点:与其他编程语言相同,变量是最基本的存储单位,是用来存放数据的容器.可以引用一个具体的数值,进而直接去改变这个引 ...

  5. python学习第三讲,python基础语法之注释,算数运算符,变量.

    目录 python学习第三讲,python基础语法之注释,算数运算符,变量. 一丶python中的基础语法,注释,算数运算符,变量 1.python中的注释 2.python中的运算符. 3.pyth ...

  6. Python 学习笔记2 变量

    Python变量的一些命名规则和指南 每种编程语言都需要变量, 这些变量的命名,我们一般会遵守一些公认的规则. 已达到方便自己,他人阅读的好处. 变量只能包含字母.数字和下划线.变量可以以字母和下划线 ...

  7. Python学习之变量的作用域

    学习地址:http://www.jianshu.com/p/17a9d8584530 1.变量作用域LEGB 1.1变量的作用域 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空 ...

  8. Python学习笔记(1)——Python的概述(Python的环境、变量、数据类型、基本运算)

    Table of Contents 1. Python概述 1.1. Python基础知识 1.2. 运行环境 1.3. Python的格式 1.4. Python的变量. 2. Python的数据类 ...

  9. (转)Python学习笔记(1)__name__变量

    Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行.每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行.为了区分 主执行代码和被调用文件,Python引入 ...

  10. Python学习基础教程(learning Python)--2.2.1 Python下的变量解析

    前文提及过变量代表内存里的某个数据,这个说法有根据么? 这里我们介绍一个python内建(built-in)函数id.我们先看看id函数的帮助文档吧.在python查某个函数的帮助文档很简单,只用he ...

随机推荐

  1. 关于软件工程个人作业 Word frequency program 的总结

    一.预计花在程序各部分的时间: (1)对所给命令行参数的判断和处理,看它是否合法.是哪种模式.预计用时20min; (2)关于目录操作:遍历给定目录下的所有文件,包括子目录和非目录文件.预计用时40m ...

  2. Embedding Scripts

    Mono http://www.mono-project.com/docs/advanced/embedding/ http://www.mono-project.com/docs/advanced/ ...

  3. 使用Topshelf 开发windows服务

    在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发.如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 ...

  4. zencart分类页产品页去掉url中的id号

    最近公司新上的网站被seo指出要修改url,去掉url中产品id.由于我们用的是zencart框架,装了 Ultimate SEO URLs 插件,所以在网上应该有这方面的资料,本文主要参考资料: 原 ...

  5. Struts2 中Parameters是如何获取值的

    刚刚学习struts2的知识,在练习struts2的默认语言OGNL过程中,对于<p>parameters:<s:property value="#parameters.u ...

  6. Spring与Quartz的整合实现定时任务调度 以及crontab的用法

    最近在研究Spring中的定时任务功能,最好的办法当然是使用Quartz来实现.对于一个新手来说,花了我不少时间,这里我写个笔记,给大家参考. 我使用的是Maven来管理项目,需要的Jar包我给大家贴 ...

  7. webstorm总结

    webStorm修改文件类型,文件着色 File->Settings->Editor->File Types

  8. Orchard源码分析(6):Shell相关

    概述在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点. Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点.对比来 ...

  9. svn强制解锁的几种做法

    标签: svn强制解锁 2013-12-16 17:40 12953人阅读 评论(0) 收藏 举报  分类: SoftwareProject(23)  版权声明:本文为博主原创文章,未经博主允许不得转 ...

  10. PHP使用数据库的并发问题(转)

    在并行系统中并发问题永远不可忽视.尽管PHP语言原生没有提供多线程机制,那并不意味着所有的操作都是线程安全的.尤其是在操作诸如订单.支付等业务系统中,更需要注意操作数据库的并发问题. 接下来我通过一个 ...