3. 变量与数据类型
变量
-
变量是一种变化的量,程序执行的本质上就是一系列状态的变化,变是程序执行的直接体现,所以需要一种机制能够反映或者说是保存下来程序执行时的状态,以及状态的变化,因此出现了变量
-
变量的使用:先定义后引用
- name='奇点' # 定义
- print(name) # 引用
-
变量的三大组成部分:
-
变量名:指向等号右侧值得内存地址,用来访问等号右侧的值
命名原则:不要使用拼音,不要使用中文,在见名知意的基础上,尽可能的短,可读性要高,除此之外,还要符合以下原则
数字字母下划线组成
不能以数字开头
不能是python的关键字,会造成关键字的覆盖,导致关键字不能用了
命名风格:
纯小写加下划线的方式birth_age(python中的变量名命名建议这个)
大驼峰体:所有单词首字母大写,BirthAge
小驼峰体:除第一个单词外,其它单词首字母大写,birthAge -
赋值符号:将变量的内存地址绑定给变量名
-
变量值:代表记录事物的状态
id:反映的是变量值的内存地址,内存地址不同,id不同——》id(变量名)进行查询
type:不同的值记录不同的状态——》type()
value:代表的是值本身
-
-
is和==的区别:
- is是比较左右两个值的身份id是否相同
- ==是比较两个值是否相同
- 值相同,id不一定相同(两块不同的空间可以存储一样的值),id相同,值一定相同
-
小整数池:python解释器启动时,会在内存中申请一系列的空间存放常用的整数(就是提前进行缓存,当你将这些整数赋值给变量时,不用创建对象而是直接进行引用),方便python调用,这些整数的范围是-5256的整数,换句话说-5256中的整数是一个内存空间,257是另外一个内存空间(可通过python解释器验证),对于字符串来说,是将一些具有一定规则的字符串放在字符串驻留池中,变量使用时也是直接引用
常量:
在程序运行中不会改变的量,在程序运行中,有些值是固定的,不应该被改变,比如圆周率π
python语法中没有常量的概念,但是程序开发中会涉及常量的概念,所以约定俗成以全大写的变量名为常量
基本数据类型
通过作用、定义、使用方法三个方面来学习
整型int:
就是整数
浮点型float:
就是小数
字符串类型str:
定义:'你好'/"你好"/"""你好"""/'''你好''' 四种定义方法(三连可以多行表示)
字符串中想要显示引号的办法:
内外的引号不一致'abc"d"'
使用转义字符反斜杠'abc\'d\''
字符串的拼接:
-
字符串之间可以相加,但是拼接的效率很低,所以不推荐使用
"a"+"b"="ab"
字符串之间的相加,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串2,相当字符串1与字符串3的空间被复制了一次,效率很低
-
只能字符串加字符串,不能字符串加其他类型
列表类型list:
定义:中括号里面放元素,可以存放n个任意类型的值,列表是有序的数据类型——》l=[1,'a',1.1,[1,2,3]]
取值:l[0]——》结果是1
索引对应值,索引从0开始,0代表第一个,索引可以倒数取值,倒数第一个的索引是-1
用途:记录多个值,通过索引精准定位取值
字典类型dict:
定义:由键值对(key:value)组成,其中key通常是字符串类型d={'name':'david','age':13},其中key必须是不可变的数据类型,value可以是任意的数据类型
作用:存储多个值,每个值都有唯一一个key与之对应,key对值有描述性功能,方便取值
取值:通过key来取值——》d['name']结果是'david'
字典是没有顺序的数据类型
布尔类型bool:
定义:只有两个值True和False
显式布尔值:就是比较的结果,比如3大于2的结果就是true,或者直接就是true
隐式布尔值:0、空字符串、空列表、空字符串、None代表的是false,其他的数据代表的都是true
作用:记录真假两种状态
# 所有数据类型都自带布尔值
1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2、其余均为真
可变与不可变类型
可变数据类型:值改变时,id不改变,证明改变的是数据本身,证明原值是可以改变的
list、dict,set
不可变数据类型:值改变时,id改变,证明产生了新的值,原值没有改变,无法被修改
int、float、str、bool,tuple
简单的说,不可变的数据类型被认为是python中元素的最小单位,不可再被分割引用,但是可变的数据类型,可被看成是一个容器,其中存放的是元素的地址,当元素改变时,改变是其实是里面的元素的地址改变了,可变数据类型本身的地址没变
- 类型转换
# 转换成整数类型
print(int(1))
print(int(1.1))
print(int('1'))
# print(int('1.1')) # 转换错误
# print(int('abc')) # 转换错误
# 转换成浮点类型
print(float(1))
print(float(1.1))
print(float('1.1'))
print(float('1'))
# print(float('abc')) # 转换错误
# 转换成字符串类型
print('| ' + str(1) + ' |')
print('| ' + str(1.1) + ' |')
print('| ' + str('1') + ' |')
print('| ' + str('1.1') + ' |')
print('| ' + str('abc') + ' |')
print('| ' + str(True) + ' |')
# chr 函数
# 将一个数字转换成字符
print(chr(48)) # '0'
print(chr(65)) # 'A'
print(chr(97)) # 'a'
# ord 函数
# 转换一个字符转换对应的数字编码
print(ord('0'))
print(ord('A'))
print(ord('a'))
用户交互(输入输出)
-
将结果输出给用户:print()函数
格式化输出:
# 1 %字符串格式化输出 'my name is %s,my age is %s' %('libai','18') # 按位置传值 'my name is %(name)s,my age is %(age)s' %{'name':'libai','age':'18'} # 以字典的形式传值 # %s可以接收字符串,也可以接收数字 # %d只能接收数字 # 2 str.format方法 'my name is {},my age is {}' .format('libai','18') # 按照位置传值 'my name is {0},my age is {1}' .format('libai','18') # 按照索引 'my name is {name},my age is {age}' .format(name='libai',age='18') # 按照键值对进行传值 # 格式化显示 'my name is {name=<10}'.format(name='libai') # 表示的含义是共10个字符的长度,name靠左显示,剩下的位置用等号填充,"libai=====",大于号是靠右显示,^是居中显示 'my age is {age:.3f}'.format(age=18.1111111) # 显示的是保留三位小数,处理的方式是四舍五入 # 3 f字符串方法(这种方法python3.5以后才有) f'my name is {name},my age is {age}' f'{print('nihao')}'--->nihao f'{10+3}'--->13 speaker = f'Hi {name}.'\ f'You are {age} years old.'\ f'You are a {ajd} guy!' # 多行显示 # ! , : { } ;这些标点不能出现在{} 这里面。 # print(f'{;12}') # 报错 # 所以使用lambda表达式会出现一些问题。 # 解决方式:可将lambda嵌套在圆括号里面解决此问题。 x = 5 print(f'{(lambda x: x*2) (x)}') # 10 # 花括号内的字符串会被当做表达式来运行 # 占位符 ''' %d 以整数输出 %3d 输出时,数据占3个字符宽度 %03d 输出时,数据占3个字符宽度 ,当数字不足三个字符时,前缀补0 001 %-3d 输出时,数据占3个字符宽度 , 左对齐 %f 以小数输出 %.3f 小数点后保留位数是3位 %s :字符串 字符串的占位符比较厉害,能够为整型、浮点型、布尔值占位 ''' -
接收用户输入:input("请输入你的账号:")函数
python3中输入的内容是字符串
在python2中有一个函数raw_input():用法与input一致,在python2中,input的用法不同,在输入时必须声明数据的类型,输入的数据是什么类型,就存成什么类型的数据
pycharm中的提示性信息
三种波浪线:
- 灰色是显示语法存在错误,但是不影响使用。
- 绿色是单词的拼写可能存在问题,不影响使用。
- 红色是语法的错误,必须要进行修改。
运算符
1.算术运算符
+、-、*、/、//整除、%取余(模运算)、**乘方
优先级与算术运算一致。
2.比较运算符
| == | 等于(=是赋值) |
|---|---|
| != | 不等于 |
| < | 小于 |
| > | 大于 |
| <= | 小于等于 |
| >= | 大于等于 |
字符串的比较运算
==、!=比较的是字符串是不是一致
<、> 等判断时比较的是字符的ASCII码
总的来说就是数字<大写字母<小写字母
当多个字符的时候,比较的原理是第一个和第一个比,再第二个和第二个比……
3.赋值运算符
- 变量的赋值:=
- 增量赋值:a+=1(a=a+1)、-=、*=、/=、**=
- 链式赋值:x=y=z=10(注意是从右向左开始赋值的)
- 交叉赋值:m=10 n=20 交换值 ——》 m,n=n,m
- 解压赋值:l=[1,2,3,4,5,6] a,b,c,d,e,f=l 解压赋值,必须一一对应,当列表元素特别多时用a,b,c,*_=l,abc一一对应,4,5,6三个数据会被星号聚合成列表传递给下划线,下划线接收废弃的数据,但是这种方法只能帮助取两边的值,不能取中间的值(解压字典默认解压的是key)
注意:对于a+=1这种复合赋值运算,在进行运算时,等效于展开,但并没有展开,举例来说就是10=5+3并不是先算10=5,再加上3,而是先算5+3=8,再算10*8
4.逻辑运算符
-
and:与,两者必须同时为真才为真,比较非零数字的时候取后面
-
or:或,两者满足一个是真就为真,非零数字比较的时候须选前面
-
not:非,就是取反
-
优先级:算术运算>比较运算>not>and>or
-
短路运算:
10>13 and true # 所谓短路运算就是进行逻辑运算时,判断and时如果前面是false,就不继续向下判断,直接返回前面的结果false,同理,or运算前面是true的时候,直接返回true,不会继续向下运算
5.成员运算符
in 和 not in:判断元素是否在容器类数据类型中(字符串也可以使用)
6.身份运算符
is :判断id是否相同,如果两个数据的id相同,则一定是相等得(==),但是如果两个数据的值相等,id不一定相同
==:判断的是值
函数介绍print()和len()
print()函数就是打印,需要注意的是,print这个函数是没有返回值的,无法传递给变量,也就是传递给变量之后,显示的结果是none
打印多个对象的时候用逗号隔开就行
end是设置每一行结束之后的标点,默认情况下是换行(end='\n'),这也是为什么两个print的内容默认呈现两行的原因
len()函数是将可迭代对象的长度计算出来

浙公网安备 33010602011771号