文章目录
python 与 c 语言的区别
- python 是脚本解释型语言; 而c语言是编译型语言
- 内部机制不同:python语言先将脚本翻译成字节码文件(pyc,pyo),然后通过python的虚拟机(一般用Cpython)进行解释并运行字节码文件;而c语言先将源代码编译成机器码,然后链接得到可执行文件(exe),然后通过机器运行可执行文件
- 性能:python由于在虚拟机上运行,而虚拟机在机器之上,并且翻译与解释过程都相对较慢,所以python代码运行的性能没有c语言代码好
- python动态语义特性:python给变量赋值时可以不需要先声明变量的数据类型(在赋值时确定变量的数据类型),并且变量的数据类型可以动态改变,例如:
python代码:
a = 4
a = "123"
c语言代码:
int a;
a = 4;
- python的层次结构关系采用缩进的形式,例如:
python代码:
a = 1
b = 2
if a == b:
print('ok')
c语言代码:
int a = 1, b = 2;
if (a == b) {
printf("ok");
}
- python中一切皆为对象,且python没有指针的概念
- python中变量的赋值都为引用赋值
程序与变量
- 程序是用来处理数据
- 变量是用来存储数据
python中的算数运算符
按优先级从高到低次序,同级的运算符优先级相同,从左到右进行计算
使用()可以调整计算的优先级
- 幂运算:**(最高优先级)
- 乘、除、取余、取整:* / % //
- 加、减: + -
此外, 在python中,*运算符还可以用于字符串,其计算结果就是字符串重复指定的次数的结果。
如:
“+” * 50
结果为:
‘++++++++++++++++++++++++++++++++++++++++++++++++++’
(即50个加号拼接成的字符串)
python中的变量类型
- 在python中定义变量是不需要指定类型的,但是在其他很多高级语言中需要指定变量类型
- 数据类型可以分为两大类:数值型 和 非数值型
数值型
⭕ 整型 **int**
⭕ 浮点型 **float**(注意:在python中变量类型并没有double类型)
⭕ 布尔型 **bool**
- 真 True
- 假 False
⭕ 复数型 **complex**:主要用于科学计算,例如:平面场问题、波动问题、电感与电容等等问题
非数值型
⭕ 字符串 **str**
⭕ 列表 **list**
⭕ 元组 **tuple**
⭕ 字典 **dict**
此外,在python2.x中,整数根据保存数值的长度还有 长整型 long
- 在编程过程中,可以使用type(变量名)函数查看一个变量的类型
python中不同类型变量之间的计算
- 数值型变量之间可以直接计算
● 在python中,两个数值型的变量是可以直接进行算数运算的
例如:
i = 10
b = 10.5
c = True
print(i + b)
print(i + c)
结果为 20.5 和 11
● 如果变量是bool类型,在计算时
⭕ Ture对应数字1
⭕ False对应数字0
2. 字符串变量之间使用 + 拼接字符串
3. 字符串变量可以和整数使用 * 重复拼接相同字符串
4. 数值型变量和字符串变量之间不能进行其他计算
(会报错TypeError:Can‘t convert ’int‘ object to str implicitly)
格式化输出字符串
格式化字符有:
- %s 输出字符串
- %d 输出有符号十进制整数
- %f 输出浮点数,%.2f表示小数点后只显示两位
- %% 输出%
语法格式:
print(“格式会字符串” % (变量1, 变量2))
pycharm中的单步执行
- F8(step over) :单步执行的代码为一个用户自定义函数时会直接执行该函数越过函数内部
- F7(step into) :单步执行的代码为一个用户自定义函数时会进入到该函数内部
python中注释与查看函数的说明信息
- 使用 # 进行单行注释
# 这是一行注释
- 使用三个单(双)引号进行多行注释
"""
这是多行注释
"""
- pycharm中在函数调用的位置使用快捷键CTRL + Q可以查看函数的说明信息
- 使用help(函数名)可以查看到该函数的帮助文档
- 使用dir(函数名)可以查看到该函数的参数列表
Cpython中的pyc文件(也叫字节码)
- pyc文件是编译过的文件,是一个二进制文件,其保存在__pycache__文件夹中
- 程序中可以用import导入该模块,当该模块被调用后,会自动生成一个后缀名为.pyc的文件;当然也可以使用命令来生成一个.pyc文件,例如:
python -m 文件名.py
- 当然也可以使用代码来生成.pyc文件
import py_compile
compile.compile("文件名.py")
- pyc文件的优势
- 使用pyc文件可以提高程序执行速度
- 使用pyc文件可以向其他用户屏蔽源码,保证源码的隐蔽性
- python在解释源程序时的步骤:
- 首先处理源代码,编译生成一个二进制字节码
- 再对字节码进行处理,才会生成CPU能够识别的机器码
- 有了模块的字节码文件之后,下一次运行程序时,如果在上次保存字节码之后没有修改过源代码,python将会加载.pyc文件并跳过编译这个步骤
- 当python重编译时,它重编译时,它会自动检查源文件和字节码文件的时间戳
python中非数值型变量的使用
- 在python中,所有非数值型变量都具有一下特点:
- 都是一个序列 sequence,也可以理解为一个容器
- 取值用 [ ]
- 遍历用 for in
- 计算长度、最大/最小值、比较、删除
- 链接 +
- 重复 *
- 切片
列表
- 列表(list)是python中使用最频繁的数据类型,在其他语言中通常叫做下标。
- 列表的索引(下标)从0开始。
- 注意:**从列表中取值时,不能超出索引范围,否则程序会报错(list index out of range)
- 用 [] 定义列表变量,数据之间使用逗号(,)分隔
- 增删改查方法
- 取索引方法:index
- del 方法删除数据: del 关键字本质上是用来将一个变量从内存中删除
- 记录元素在列表中出现次数的方法:count
元组
- 元组(tuple)与列表类似,不同之处在于元组的元素不能进行修改
- 元组表示多个元素组成的序列
- 元组中的数据之间使用逗号(,)分隔的
- 元组用 () 定义
- 元组的索引从0开始
- 注意:**从元组中取值时,不能超出索引范围,否则程序会报错(tuple index out of range)
- 定义只包含一个元素的元组类型的变量应该使用如下方式:
single_tuple = (5,) (注意后面有一个逗号,否则变量类型将为int类型) - 元组只有两个可用方法: count(记录元素在元组中出现次数)和 index(取元素索引)
- 元组的应用场景:
⭕ 作为函数的参数或者返回值,一次性接收或返回多个数据
⭕ 格式字符串, 格式化字符串后面的()本质上就是一个元组
⭕ 让列表不可以被修改,以保护数据安全
字典
- 字典(dict)是除列表之外python中最灵活的数据类型
- 字典同样可以用来存储多个数据,通常用于存储描述一个物体的相关信息
- 字典与列表的区别:
⭕ 列表是有序的对象集合
⭕ 字典是无序的对象集合,用print输出字典的顺序通常是不一致的 - 字典用 {} 定义
- 字典使用键值对存储数据,键值对之间使用逗号(,)分隔
⭕ 键(key)是索引
⭕ 值(value)是数据
⭕ 键 和 值 之间使用冒号(:)分隔
⭕ 键必须是唯一的
⭕ 值可以取任何数据类型,但键只能使用字符串(常用)、数字或者元组 - 字典的取值采用键(key),如果指定的key不存在,程序会报错(KeyError)
- 字典的增删改查
- 字典的键值对数量统计
- 合并字典:update(如果被合并的字典中包含已经存在的键值对时,会覆盖掉原有的键值对)
- 清空字典:clear
- 字典的应用场景:
⭕ 使用多个键值对,存储描述一个物体的相关信息 – 描述更复杂的数据信息
⭕ 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
字符串
- 字符串(string)就是一串字符,是编程语言中表示文本的数据类型
- 在python中可以使用一对双引号("")或者一对单引号(’’)定义一个字符串,通常:
⭕如果字符串内部需要使用双引号(""),可以使用单引号(’’)双引号("")定义字符串
⭕如果字符串内部需要使用单引号(’’),可以使用双引号("")定义字符串 - 可以使用索引获取一个字符串中指定位置的字符串,计数索引从0开始
- 注意:**从字符串中取值时,不能超出索引范围,否则程序会报错(string index out of range)
- 统计字符串长度: len
- 统计字符串中某一个子字符串出现的次数: count
- 某一个子字符串首次出现的位置:index
- 字符串中具体方法有如下分类:
python中的公共方法
python的内置函数
⭕ del函数的两种方式如下(两种方式执行的效果完全相同)
list_example = [1, 2]
del list_example[1] #方式一
del(list_example[1]) #方式二
⭕ max函数和min函数如果参数为字典类型,则只针对key进行比较
⭕ cmp函数在python3.x中被取消了
⭕ 字符串、列表、元组比较可以使用比较运算符如 < 和 > ,字符串比较规则遵从: “0” < “A” < “a”
切片
- 切片使用索引值来限定范围,从一个大的字符串中切出小的字符串
- 列表和元组都是有序的集合,也能够通过索引值获取到对应数据,因此也可以用索引值来限定范围切出小的列表和小的元组
- 字典是一个无序的集合,因此无法切片
运算符
注意
1. in 在对字典操作时,判断的是字典的键而并非值
2. in 和 not in 被称为成员运算符
python中完整的for循环语法
- 在python中完整的for循环语法如下:
for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环,在循环结束后,会执行的代码
- 应用场景
- 在迭代遍历嵌套的数据类型时,例如一个列表包含了多个字典
- 要判断某一个字典中是否存在指定的值
⭕ 如果存在, 提示并且退出循环
⭕ 如果不存在,在循环体结束后,希望得到一个统一的提示
变量的深层理解
- 变量的引用
变量和数据都是保存在内存中的,在python中函数的参数传递以及返回值都是靠引用进行传递的
- 引用的概念
⭕ 在python中变量和数据是分开存储的
⭕ 数据保存在内存中的一个位置,而变量保存着数据在内存中的地址
⭕ 变量中记录数据的地址,就叫做引用
⭕ 使用id()函数可以查看变量中的数据所在内存地址
⭕ 注意:如果变量以及被定义,当给该变量赋值时,本质上是修改了对数据的引用 - 调用函数传递实参的引用
在python中,函数的实参/返回值都是靠引用来传递的
数据类型中的可变类型与不可变类型
- 不可变类型(内存中的数据不允许被修改)有
⭕ 数值类型:int,bool, float, complex,long(python2.x)
⭕ 非数值类型:字符串str,元组tuple - 可变类型(内存中的数据允许被修改)有
⭕ 列表 list
⭕ 字典dict - 注意
⭕ 字典的key只能使用不可变类型的数据
⭕ 可变类型的数据变化:通过方法修改变量中的数据,其地址并不会被修改;但通过赋值修改变量中的数据,其地址会被修改
哈希(hash)
- python中内置一个名字叫做hash(o)的函数
⭕ 接收一个不可变类型的数据作为参数
⭕ 返回结果是一个整数 - 哈希是一种算法,其作用就是提前数据的特征码(类似人的指纹)
⭕ 相同的内容得到相同的结果
⭕ 不同的内容得到不同的结果 - 在python中,设置字典的键值对时,会首先对key进行hash以决定如何在内存中保存字典的数据,以方便后续对字典的增、删、改、查等操作
python代码结构
- 代码结构示意图如下(从上到下的顺序执行)
python实用的内置函数
chr()
chr() 函数传入传入一个0到255内的整数,返回一个对应Unicode字符
ord()
ord() 函数传入一个Unicode字符,返回一个对应的0到255内的整数
list.pop()
list.pop() 函数删除list中的最后一个元素,并返回该元素
时间格式转换函数
- timeArray = time.strptime(keyTime[i], “%H:%M”)
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00=59)
- %S 秒(00-59)
- 取数: minute = timeArray.tm_min