内容概要
day04:变量与基本数据类型(全为重点)
1. 变量
变量的基本使用
变量的三大组成部分
变量名命名规范
变量名命名风格
变量值的三个特征
id
type
值
is与==
小整数池(了解)
垃圾回收机制之引用计数
常量
2. 基本数据类型
数字类型:int、float
字符串类型
列表类型
字典
布尔值
4.1 写代码的思想
代码质量:程序的可读性和可维护性,不是越短的代码越好。
4.2 理解所有python语法的万能法则
1.xxx是什么?
窍门:提取知识点名词中的关键字来加以解释
2.为什么要有它?
大前提:python语言中出现的所有语法都是为了让计算机能够具备人的某一功能/像人一样去做事。
4.3 什么是变量?为何要有变量?
什么是变量?
变量就是可以变化的量,量指的是事物的状态,比如人的年龄、游戏等级等等
为什么要有变量?
为了让计算机能够像人一样能够记录事物的某种状态,并且状态是能够发生改变的
详细地说:
程序执行的本身是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或...
如何使用变量?
原则:先定义,后引用
# 1.变量的基本使用 # 原则:先定义,后引用 name = 'egon' # 定义 print(name) #引用
自己理解:各种类型的数据对应的是变量后的值。
4.4 变量的内存管理
内存管理:垃圾回收机制
垃圾:当一个变量值被绑定的变量名的个数为0时,该变量无法被访问到,称之为垃圾。
引用计数:
引用计数就是:变量值被变量名关联的次数
引用计数增加:
name = 'egon' # egon的引用计数为1 x = name # egon的引用计数为2 y = name # egon的引用计数为3
引用计数减少:
解除变量名与值的绑定关系
del x # egon的引用计数变为2 del y # egon的引用计数变为1 z = 123 # egon的引用计数变为0, 但是egon依然存在,这样就取不到egon,成为了垃圾
引用计数变成0的值,就无法通过变量名进行访问,就成为了垃圾。python解释器提供了一种功能,会在内存进行扫描,遇到引用计数为0的直接进行回收。
4.5 变量名的命名
如果代码写的不规范,pycharm文件中会出现波浪线,可以使用以下方法进行格式化:
1. Code>>>Reformat Code
2. File>>>Settings>>>Keymap
变量的三大组成部分;
1.变量名:指向等号右侧值的内存地址,用来访问等号右侧的值
2.赋值符号:将变量值的内存地址绑定给变量名
3.变量值:代表记录的事物的状态
变量名命名规则:
原则:见名知意
1.由字母、数字、下划线组成
2.不能由数字开头
3.关键字不能声明为变量名
4.不要用拼音,不要用中文,在见名知意的前提下尽可能简短
5.变量的命名风格:
纯小写加下划线,如age_of_alex(在python中,关于变量名的命名,推荐使用这种方式)
驼峰体,如AgeOfAlex
4.6 身份运算is与==
变量值的三个重要特征:
id:反映的是变量值的内存地址,它不是内存地址,是根据变量值的内存地址计算出来的id号码
type:不同类型的值表示用来记录不同的状态
value:值本身
name = 'egon' # 定义 print(id(name)) # 查看id 2724179244400 print(type(name)) # 查看type <class 'str'> print(name) # 访问值本身
is与==
is:比较左右两个值的身份id是否相同
==:比较左右两个值它们的值是否相同
# 黑窗口中:
>>> x = 'info:alex:18'
>>> y = 'info:alex:18'
>>> x == y
True
>>> x is y
False
pycharm中:
x = 'info:alex:18'
y = 'info:alex:18'
print(x == y) True
print(x is y) True
黑窗口中调用python解释器运行的结果和在pycharm中运行的结果不同。
值相等,id可能不同,即两块不同的内存空间里可以存放相同的值。
小整数池:
从python解释器启动那一刻起,就会在内存中事先申请好一系列内存空间,存放常用的整数[-5,256],适用于字符串。
C:\Users\wangjian_tr>python Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> x=-5 >>> y=-5 >>> x==y True >>> x is y True >>> x=-6 >>> y=-6 >>> x==y True >>> x is y False
但是在pycharm中运行以下代码,会出现和在黑窗口中不同的结果:
x = -6 y = -6 print(x == y) True print(x is y) True
出现以上结果,说明pycharm帮助做了处理,原因:pycharm软件启动后会在内存中开辟内存空间,且开辟的内存空间大于python解释器开辟的内存空间。
注意:以上情况应该当成False去看。
总结:id不同的情况下,值有可能相等,id相同的情况下,值一定相同。
4.7 常量
常量:不变的量
注意:python语法中没有常量的概念,但是在程序的开发过程中会涉及到常量的概念。
约定:变量名中的小写字母全为大写,代表常量,这只是一种约定、规范。例如:AGE_OF_ALEX = 90
4.8 基本数据类型之数字类型
数据对应着变量值,变量值是有类型的。
1.数字类型
1.1整型int
作用:记录年龄、数量等
定义:age = 18
1.2浮点型float
作用:记录薪资、身高
定义:height = 1.8
注意:其中整型和浮点型包括负数。
数字类型的其他使用:
1.数学运算
注意:int和float之间可以相加
print(10+10.3) # 结果:20.3
+比较特殊,通常只有同类型数据才能相加,但是int和float随属于不同数据类型,但都是数字,是可以相加的。
2.比较大小
age = 10print(age > 18) # 结果为False
4.9 基本数据类型之字符串类型
作用:记录描述性质的状态,比如姓名、性别等。
定义:
1.用引号包含的一串字符,引号可以是单引号、双引号、三个单引号或三个双引号
注意:不要混淆字符串和变量名,变量名是不可以加引号的。
字符串的嵌套:如果外层用单引号,则内层应该用双引号,反之亦然。
print('my name is "egon"') print('my name is \'egon\'')
字符串相加:字符串可以直接相加,但仅限于字符串与字符串之间进行,代表字符串的拼接操作,但是效率很低,了解即可,不推荐使用。
print('my name is '+'egon')
字符串相乘:代表字符串的重复,了解即可。
print('a'*10) # 结果:aaaaaaaaaa
4.10 基本数据类型之列表类型
作用:按位置记录多个值,并且可以按照索引取指定位置的值。
定义:在[]内用逗号分隔开多个任意类型的值,一个值称之为一个元素。
列表中存储的基本是同种属性的信息。
lst = [1,'hello',['good','bad',10]]
print(type(lst))
print(lst)
print(lst[2])
print(lst[2][1])
'''
结果如下:
<class 'list'>
[1, 'hello', ['good', 'bad', 10]]
['good', 'bad', 10]
bad
'''
4.11 基本数据类型之字典类型
索引反映的是顺序、位置,对值没有描述功能
字典类型:
key通常为字符串类型,有描述功能。
作用:
用来存储多个值,每个值都有唯一一个key与其对应,key对值有描述功能。
定义:
在{}内用逗号分隔开多个key:value,其中key多为字符串类型(也可以为int、float,通常并不这么做)且必须为不可变类型,value可以是任意数据类型
注意:列表中有顺序,可以将字典看做无序的。
dic = {'name': 'egon', 'age': 18, 'hobby': ['篮球', '足球', '听音乐']} # 定义字典
print(type(dic))
print(dic['name']) # 字典取值
print(dic['hobby'])
students_info = [
{'id': 1, 'name': '小明', 'gender': '男'},
{'id': 1, 'name': '小蓝', 'gender': '女'},
{'id': 1, 'name': '小冰', 'gender': '男'},
{'id': 1, 'name': '小车', 'gender': '男'}
]
print(students_info[1]['name'])
'''
结果如下:
<class 'dict'>
egon
['篮球', '足球', '听音乐']
小蓝
'''
4.12 基本数据类型之布尔类型
作用:
用来记录真假这两种状态
定义:
flag = True
flag = False
通常用来当作判断的条件,我们将在if判断中用到它。
flag1 = True flag2 = False print(type(flag1)) print(type(flag2))
'''
执行结果:
<class 'bool'>
<class 'bool'>
'''
注意:在记录某些状态,如性别时,不一定非得使用'gender'='男/女',也可以使用'gender' = '0/1',或者'gender' = True/False,只要能将状态表示出来即可。
考试题:
1. 什么是变量?为何要有变量?
2. 变量的三大组成部分是?每部分的作用是什么?
3. 变量名的命名原则、规范、风格
4. 变量值的三个特征是什么?
5. is与==的区别
6. id相同值是否可以相同?
7. id不同值是否可以相同?
8. 用变量的定义说明int、float、str、list、dict、bool类型用于记录何种状态,每种类型至少写出三个示例,如下所示:
int类型
age = 10
level = 3
year = 1990