一、变量
1、定义:变是指可变化,量是指事物的状态,所以变量即是指事物的可变状态,比如年龄,性别,数量等。
2、作用:为了让计算机像人一样去记忆事物的某种可变状态,程序的执行,本质上就是一系列的状态变化,变化的结果是程序执行的直接体现,所以引用变量来反映并保存这种变化。
3、用法:
①基本使用原则:先定义,再引用。
name = 'tom' # 定义name
age = 18 # 定义age
print(name) # 输出name
print(age) # 输出age
②内存管理之垃圾回收机制:
Ⅰ:垃圾的定义:一个变量被绑定的变量名的个数称为引用计数,当引用计数为0时,该变量无法被访问到,称为垃圾。
Ⅱ:引用计数的增加与减少:
a = 10 # 值10的引用计数变为1
b = a # 值10的引用计数变为2
c = b # 值10的引用计数变为3
del a # 解除变量名a与值10的绑定关系,值10的引用计数变为2
del b # 解除变量名b与值10的绑定关系,值10的引用计数变为1
c = 20 # 把变量名c与值20建立新的绑定关系,原来与值10的绑定关系解除,值10的引用计数变为0,此时值10作为垃圾被回收移出内存空间
③变量的三大组成部分:
Ⅰ:变量名:指向等号右侧变量值的内存地址,用来访问该变量值。
Ⅱ:赋值符号:即等号,将变量值的内存地址绑定给变量名。
Ⅲ:变量值:记录事物的状态。
④变量名的命名规则:
Ⅰ:原则:变量名应该见名知意,在此前提下,变量名应尽可能精短。
Ⅱ:组成:变量名只能由字母,数字,下划线任意组合而成,但第一个字符不能是数字。
Ⅲ:关键字:程序已经事先定义好的功能,因而不能声明为变量名,如,print,and,break...等等。
Ⅳ:纯小写与下划线的组合:如,age_of_tom,在python中,是比较常见的命名方式,比较推荐。
Ⅴ:驼峰体:如,AgeOfTom。
Ⅵ:不良命名形式:虽然使用汉语拼音或汉字作为变量名,从语法层面并不会报错,但是会显得代码不专业,应尽量避免使用。
⑤变量值的三个特征:
Ⅰ:id:一个变量值对应一个id,映射了变量值的内存地址,内存地址不同则id不同。
Ⅱ:type:表示变量值的类型,不同类型的值记录不同的状态。
Ⅲ:value:变量值本身。
⑥is与==:
Ⅰ:is:比较左右两个值的id是否相同。
Ⅱ:==:比较左右两个值本身是否相同。
Ⅲ:总结:id不同的情况下,值有可能相同,即两块不同内存空间里可以存相同的值。而id相同的情况下,值一定相同。即,a is b 成立,则 a == b 必然成立。
a = 'ab' #将'ab'赋值给a
b = 'ab' #将'ab'赋值给b,此时a与b的值相同,但是id不同
print(a == b) #结果为True
print(a is b) #结果为False
⑦:小整数池:
Ⅰ:含义:在python解释器启动的同时,会在内存中申请好一部分空间存放常用的整数(-5~256)。
Ⅱ:用途:所有值为相同整数的变量的id均指向同一个内存空间,避免了常用整数对内存空间的重复占用。
a = 10 # 将值10赋值给a
b = 10 # 将值10赋值给b
print(a is b) # 结果为True,说明a与b的id相同,即指向内存同一个空间
c = -10 # 将值-10赋值给c
d = -10 # 将值-10赋值给d
print(c is d) # 结果为False,说明c与d的id不同,因为值-10超出了小整数池的范围
⑧常量:
Ⅰ:定义:不变的量。
Ⅱ:python中的常量:在python的语法中没有常量的概念,但是在程序的开发中会涉及常量的使用。
Ⅲ:命名规范:将变量名的小写字母全部大写通常代表常量,但只是一种约定,本质上与一般变量名并无区别。如,AGE_OF_TOM。
二、基本数据类型
1、数字类型:
①整数型int:用于记录年龄,等级,个数等等。
②浮点型float:用于记录薪资,体重,身高等等。
③整数型与浮点型:既可以相同类型之间进行数学运算,也可以互相跨类型进行数学运算。
age = 18 # 年龄为整数
salary = 3.3 # 薪资一般带小数
level = 0 # 初始等级为0
level = level + 1 # 满足一定条件后等级提升1
weight = 1.5 # 单个物体重量为1.5
number = 10 # 物体数量为10
weight_total = weight * number # 计算物体重量总和为1.5*10
print(weight_total) # 输出计算结果为15.0
2、字符串类型str:
①作用:记录描述性属性的状态,如名字,性别,一句话等等。
②定义:用(' '、'' ''、''' '''、""" """)内包含的一串字符表示。
name = 'tom' # 用一对' '内的字符串表示名字
info = """
今天是2020年3月4日,天气晴朗。
""" # 用一对""" """内的一句话表示信息
③注意:
Ⅰ:如果数字外加上引号,则此时这个整体则不再是数字类型,而是字符串类型。
Ⅱ:变量名外加上引号,则不再是变量名,而是变量值的类型字符串。
a = 18 #数字类型值18赋值给a
b = '18' #字符串类型值'18'赋值给b
'name' = 'tom' #语法错误,等号左边应是变量名,变量名的命名不能有引号
Ⅲ:字符串的嵌套:一个字符串内部分内容需要加上引号时,如果整个字符串外层是用单引号,则内层用双引号,反之亦然。或者使用转译符号斜杠。
print('my name is "tom"') # 输出结果为:my name is "tom"
print("my name is 'tom'") # 输出结果为:my name is 'tom'
print('my name is \'tom\'') # 输出结果为:my name is 'tom'
Ⅳ:字符串相加:代表字符串的拼接,因为效率极低,一般不使用。
print('my name is '+'tom') # 输出的结果为:my name is tom
Ⅴ:字符串相乘:代表相同字符串的重复。
print('!' * 10) #输出的结果为:!!!!!!!!!!
3、列表类型list:
①定义:在[ ]内用逗号隔开多个任意类型的值,一个值称为一个元素,索引从0开始,0代表第一个,每个索引对应一个值。
②作用:按位置记录多个相同属性的值,如,一个人的多种爱好,一个班级的所有学生姓名,一个人的一年内每个月的工资。可以按照索引取到指定位置的值。
l = [1,2,4,8,16,32,64,128,256] #列表l里的元素都为数字
print(l[2]) #按照索引找到列表l的第三个数,输出结果即为:4
③列表的嵌套:一个列表中可以再嵌套列表。
l = ['tom',18,['cake','orange','jelly']] #大列表l里面嵌套了小列表:['cake','orange','jelly']
print(l[2][1]) #大列表第三个位置的小列表的第二个元素,即输出结果为:orange
④索引的意义:反应的元素在列表中的顺序或者说位置,对值没有描述性的功能。索引可以从头顺着取,也可以从最后一位倒着取,最后一位对应的索引是-1。
l = [1, 2, 3, 4, 5, 6] # 生成列表l
print(l[-1]) # 根据索引-1找到最最后一个元素,即输出结果为:6
4、字典类型dict:
①定义:在{ }内用逗号隔开多个key:value,key通常为字符串类型,所以key对值有描述性功能。
②作用:用来存多个不同类型的值,每个值都有描述性的key与其对应。
info = {
"name": 'tom',
"age": 18,
"gender": 'male'
} # 生成了字典info
print(info['gender']) # 根据的字典中的key'gender'找到对应的value,所以输出结果为:male
③字典的嵌套:同理与列表的嵌套,且可以跟列表混合使用。
students_info = [
{"name": 'tom', 'age': 17, 'gender': 'male'},
{"name": 'jan', 'age': 19, 'gender': 'female'},
{"name": 'tik', 'age': 18, 'gender': 'male'},
] # 生成了列表保存着学生信息,每个学生的信息是一个单独的字典
print(students_info[1]['age']) #根据列表二号索引得到第二个学生的字典,再根据Key年龄得到对应值,所以应该是输出:19
5、布尔类型bool:
①定义:只有两种值,True和False。
②作用:事物的某种属性只有两种状态时,记录其一。
ask = '明天是否下雨' # 是非题
ans_a = 1 # 是非题的回答只有,是或否两种答案,用1代表是
ans_b = 0 # 用0代表否
tom_gender = 1 # 一个人的性别只有男或女两种状态,用1代表男
jan_gender = 0 # 用0代表女
③其他使用:通过当作判断的条件,后续的if判断中会用到。
6、总结:选择数据类型的原则:
①选取的类型是否可以明确表达事物的状态。
②存不是目的,存是为了之后取出来,并且方便使用。
③把计算的工作状态类比自己的记忆模式,再从python中找到相应的数据类型来让计算像自己一样去记下事物的状态。
三、作业
# 1、病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理
log = 'C:\a\b\c\adhsvc.dll.system32'
# 2、病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息
data = {'file': 'a.txt', 'size': '360'}
# 3、程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"
error_log = '上传文件失败'
# 4、假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
msg = '[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据'
# 5、把服务端ip地址存放下来,ip地址为10.0.10.11
ip = '10.0.10.11'
# 6、病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
wait_time = 3
# 二:嵌套取值操作,请取出第一个学生的第一个爱好
students_info = [['egon', 18, ['play', ]], ['alex', 18, ['play', 'sleep']]]
print(students_info[0][2][0])
# 2、针对字典,请取出取公司名
info = {
'name': 'egon',
'hobbies': ['play', 'sleep'],
'company_info': {
'name': 'Oldboy',
'type': 'education',
'emp_num': 40,
}
}
print(info['company_info']['name'])
# 3、针对下述类型,取第二个学生的第二个爱好
students = [
{'name': 'alex', 'age': 38, 'hobbies': ['play', 'sleep']},
{'name': 'egon', 'age': 18, 'hobbies': ['read', 'sleep']},
{'name': 'wupeiqi', 'age': 58, 'hobbies': ['music', 'read', 'sleep']},
]
print(students[1]['hobbies'][1])