一、变量

  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])

 

posted on 2020-01-02 01:01  焚音留香  阅读(341)  评论(0编辑  收藏  举报