python 基础
语言类型:
分类:编译型、解释型,强类型、弱类型
编译型:编译完在执行
代表语言:C,C++
优点:运行速度快
缺点:开发速度慢
解释型:逐行编译
优点:开发速度快
缺点:运行速度慢
代表语言:Python,JavaS,PHP
编码:
8bit = 1byte 1024B(byte) = 1KB 1024KB = 1M
ASCII: 英文编码 英文一个字节
GBK : 国标码 英文 一个字节,中文两个两个
Unicode: 万国码 英文两个 个字节, 中文四个字节
UTF-8 : 万国码升级 英文一个字节, 欧洲两个字节,中文三个字节
python2和python3区别:
代码: python2 代码混乱,重复 python 源码规范,清晰,简单优美
编码: python2 编码为ascii python3 内存编码为Unicode
print: python2 中print不需要添加括号 python3 中需要添加括号了
input: python2 中输入是raw-input python3 中是input
nonload: python2 中没有nonload python3 中新加入的
类: python2 经典类,深入优先 python3 不存在经典类,都是新式类,mro算法也叫c3
组成下划线数字字母
首字母不能是数字
不能是关键字
不能使中文
有描述性
推荐驼峰体
下划线
基础数据类型:
字符串:str
upper,lower,startwith,endswith,replace,strip,split,join,count,isdigit,index/find(不报错)
列表:list
append,insert,extend,pop,remove,del,改:li[] = "海洋" 查:根据索引,切片查询
count,index,sort,reverse
列表的注意事项:
循环一个列表时,删除元素时,剩下的值会向前近一步 (索引也会更改),
不要改变列表的大小,这样会影响你最终结果
列表去重:
方法一:
创建新的列表,for循环列表中每个元素是否不在新列表中,不在则追加
方法二:
l1 = [33,22,33,44,44,22,55,11] l2 = list(set(l1)) #set去重转成列表 l2.sort(key = l1.index) #使用列表进行排序,保证原顺序 print(l2)
列表删除:
列表删除只可从后往前删除,
a = [1,2,3,4,5,6,7,8] for i in range(len(a)-1,-1,-1): if a[i] > 5: a.pop(i) else: pass print(a)
字典:dict
增加:
dic['name'] = ['hai'] 有则改之,无则增加 ,dic.setdefault("name","hai") 有则不变,无则增加
删除:
dic.pop('key',)
修改:
dic['name'] = 'junli'
查看:
print(dic['name'],dic.get('name') #get没有返回none,好用!!!
fromkeys:
创建空字典:dic = dict.fromkeys("可迭代对象")
enumerate:
枚举,for i in enumerate(字典): 每次循环索引位置和key
items
得到所有值
d={'1':'1','2':'2','3':'3'}
for a,b in d.items():
print(a,b)
update:
dic.update('name','18') 添加
dic.update(name = '太白金星') 更改
dic.update([(1, 'a'),(2, 'b')]) 列表中的元祖添加到字典
dic1.update(dic2) 更新:字典融合,有则覆盖,无则增加
元祖:tuple
只读列表,不可修改
tu1= (1) 如果元祖中只有一个元素,那么他还是本身元素
count 统计元祖中字符出现的次数
index 通过元素查找索引
集合:set
set集合里存放的是可迭代类型
列表去重
交集,并集,差集(两个数据进行的操作)
布尔bool :
True真 False假
文件操作:
文件操作的格式:
with open('文件的读',encoding='utf-8') as f1:
print(f1.read())
with: 使用with打开文件,不用关闭文件句柄
open: 是内置内置函数,调用操作系统的接口
encoding:设置文件读写编码格式,默认是操作系统编码
mode操作方法:
读取:r(默认是r) 追加:a ,写入:w 非文本文件不能指定编码:rb
先读后写(可以追加):r+
追加读:a+
文件句柄操作方法:
read readline() write() read(n)按光标读 readlines()将内容聚合列表
替换文件:
# 另一种打开文件的方式: 帮助自动关闭文件;可以同时开多个文件,用逗号隔开;也可以同时操作一个文件 with open("a", mode="r", encoding="utf-8") as f,\ open("b", mode="a", encoding="utf-8") as f1: import os print(os.getcwd()) # 查看当前工作路径 os.remove() # 删除文件 os.rename() # 更改文件名.(新名,旧名)
Python 中的空间和作用域:
三个空间:
内置名称空间:当你运行python程序,会开启一个内置名称空间,将内置函数print等等加载到空间中
全局名称空间:加载当前py文件中的变量,和函数外声明的变量,加载到全局空间中,变量与值对应关系
局部名称空间:函数执行时,会开辟出局部空间(也叫临时名称空间)
globals() 查看全局存储的全局变量
locals() 查看当前存储的变量
全局作用域---->内置名称空间和全局名称空间
局部作用域---->局部名称空间
作用:
作用域对与变量而言,声明变量在程序里可使用的范围
局部作用域可以引用全局作用域变量,局部作用域不能改变全局变量
加载顺序:
内置--->全局--->局部 (从外到内)
取值顺序:
就近原则LEGB
同一代码块:
优点:
能够进行复用,提高一些字符串,这样在数字处理时间和空间上提升性能,节省内存
适用对象:
列表,字典,可变的数据类型不会复用的
int:任何数字在同一代码块下都会复用
str:几乎所有的字符串都会符合缓存机制
不同代码块:
小数据池规则:
小数据池,是不同代码块下的缓存机制,也叫缓存机制和驻留机制,在编程语言当中都有类似的东西
主要是用于提高效率数字类型在时间和空间上的性能,避免创建重复的数据,节省内存
缓存规则:
int:-5-256整数进行缓存,当你将整数赋值给变量时,直接引用已经创建好的缓存对象
str:
1.字符串在做乘法(乘法不为1)的时候长度不能超过20
2.自己定义的字符串长度不限制,字符串必须是字母,数字,下划线组成
3.特殊字符定义1个的时候,进行驻留
运算符:
算数运算符:
* / 加减乘除 %取余 2**4 幂 //整除返回的部分
比较运算符:
== 等于 !+ 不等于 >= 大于等于 <= 小于等于
逻辑运算符:
顺序:not >>> and >>> or
x and y x 为真返回y x为假返回x
x or y x为真返回x x 为假返回y
not x x为真返回假 x为false返回true
深浅copy:
浅copy:
拷贝的数据半共享,当你浅copy一个嵌套的列表,将拷贝第一层数据会指向同一个内存地址,如果你修改数据,指向会断开,第二层数据也就是嵌套的列表他没有拷贝,元素的内存地址是共用的一个。
浅copy: list dict: 嵌套的可变的数据类型是同一个。
深拷贝:
拷贝的数据不共享,深拷贝他会逐层判断,将不可变的数据类型指向同一个内存地址,可变的数据类型跟原列表不共用一个,元素指向的内存地址都是一样的。
深copy: list dict: 嵌套的可变的数据类型不是同一个 。