Python的基础知识:
一.编译型语言与解释型语言的区别:
计算机是不是直接识别高级语言的,只能识别计算机语言(二进制),编译型语言是程序在执行之前需要进行编译,编译成计算机语言的文件,如exe,以后运行直接运行exe就行了,不用重新翻译,在运行效率上比解释型语言高。解释型语言是边运行边解释,运行效率没有编译型语言高,。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
编译型(翻译):把代码执行前先转成二进制再执行的过程叫做编译
c,c++ go swift object-c pascal
解释器有哪些:
编译型和解释型语言的区别:
编译型语言需要手动编译才能执行 gcc hello.c -o hello
全部编译成二进制再执行
特点:运行效率高
依赖编译平台 如:linux 操作系统 与CPU交互的接口 与Windows不完全一样
不能跨平台,开发效率低
解释型:例如: sh test.sh # sh → shell程序的解释器
javascript,python,php,ruby,perl,erlang #边执行边解释成二进制
特点:运行效率低
可以跨平台
sh 解释器 负责跟不同的平台沟通
开发效率高,解释型的语言一般不需要关注硬件底层,
混合型:JAVA C#
Python 2 和 Python 3 的详细区别:
pyhton运行的方式:
1.用脚本
用windows的cmd 运行文件
2.用交互器
交互器是为了测试的
cmd→python→写代码
二.变量
变量:相当于一个容器,目的是为了把数据存储到内存中。方便后面程序的引用
变量定义的规范:
命名:只能是字母,数字,下划线的组合,不能是数字开头,不能是特殊字符,不能是关键字
变量的两种规范:驼峰体: TrafficCost
下划线体:traffic_cost 容易辨识
print(type())输出数据类型
type() 数据类型
数字,字符串的相加都用‘+’
python强制缩进是为了判断控制语句的层级
同一级的代码必须一致
三.字符编码
字符编码与二进制:
计算机底层是二进制,输出中文时,是通过ascii码编译成中英文,
ASCII码表(美国标准信息交换代码):最多有2*8个字符,256个。
65-90位26个为大写字母,97-122为小写字母。
GB2312表:占用72*94的码位。6000多个汉字→→ GBK1.0 :收录了2万多个汉字 →→
GB18030 :收录了27000多个汉字。 中文为2个字节
发展历程:
ASCII 256个字符 →→ GB2312(1980,6700多个汉字)→→GBK(1995,21000)→→GB18030(2000,27000)
Unicode(万国码):支持所有文字
占用空间对比:
ASCII:
二进制位=bit = 8bits = 1bytes
1024 bytes = 1 kb
1024 kb = 1 MB
ASCII 256, 由于每个ASCII字符都占8位,所以二进制位是用8位,一个字节为8位。
一个二进制位是计算机里的最小表示单元
一个字节是计算机最小的存储单位
Unicode:
utf-32 = 32位 = 4字节
utf-16 = 16位 = 2字节
utf-8 = 8位 = 1字节 可变长编码 :英文一个字节,中文三个字节,
单行注释: #
多行注释:``` ``` 不可以执行,可以被打印
在python2中与python3中字符编码的区别:
1.在python2中,
str:bytes数据
unicod:unicode编码后的数据
2.pyhton3中
str:unicode编码后的数据
bytes:bytes数据
bytes 字节类型(二进制类型),所有的字符要存到内存里,硬盘里,都是bytes格式
在python2里,看到字符串,就是bytes
在python3里,看到的字符串,是str,
在python3里面,内存里面全是unicode,而文件的默认编码方式是utf-8
由于python3内存里面全是unicode,字符串在pyhton3里面也是unicode类型,所有不需要再进行解码,直接编码就行。
而在python3里面看到bytes,直接encode就是看到bytes
四.字符串操作
拼接:
+ : 拼接次数多的话效率就低
join【放的是列表】: 字符串的拼接方法 申请一次内存空间拼接
spilt:分割 把字符串分割
find:查找 跟正则表达式
index:没有查找到返回报错
replace:替换 ,必须是完全匹配才能替换
ljust:居左
center:居中
rjust:居右
format:字符串格式化输出
format_map :用键值对格式化输出
isdecimal:是不是数字
isdigit:是不是数字
isnumeric:是不是数字,中文一也是数字,基本可以包括所有数字
capitalize:首字母大写
title:每个字符的首字母变成大写
casefold:所有都变成小写
lower:变成小写
endwith:以什么结束
startwith:以什么开始
expandtabs:将\t转成空格
spiltlines:以换行符分割
zfill:左边填充,0填充,填充的内容为0,内容右对齐
五.列表
列表:可迭代对象,能够进行for循环的就是可迭代对象
创建的方法:
l=[2,3,'helo',[4,5],{"name":"siyuan"}]
l2=list([1,2,3])
l3=list[1,2,3]
查:切片 [:]
增:
append:追加,最后一个位置添加,没有返回值
extend: 批量添加 extend[1,2]
insert:指定位置添加
删:
pop:删除 根据索引删除对象
remove:删除 删除具体的内容,不知道索引的位置的情况下
del:删除
改:赋值操作
先通过切片找到位置再进行改列表
clear:内容清空
count:计数
len:长度
sort:排序,没有返回值,从小到大
sort(reverse=True):从大到小排列
ord():查ASCII码表对应的值
reverse:翻转
sorted:排序与sort效果一样,为内置函数
copy:复制
copy.deepcopy( ):
浅拷贝:copy.copy
浅拷贝只是拷贝最外层的数据本身,里面的其它层只是拷贝了一个引用
import
深拷贝:copy.deepcopy()
深拷贝不但拷贝了最外层的数据本身,里层也拷贝了数据的本身
六.元祖:(11,22,3,4) 不可变数据
切片:以列表一样
for循环:与列表一样
七.字典:{"key":"value"}
不可迭代对象,值不能用for循环,键可以用for循环
具有映射关系的类型
字典的查询速率高于列表,存储空间比列表大
键值对:
创建:
d={"name":"yuan","name":"siyuan"} key唯一且为不可变数据
查:
print(d["name"])
v=d.get("name")推荐使用这种
print(v)
遍历:for循环
需求:l=[11,22,33,44]
需要打印: 1 11
2 22
3 33
4 44
方法:
1:count 格式化使用
2:index的使用
3:enumerate的使用
增:
d = {"name":"yuan","name":"siyuan"}
d["age"] = 123
d.update 更新字典 也是增加
改:
如果key是存在的,会覆盖原先的字典中key对应的value
删除:
d.pop("1") 有返回值
del
d.popitem()随机删除
八.集合:set 天然去重
创建
s = {1,2,3,4}
set是可变的数据类型
set内的元素是不可变的数据类型
集合:关系测试,天然去重,无序去重的
{} 没有值就是set
交集, 两个都有
差集合,在列表A里有,B里没有
并集 把两个列表里的元素合并在一起,去重
交集:linux.intersection(python) linux & python 效果一样
差集:linux.difference(python) linux - difference 效果一样
并集:linux.union(python) linux | python 效果一样
反向差集(对称差集)
linux.symmetric_difference(python) 两个都没有的一起打印
linux ^ python 效果一样
判断子集:linux.issubset(python) 判断linux是不是python的子集 < 效果一样
判断父集:linux.issuperset(python) 判断linux是不是python的父集 > 效果一样
判断两个集合的关联性:linux.isdisjoint(python) 有关联 return true ,else false
增:
union 只会求一个集合,不会改原来的set update 会把原set改变
九.三元运算,字符操作,
三元运算: 结果1 if 条件 else 结果2
三元运算只能输出两个结果,不能加更多的结果
result = a if 条件 else b
十.文件操作:
流程:
打开文件:open("file",mode="a",encoding="utf-8")
open("file",mode="w",encoding="utf-8")
open("file",mode="r",encoding="utf-8")
当打开文件的时间,指针是在0的位置
操作文件: read()2读的是字节,3读的是字符
read( 5 ) 从指针位置开始读指定个数的字符
readline()读一行内容
readlines()读所有的行包括\n 列表的数据类型
write()
flush 操作:把写入的内容立即刷入磁盘上
关闭文件:close()
写入内容是内存不会把内容立即刷入磁盘,会放在缓存中,当文件关闭时会一次性把内容刷入磁盘
进度条:
import sys
for i in range(100):
sys.stdout.write("#") 是一个文件,和屏幕输出相关的文件
操作模式:r 可读 ,
w 覆盖式的写入
x 如果存在则报错
a 追加模式
可读可写模式:
r+:默认指针在开始位置,按照指针在的位置追加写入
w+:在打开文件时,会先覆盖原来的文件,全部清除
f.seek()调节指针到开始的位置,seek是按字节进行移动的,不同于read方法
f.seek(3,0)是按照开始位置调整指针
f.seek(3,1)是按照当前位置调整指针
f.seek(-3,2)是按照最后位置调整指针 一定是按照字节模式来操作
f.tell()是显示指针的位置
a+:光标默认在文件最后位置,总是在文件最后追加内容
*******
rb:按照二进制读取文本内容
wb:写入文本的内容要注明字节的编码格式
ab:
with语句
with open("test") as f: 可以控制缩进