4 变量与基本数据类型

变量与基本数据类型

1. 变量

1.1 什么是变量

顾名思义,可以变化的量称为变量,这里可以理解为变化的状态。

1.2 为什么要有变量?

为了让计算机能够像人一样记忆事物的某种状态,并且状态是可以变化的。
具体来说,程序的运行过程中会伴随着一系列状态的变化,需要一种机制去保存记录程序执行过程中的状态以及变化过程。

1.3 使用方法

先定义,后引用

1.3.1 变量的定义

由三个部分组成,变量名,赋值符号,变量值,例如:

first_name = 'Dean'
age = 40
is_married = True
  1. 变量名可以类比为标签,指向值所在的内存地址,这是访问到这个值的唯一方式

  2. = 为赋值符号,将值的内存地址绑定给变量

  3. 变量值是存储的数据,反映的是事物的状态

当解释器执行变量定义的语句时,会为变量值申请内存空间,并将内存地址绑定给变量名。
当需要这个变量值时,可以通过变量名来访问这个值。
变量的类型是由变量值决定的。

1.3.2 变量的原则和命名规范

原则:见名知意,通过变量名就能知道所指向的值代表什么,为了增加代码的可读性。

aaa = 18  # 这里并不能从变量名aaa得知18是什么意思
age = 18  # 可以得知18代表年龄

命名规范:

  1. 变量名只能由字母,数字和下划线组成,且不能以数字开头
  2. 变量名可以是中文,但不推荐
  3. 变量名不能与关键字重名
    常用关键字包括:
    ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’,‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’
1.3.3 变量的命名风格
  1. 驼峰体
    每个单词的首字母大写,例如 FirstName = “Dean”
  2. 纯小写加下划线,python中推荐使用
    单词之间以下划线分隔,例如 first_name = “Dean”
1.3.4 变量的特性
  1. id
    变量值的内存地址,可以通过函数id()获得
    id()的返回值类型为整形int
  2. type
    变量值的类型,可以通过函数type()获得
    type()的返回值类型为type类
  3. value
    变量的值
1.3.5 is 与 ==

is:比较的是左右两个值的id是否相等,id相当于变量值的身份,所以is称为身份运算符
==:比较的是左右两个值是否相等

两块不同的内存空间可以存放相同的值,即

  1. 值相同,id可能不同。
  2. id相同,值一定相同,id不同,值可能相同。
    即 x is y => x == y

2. 常量

2.1 变量的定义

在程序运行过程中不会改变的量

2.2 为什么要有常量?

在程序运行过程中,有些量被设计成固定的,不希望被改变

2.3 使用方法

Python中没有定义常量的语法。一般约定俗成,常量的命名风格为全部字母大写,例如:PI = 3.14
但从语法层面上来说常量的使用方法与变量一致。

3. 垃圾回收机制简述

垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为垃圾。
引用计数是一种内存管理技术,是指将变量值被不同变量名的引用次数保存起来,当被引用次数变为零时就将其视为垃圾。
函数del() 可以解除变量名与变量值的绑定关系,使得该变量值的引用计数减一。

4. 小整数池简述

4.1 python的小整数池

对于整数(范围: [-5, 256]),解释器为了优化速度,将这些整数放入了固定的内存空间中,不会被垃圾回收。
单个字母也是这样的。

目的:为了优化运行速度,避免为整数频繁申请和销毁内存空间。

4.2 pycharm的优化机制

对于pycharm,每次运行将所有代码都加载到内存中,为大整数创建了内存空间,相当于大整数池,具体范围无需细究。
实际开发只能考虑小整数池,因为运行过程只依赖解释器,pycharm可有可无,pycharm的优化机制不是必须的。

5 基本数据类型简述

5.1 数字类型
  1. 整型 int
    变量值为整数类型
  2. 浮点型 float
    变量值为小数类型

数字类型可用于数学计算和比较大小等。

5.2 字符串类型

作用:记录描述性质的状态
定义:用引号(’’,"",’’’ ‘’’,""" “”")包含的一串字符
字符串的嵌套
注意:外层用单引号,内层应该用双引号,反之亦然
字符串之间可以使用加号进行拼接,但效率低。

5.3 列表

索引对应值,索引为从0开始的整数
作用:按一定的顺序存储多个值
定义:在中括号[]内用逗号分隔开多个任意类型的值,一个值称之为一个元素。
索引代表的是顺序和位置,对值没有描述性的功能

5.4 字典

键(key)对应值(value),其中key通常为字符串类型,唯一,对值提供描述性的信息。
作用:用来存多个值,每个值都有唯一的键与之对应,键对值具有描述性功能。
定义:在大括号{}内用逗号分开各多个键值对(key-value对)

5.5 布尔类型

用来记录真假这两种状态,通常用来当作判断的条件值。
值只有两种:True和False

5.6 小结

如何选择合适的类型来记录状态

  1. 选取的类型是否可以明确标识事物的状态
  2. 存不是最终目的,存的目的是为了之后可以取出来用
  3. 把自己想象成一台计算机,首先思考应以何种形式把事物的状态记到脑子里,然后再找相应的数据类型来存储。
5.7 练习
5.7.1 存储练习
  1. 病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理
    要点:注意字符串中 \ 的转义
log_file_path = r'C:\a\b\c\adhsvc.dll.system32'
  1. 病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息
file_info = {
    'file_name': 'a.txt',
    'file_size': 360
}
  1. 程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"
error_log = '上传文件失败'
  1. 假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
import time

receive_info = {
    'send_time': time.strptime('2020-02-18-17:00:48', '%Y-%m-%d-%H:%M:%S'),
    'send_name': '癞蛤蟆病毒感染者',
    'send_ip': '80.82.70.187',
    'send_port': '33649',
    'send_action': '正在上传数据'
}
  1. 把服务端ip地址存放下来,ip地址为10.0.10.11
server_ip = '10.0.10.11'
  1. 病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
time_interval = 3
5.7.2 嵌套取值操作练习
  1. students_info=[[‘egon’,18,[‘play’,]],[‘alex’,18,[‘play’,‘sleep’]]]
    请取出第一个学生的第一个爱好
students_info = [['egon', 18, ['play', ]], ['alex', 18, ['play', 'sleep']]]
target_hobby = students_info[0][2][0]
  1. 针对字典
    info={
    ‘name’:‘egon’,
    ‘hobbies’:[‘play’,‘sleep’],
    ‘company_info’:{
    ‘name’:‘Oldboy’,
    ‘type’:‘education’,
    ‘emp_num’:40,
    }
    }
    请取出取公司名
info = {
    'name': 'egon',
    'hobbies': ['play', 'sleep'],
    'company_info': {
        'name': 'Oldboy',
        'type': 'education',
        'emp_num': 40,
    }
}
target_corp_name = info['company_info']['name']
  1. 针对下述类型
    students=[
    {‘name’:‘alex’,‘age’:38,‘hobbies’:[‘play’,‘sleep’]},
    {‘name’:‘egon’,‘age’:18,‘hobbies’:[‘read’,‘sleep’]},
    {‘name’:‘wupeiqi’,‘age’:58,‘hobbies’:[‘music’,‘read’,‘sleep’]},
    ]
    取第二个学生的第二个爱好
students = [
    {'name': 'alex', 'age': 38, 'hobbies': ['play', 'sleep']},
    {'name': 'egon', 'age': 18, 'hobbies': ['read', 'sleep']},
    {'name': 'wupeiqi', 'age': 58, 'hobbies': ['music', 'read', 'sleep']},
]
target_hobby = students[1]['hobbies'][1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值