3-python学习——变量
变量是我所接触过的编程语言中都具有的一个概念,只是这个概念有的强有的弱罢了。
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
的默认值为0
,m
的的默认值为-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': '可以了', '中国': '祖国'}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理