Loading

Python基础1 (基本数据类型 文件)

Python简介

应用领域

web开发(写网站从无到有)人工智能 爬虫(大批量爬取网络中的数据)金融分析 云计算

Python2 和 Python3 的区别

Python2 源码不统一 重复代码

Python3 源码统一 没有重复代码

Python2的input获取到的是什么类型就是什么类型

Python3的input获取到的全都是字符串

Python2不支持中文 print可以不加括号

编程语言

编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型定义语言

编译型(代表 C)

优点: 运行速度快 缺点:开发效率慢

解释型(代表 Python)

优点:开发效率快 缺点:运行速度慢

Python的优缺点

优点

  1. 简单易懂

  2. 开发效率非常高,类库(第三方库)特别多

  3. 高级语言,无需考虑内存等底层细节

  4. 可移植性,可跨平台

  5. 可扩展性,在Python中把部分程序用C或C++编写

  6. 可嵌入性,Python可嵌入C或C++

    缺点

  7. 速度慢

  8. 代码不能加密

  9. 线程不能利用多CPU

Python的种类

Cpython(Python转C语言)    Jyhton (Python转java)  IronPython (Python转C#)

PyPy(Python转Python编译)(特殊) 

Python的入门

变量 -- 输出

a = 1         # 声明变量
a             # 变量的名字
=             # 赋值
1             # 值
变量定义的规则
1.变量由数字,字母,下划线组成
2.不能以数字开头
3.不能使用python中关键字 (and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lanbda,not,or,pass,print,raise,return,try,while,with,yield)
4.不能使用中文和拼音
5.区分大小写
6.变量名要具有描述性
7.推荐写法
    7.1驼峰体 
    7.2下划线 age_of_oldboy = 98  (官方推荐)
变量的小高级
age = 18
age1 = 19
age2 = age      # age2 = 18
age = 20
print(age,age1,age2)     #20 19 18  一个变量名只能代指一个值
a = 4
b = a + 6   #在声明变量的时候先执行等号右边的内容
print(b)          # 10

常量

常量:ID = 11012013014066      常量就是不变的量

常量名全部大写

注释

单行注释 # 
多行注释 """ """  ''' ''' 
被注释的内容是不是会执行的

基础数据类型

type(类型)

数字: 用于计算和比较(int)

字符串:在python中只要是用引号引起来的就是字符串(str)

加法 -- 同是字符串才能相加

乘法 -- 只能和数字进行相乘

''' I'm   "meet" '''    #引号配合使用
a = 'alex'
b = 'wusir'
print(a+b)    # alexwusir  字符串拼接   注意:只能和字符串相加
a = '坚强'
print(a*8)    #坚强坚强坚强坚强坚强坚强坚强坚强 字符串乘   注意:只能和数字相乘

布尔值:返回真假值 用于判断(bool)

True   真
False  假

程序交互

注意:input获取到的内容全都是字符串

int() -- 将字符串中的数字转换成整型

type() -- 查看数据类型

if

if 判断条件:
    执行语句……
else:
    执行语句……
if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……

while 循环

while -- 关键字 (死循环)

while 条件:

循环体

while 判断条件(condition):
    执行语句(statements)……

while else

while True:    
	print(111)    
	break
else:    
	print(222)
	
while True:    
	print(111)   
	break
	print(222)

总结:

打断循环的方式:    
1.自己修改条件   
2.breakbreak -- 打破当前循环 (终止当前循环)
continue -- 跳出当前循环继续下次循环(将
continue伪装成循环体中的最后一个行代码)break和
continue相同之处:他们以下的代码都不执行

for 循环

for iterating_var in sequence:
   statements(s)

字符串格式化

print "My name is %s and weight is %d kg!" % ('Zara', 21) 
My name is Zara and weight is 21 kg!

运算符

算术运算符

符号 名称
+
-
*
/
%
** 幂运算
// 整除

赋值运算符

符号 名称
+= 加等于
-= 减等于
*= 乘等于
/= 除等于
//= 整除等于
**= 幂等于
%= 模等与

比较运算符

== 判断等号两端的值是否相同

is判断判断内存地址是否相同

符号 名称
> 大于
< 小于
>= 大于等于
<= 小于等于
== 等于
!= 不等于

成员运算符

符号 名称
in
not in 不在

逻辑运算符

符号 名称
and 前后都为真取后者,前后都为假取前者,一真一假取假
or 前后都为真取前者,前后都为假取后者,一真一假取真
not

成员运算符

in 存在 not in 不存在

编码初识

ascii (老美)不支持中文

gbk (国标) 英文 8位 中文16位

unicode (万国码)英文2字节 16 位 中文4字节 32位

utf-8 (可变长的编码) 英文1字节8位 欧洲文2字节16位 亚洲3字节24位

linux -- utf-8

mac -- utf-8

windows -- gbk

单位转换:

1字节 = 8位

1Bytes = 8bit

1024Bytes = 1KB

1024KB = 1MB

1024MB = 1GB

**1024GB = 1TB ** TB就够用了

1024TB = 1PB

1024PB = 1EB

整型以及布尔值转换

整型 -- 数字 (int)

整型(数字)用于比较和运算

计算机支持的数字范围

32位 -- -2 ** 31 ~ 2 ** 31 -1

64位 -- -2 ** 63 ~ 2 ** 63 -1

Python2和Python3在整型中的区别

python2 整型 int -- long(长整型) /获取的是整数 python3 整型 int / 获取的是浮点数(小数)

二进制和十进制

456  ----- 十进制数0101 ----- 二进制数除此之外还有:十六进制  八进制  二进制

bool() 布尔值

print(bool(1))  # 数字非零的就是True 零就是Falseprint(bool("")) # 字符串不为空就是True(有空格也是不为空) ,字符串中没有任何内容就是False

字符串详解

在python中引号引起来就是字符串

字符串是用来存储少量数据

name = "m e a t"
# meat 每一个字母叫做一个元素           
# 0 1 2 3    从左向右           #-4-3-2-1    从右向左          
# 索引(下标) 通过索引可以精确的定位到某个元素print(name[-1])  
# t

切片

name = " 今天是个 好日子"      
# 0 1 2 3 4 5 6       
#-7-6-5-4-3-2-1a = name[0]       
#今b = name[1]       
#天print(a+b)   
#今天print(name[0:2])  
# 顾头不顾尾  name[起始位置:终止位置]print(name[:])  
# 某个位置不指定的时候默认取最后或最前print(name[2:5]) 
# 是个好print(name[-4:-1])
# 个好日print(name[-2:-5])    
# 输出为空print(name[-2:-5:-1])
# [起始位置:终止位置:步长] 步长默认为1 例:name = "大黑哥吃大煎饼"print(name[1:5])    
#黑哥吃大print(name[-2:-6:-1])  
#哥吃大煎print(name[-6:6])    
#黑哥吃大取第1.3.5.7位置的字a = name[0]b = name[2]c = name[4]d = name[6]print(a+b+c+d)运用步长:print(name[::2])      
#步长为2,所以每两个取一个print(name[100:105])  
#切片的时候起始位置和终止位置都超出的时候不会进行报错print(name[100]) 
#索引的时候索引值超出范围的时候会报错 练习:s = 'Python最NB'获取s字符串中前3个内容print(s[:3])获取s字符串中第3个内容print(s[2])获取s字符串中后3个内容print(s[-3:])获取s字符串中第3个到第8个print(s[2:-1])获取s字符串中第2个到最后一个print(s[1:])获取s字符串中第1,3,5个内容print(s[:5:2])获取s字符串中第2,4,6个内容print(s[1:6:2])获取s字符串中所有内容print(s)获取s字符串中第4个到最后一个,每2个取一个print(s[3::2])获取s字符串中倒数第5个到最开始,每3个取一个   print(s[-5::-3])

字符串的方法:

方法 描述 代码
upper() 将字符串转换为大写 "abc".upper()
lower() 将字符串转换为小写 "ABC".upper()
startswith() 查询以什么开头返回bool类型 "abc".startswith("a")"abc".startswith("b",1)
endswith() 查询以什么结尾返回bool类型 "abc".endswith("a")"abc".endswith("b",0,2)
count() 统计指定内容出现次数 "aaba".count("a")
strip() 去除两段的空格、换行符、制表符(可指定内容) print(" a ".strip()"abc".strip("a")
split() 以空格、制表符、换行符进行分割(可指定内容以及最大分割块)返回一个数组 "a b c ".split(maxsplit=2)
replace() 替换字符串中的内容,(可以指定替换次数) "abc".replace("b","c",1)
isalnum() 判断是否为子母、数字、中文 "a2三".isalnum()
isalpha() 判断是否为字母,中文 "a三".isalpha()
isdigit() 判断是否为阿拉伯数字 "12③".isalnum()
isdecimal() 判断是否为十进制的数字 ”123".isdecimal()
len() 获取字符串长度 "abc".len()
capitalize() 将字符串首字母大写 "abc".capitalize()
title() 将字符串每个单词首字母大写 "a b c".title()
swapcase() 将字符大小写反转 "aBc".swapcase()
center() 居中填充 "abc".center(15,"-")
find() 查找,当不存在的时候返回-1(返回值为下表) "abc".find("b")
index() 查找,当不存在提示错误 "abc".index("b")
join() 使用指定内容拼接 "^".join("abc")

S系列

s = "ALEX"s1 = s.upper()
#全部大写print(s1)s1 = s.lower()
# 全部小写print(s1)应用场景
s = input("验证码(AbC5)")
if s.upper() == "AbC5".upper():    
	print("验证码正确")
else:    
	print("验证码错误!")
以....开头:
s = "ALEX"s1 = s.startswith("A")
print(s1)      
#Trues1 = s.startswith("E",2,6)print(s1)      
#True以....结尾:
s = "ALEX"s1 = s.endswith("X")
print(s1)      #True
统计s = "alexdxjbx"s1 = s.count("x")print(s1)    
# 3脱: 字符串头尾两端的空格和换行符以及制表符n = input(">>>")if n.strip() == "alex":    print("1")else:    print("2")       
#输入"  alex  "  输出"1"s = "alexdsba"s1 = s.strip("a") 
# 可以指定内容取脱print(s1)     
# lexdsb分割:以空格和换行符以及制表符进行分割s = "aelxlaaa"s1 = s.split("l")  
# 可以通过指定方式进行切割   print(s1)       
# "ael","laaa"s = "aelxlaxaa"s1 = s.split("l",maxsplit=1)
# 存在多个可切割目标时,可用maxsplit来指定切割次数,maxsplit=1即切割次数为1print(s1)       
# "ael","laxaa"s = "aelxlaxaa"s1 = s.rsplit("l",maxsplit=1) 
# 存在多个可切割目标时,用maxsplit指定切割次数后,可在split前加"r"来更改切割优先方向print(s1)       
# "aelx","laaa"替换:s = "大黑哥吃肉夹馍"s1 = s.replace("肉夹馍","大煎饼")print(s1)          
# 大黑哥吃大煎饼s = "大黑哥吃肉夹馍,肉夹馍"s1 = s.replace("肉夹馍","大煎饼",1) 
# 指定替换的次数print(s1)          
#大黑哥吃大煎饼,肉夹馍补充

str:

不可变数据

1.首字母大写:

name = "alex"name1 = name.capitalize()print(name1)

2.每个单词首字母大写:

name = "alex wusir"print(name.title())

3.大小写反转

name = "Alex"print(name.swapcase())

4.居中 -- 填充

name = "alex"print(name.center(20,"-"))

5.查找

从左向右 只查找一个name = "alelx"print(name.find("b"))  #find查找不存在的返回-1 存在返回"0"print(name.index("b")) #index查找不存在的就报错,,存在的返回索引值

6.拼接

name = "al3x"print("_".join(name))  

7.格式化

① %s② f''③ name.format()name = "alex{},{},{}"print(name.format(1,2,3)) 
# 按照顺序位置进行填充name = "alex{2},{0},{1}"print(name.format("a","b","c"))
# 按照索引值进行填充name = "alex{a},{b},{c}"print(name.format(a=1,c=11,b=67)) 
# 按照关键字进行填充

8.字符串的 加 和 乘

开辟新的内存空间
name = "alex"name1 = "wusir"
print(name)print(name1)
print(name + name1) 

is系列

s = "12.3"print(s.isalnum())  
# 判断是不是字母,数字,中文print(s.isalpha())
# 判断是不是字母,中文print(s.isdigit()) 
# 判断字符串是不是全都是阿拉伯数字print(s.isdecimal())  
# 判断是否是十进制

列表

定义

列表--list--容器

有序,可变,支持索引.

列表:存储数据类型很多,字符串,数字, 布尔值,列表,集合,元祖,字典.

定义一个列表:

lst = ["dsb",123,True,"黑哥"]   
# 用逗号分隔的是一个元素获取对象的内存地址(id)print(lst[0])       
# dsbprint(id(lst[0]))    # 2354942210432 lst[0] = "dsb"print(lst)   
# ['dsb', 123, True, '黑哥']s = "alex"     
# 字符串是不可变数据s = "wusir" s[0] = "b"print(s)

列表的增,删,改,查

增加

方法 描述 代码
append() 在列表末尾追加 lis.append(4)
insert() 在列表指定位置插入值 lis.insert(0,0)
extend() 在列表末尾进行迭代添加 lis.extend("456")
lst = ["dsb",123,True,"黑哥"]lst.append("大煎饼") 
# 追加(在列表的最后位置追加一个内容)print(lst)         
# ["dsb",123,True,"黑哥","大煎饼"]lst.insert(2,"wusir")
# 插入  以后尽量不要使用(当数据量比较大的时候会影响效率) 
print(lst)           
# ["dsb",123,"wusir",True,"黑哥"]lst.extend("可迭代的内容") 
#迭代添加print(lst)           # ['dsb', 123, True, '黑哥', '可', '迭', '代',                        '的', '内', '容']

删除

方法 描述 代码
pop() 默认删除最后一个,可以通过下标指定删除 lis.pop(1)
remove() 通过元素的名字进行删除 lis.remove(2)
del 通过索引、切片、步长删除 del lis[::2]
clear() 清空列表 lis.clear()
lst = ["dsb",123,True,"黑哥"]lst.pop()   
# 弹--默认删除最后一个print(lst)   
# ['dsb', 123, True]lst.pop(2) 
# 通过指定索引进行删除print(lst)  
# ["dsb",123,"黑哥"]#通过pop删除,有返回值返回的是被删除的元素#lst = ["dsb",123,"dsb",True,"黑哥"]lst.remove("dsb")  
# 移除 -- 通过元素名字进行删除print(lst)      
# [123,"dsb",True,"黑哥"] del lst[0]      
# 通过索引删除print(lst)       
# [123,True,"黑哥"]del lst[0:3]      
# 通过切片删除print(lst)       
# ["黑哥"]del lst[0:3:2] 
# 通过步长删除print(lst)       
# [123, '黑哥']lst.clear()       
# 清空print(lst)    
# []

方法 描述 代码
= 通过索引、切片、步长进行修改 lis[::2] = "2","2"
lst = [123,"dsb",True,"黑哥"]lst[1] = "123"       
# 通过索引改变print(lst)      
# [123, '123', True, '黑哥']lst[1:2] = "12345"   
# 通过切片改变,且此方法改变结果为迭代方式print(lst)              
# [123, '1', '2', '3', '4', '5', True, '黑                           哥']                   lst[1:4] = 12,13,14,15  # 通过切片改变,但此方法不迭代print(lst)           
# [123, 12, 13, 14, 15]# 切片改变列表,元素可以超出切片的位数lst[1:4:2] = "12"/1,2   
# 通过步长改变,步长不为1的必须一一对应,多一个也不行,少一个也不行print(lst)         
# [123, '1', True, '2']

方法 描述 代码
for 遍历查询 for i in lst1:
lis[0:6:2] 通过索引、切片、步长进行查找 lis[0:6:2]
for 循环lst = ["dsb",123,"dsb",True,"黑哥"]for i in lst:    print(i)            # dsb                          123                          dsb                          True                          黑哥

列表的嵌套

lst = [1,"alex","春生","小东北","渣弟",["大黑哥",["常鑫",["自行车"],"大煎饼","掉井盖","三金"],"冯强","海峰",["太白金星","女神","吴超",["肖锋"]]]]用索引的方式找到"自行车"print(lst[-1][1][1][0])     
# "自行车"a = lst[-1][-1][-2]print(a)               
# 吴超# 不管什么类型,进行切片的时候获取到的都是原数据类型
# 取值通过索引进行取值,一层一层的进行查找
 

list

1.定义方式

lst = [1,"alex","春生","小东北","渣弟",["大黑哥",["常鑫",["自行车"],"大煎饼","掉井盖","三金"],"冯强","海峰",["太白金星","女神","吴超",["肖锋"]]]]用索引的方式找到"自行车"print(lst[-1][1][1][0])    
# "自行车"a = lst[-1][-1][-2]print(a)            
# 吴超# 不管什么类型,进行切片的时候获取到的都是原数据类型# 取值通过索引进行取值,一层一层的进行查找

2.其他方法

2.1 排序 (默认升序)
lst = [1,2,23,234,435,36,23,213421,421,4231,534,65]
lst.sort() 
print(lst)lst = ["你好","我好"]
lst.sort() 
print(lst)
2.2 反转
lst = [1,2,3,4453,5,6,7]print(lst[::-1])
lst.reverse()   
print(lst)lst =[1,2,3,4,5123,21345,231123,4,1235,234,123]lst.sort()lst.reverse()print(lst)
面试题:
拼接两个列表方式一:
lst.extend(lst1)print(lst)
方式二:
print(lst+lst1)
正题
lst = [1,2,3,4,5]
lst1=  lst 
* 5new_lst = lst 
* 5print(new_lst[0] is new_lst[-5])     
# True扩展lst = [[]]new_lst = lst
* 5new_lst[0].append(10)print(new_lst)
# [[10], [10], [10], [10], [10]]lst = [1,[]]new_lst = lst
* 5new_lst[0] = 10print(new_lst)
# [10, [], 1, [], 1, [], 1, [], 1, []]lst = [1,[]]new_lst = lst * 5new_lst[1] = 10print(new_lst)
# [1, 10, 1, [], 1, [], 1, [], 1, []]lst = [[]]new_lst = lst
* 5new_lst[0].append(10)print(new_lst)
# [[10], [10], [10], [10], [10]] 

元组

定义

元组 -- tuple

有序,不可变,支持索引

只能索引查看和for查看,不能进行增删改

元组用于存储一些比较重要的信息

元组在配置文件中会使用

元组就是不可变的列表

定义一个元组:

tu = (1,"alex",True,"大黑哥",[1,2,3])l
st = [1,"alex",True,"大黑哥",[1,2,3]]print(tu)            
# (1, 'alex', True, '大黑哥', [1, 2, 3])
tu = (1,"alex",True,"大黑哥",[1,2,3])
print(tu[0:6])      
# (1, 'alex', True, '大黑哥', [1, 2, 3])
for 循环
for i in tu:   
	print(i)         
# 1                       alex                         True                       大黑哥                       [1, 2, 3]

tuple

tu = ("12")     
# 数据类型是( )中数据本身print(type(tu))# <class 'str'>tu = (1,)       
# (1,) 是元组print(type(tu))  
# <class 'tuple'>元组 加 乘 不可变共用,可变也共用
 

range

定义

range -- 范围

print(list(range(0,10)))      # 顾头不顾尾

python2 和 python3 中的区别

Python3 中的 range 是一个可迭代对象,写的是怎样打印的时候就是怎样

Python2 中的 range 返回的是一个列表

range的使用

print(list(range(0,10,1)))     
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]                              
# 步长不写得时候默认为1  [0:10:1]print(list(range(10,-2,-1)))  
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1,                                    0, -1]                             
# 步长不写得时候默认为1  [10:-2:-1]print(list(range(10)))         # 步长不写得时候默认为1  [:10]

使用for循环和range

打印 
100 - 1for i in range (100,0,-1):    
	print(i)
打印 1 - 100的所有奇数
for i in range(1,101,2): 
	print(i)    打印
1 - 100的所有偶数
for i in range(2,101,2):   
	print(i)    
打印 1 - 100的所有被6整除的数
for i in range(6,101,6):  
	print(i)    
让用户输入姓名,并在第三次输入后停止输入,打印出所有输入的名字.使用
while 循环
lst = []flage = Truewhile flage:   
name = input("请输姓名:") 
# 请输姓名:agag    lst.append(name)        
# 请输姓名:garag    if len(lst) == 3:         
# 请输姓名:garg        flage = False         
# ['agag', 'garag', 'garg']print(lst)  使用 for 循环和rangelst = []for i in range(3):    lst.append(input("请输入姓名:"))print(lst)
# 请输入姓名:sssht
# 请输入姓名:shtst
# 请输入姓名:hst
# ['sssht', 'shtst', 'hst']

字典

定义

字典 -- dict

字典是无序的,可变的数据类型

字典:用于存储数据,存储大量数据,字典要比列表快,将数据和数据之间进行关联

定义一个字典:

dic = {"常鑫":10,"李文虎":80,"张宇":100}字典中逗号分隔叫做一个元素"常鑫"(键):10(值) -- 键值对dic = {"常鑫":10,"李文虎":80,"张宇":100,10:"大黑哥",True:123,(1,2,3):"大煎饼",[1,2]:"meet"}print(dic)          
#报错 列表字典集合可变不能为"键"

字典的键:

可哈希的 --- 不可变的数据类型 --- 避免哈希冲突使用了 开放寻址法

不可哈希的 --- 可变的数据类型

要求唯一 --- 如果有重复的后边值的将前面的值覆盖

字典的值:

可以任意

字典的增,删,改,查

增:

方法 描述 代码
强制添加 如果所添加的键已存在字典中则会将其的值替换 dic["1"] = 1
 1.dic = {"常鑫":10,"李文虎":80,"张宇":100}dic["李文虎"] = 89   
 print(dic)     
 # dic = {"常鑫":10,"李文虎":89,"张宇":100} 
 # 暴力添加 2.dic = {"常鑫":10,"李文虎":80,"张宇":100}dic.setdefault("大黑哥",50)      print(dic) 
 # {'常鑫': 10, '李文虎': 80, '张宇': 100, '大黑哥': 50}
 # "大黑哥"这个键去字典查询,没有就添加,有就不执行添加.

删除:

方法 描述 代码
del 删除指定键的值,如果未指定键则会删除整个字典 del dic["1"]
pop() 删除指定键的值 dic.pop("1")
clear() 清空字典 dic.clear()
popitem() 随机删除返回被删除键值对(python3.6默认删除最后一个)
 1.dic = {"常鑫":10,"李文虎":80,"张宇":100}del dic["常鑫"]prin(dic)     
 # {'李文虎': 80, '张宇': 100}# 通过字典的键删除键值对 
 2.dic = {"常鑫":10,"李文虎":80,"张宇":100}print(dic.pop("常鑫"))     
 # 10print(dic)                    
 # {'李文虎': 80, '张宇': 100}
 # 通过字典的键进行删除键值对 返回值:返回的是删除的值 
 3.dic = {"常鑫":10,"李文虎":80,"张宇":100}
 dic.clear()
 print(dic)    
 #{}# 清空

改:

方法 描述 代码
强制修改 如果所添加的键已存在字典中则会将其的值替换 dic["1"] = 1
update() 将指定字典更新入远的字典,如果指定字典的键与原字典相同则替换值,如果不同则进行添加 dic.update(dic2)
 1.dic = {"常鑫":10,"李文虎":80,"张宇":100}
 dic["常鑫"] = "dsb"print(dic)            
 # {'常鑫': 'dsb', '李文虎': 80, '张宇': 100}
 # 字典中没有某个键值对的时候就是添加,当键在字典中存在的时候就是修改
 # 有则改,无则加 
 2.dic = {"常鑫":10,"李文虎":80,"张宇":100}
 dic.update({"常鑫":50,"张宇":30})print(dic)      
 # {'常鑫': 50, '李文虎': 80, '张宇': 30}
 # update括号中的字典级别高于update前面的字典

查:

方法 描述 代码
for 通过for遍历字典的键 for i in dic:
get() 使用键查询对应的值,如果存在返回值,否则返回None,可以指定返回值 dic.get("1",1)
键查询 通过键查询其值,如果存在返回值,否则会提示错误 dic["1"]
setdefaule() 如果查询的键存在返回对应的值,键不存在时进行添加,值为设置的默认值。 a.setdefault(3,"222")

1.dic = {"常鑫":10,"李文虎":80,"张宇":100}for i in dic:    print(i) 
# 常鑫    
# 李文虎    # 张宇#循环获取的是字典中每个键值对的键
2.dic = {"常鑫":10,"李文虎":80,"张宇":100}print(dic.get("李文虎"))     
# 80# 通过键获取值,如果将不存在字典中返回Noneprint(dic["ck"])           
# 报错# 通过键获取值,如果将不存在字典中报错 

其他操作

方法 描述 代码
keys() 将字典中所有的键存放在一个高仿列表中 dic.keys()
values() 将字典中所有的值存放在一个高仿列表中 dic.values()
items() 将字典中的所有的键和值以元组的形式存放在一个高仿列表中 dic.items()
1.dic = {"1":3,"5":9,"李文虎":100}
for i in dic:    
	print(i,dic.get(i))             
	# 1 3# 5 9# 李文虎 100
	# 获取字典中所有的键和值
2.dic = {"1":3,"5":9,"李文虎":100}print(dic.keys())      
# dict_keys(['1', '5', '李文虎'])
# 高仿列表 -- dict_keys(['1', '5', '李文虎']) 支持for循环 不支持索引
3.dic = {"1":3,"5":9,"李文虎":100}
for i in dic.keys():    
	print(i)                   # 1                                # 5                                # 李文虎# 获取字典中所有的键 
4.dic = {"1":3,"5":9,"李文虎":100}
lst = []for i in dic:    
	lst.append(dic[i])print(lst)                       
#[3, 9, 100]# 获取字典中所有的值 
5.print(list(dic.values()))       
#[3, 9, 100]# 获取字典中所有的值 
6.dic = {"1":3,"5":9,"李文虎":100}
	print(dic.items())
	# dict_items([('1', 3), ('5', 9), ('李文虎', 100)])
7.dic = {"1":3,"5":9,"李文虎":100}
for i in dic.items():   
	print(i[0],i[1])          
    # 1 3                               # 5 9                               # 李文虎 100

随机删除:

dic = {"key":1,"key2":2,"key3":56}
	print(dic.popitem())       
# 返回的是被删除的键值对(键,值)print(dic)# python3.6 默认删除最后一个(bug)

批量添加:

dic = {}dic.fromkeys("123",[23]) 
# 批量添加键值对{"1":[23],"2":[23],"3":[23]}print(dic)dic = dict.fromkeys("123456789",1)\
# 批量添加键值对"键是可迭代对象",值 -- 会被共用dic["1"] = 18print(dic)
 

解构

a,b = 10,12
print(a)
print(b)                 # 10                           # 12      
a = 10b = 20a,b = b,aprint(a,b)             
# 20 10                         
a,b = [1,2]print(a,b)           
# 1 2a,b = (3,4)print(a,b)           
# 3 4a,_,b = (3,4,5)print(a,b)          
# 3 5  等号后边的值和前面的变量名要一一对应a = 10,12  
print(a)               
# (10,12)  本质就是一个元组
a,b = "23"print(a,b)    
# 2 3a,b = {"1":"a","2":"b"}print(a,b)    
# 1 2 dic = {"1":3,"5":9,"李文虎":100}
for i in dic.items():   
print(i)            
# ('1', 3)                         # ('5', 9)                         # ('李文虎', 100)       
dic = {"1":3,"5":9,"李文虎":100}for k,v in dic.items(): 
print(k,v)        
# 1 3                         # 5 9                         # 李文虎 100                         # 获取每个元素的键和值

集合 -- set

set() -- 空集合{} -- 空字典定义集合:set("alex")  # 迭代添加的

定义集合:

没有值的字典

无序 -- 不支持索引

天然去重

s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4}print(s)

面试题:

lst = [1,2,1,2,4,2,45,3,2,45,2345,]
print(list(set(lst)))s = {1,2,3,4}

集合的增删改查:

1.增:

方法 描述 代码
add() 添加一个值 se.add(1)
update() 迭代添加 se.update("abc")
增:s.add("67")     
# 只能添加一个print(s)s.update("今天")  
# 迭代添加print(s)

2.删

方法 描述 代码
pop() 随机删除,返回的是被删除的值 se.pop()
remove() 指定值删除 se.remove(2)
clear() 清空集合 se.clear()
print(s.pop())
# pop有返回值print(s)s.remove(3)   
# 指定元素删除print(s)s.clear()        
# 清空   -- set() 空集合print(s)

3.改

先删再加

4.查

方法 描述 代码
for 通过for循环遍历集合 for i in se:
for i in {1,2,3}:    print(i)

其他操作:

方法 描述 代码
& 交集 se1&se2
| 并集 se1|se2
- 差集 se1-se2
^ 反交集 se1^se2
> 父集 se1>se2
< 子集 se1<se2
frozenset() 冻结集合 frozenset(se)
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,1}print(s1 & s2) 
# 交集 {1, 5, 6, 7}print(s1 | s2)  
# 并集 {1, 2, 3, 4, 5, 6, 7}print(s1 - s2) 
# 差集 {2, 3, 4}print(s1 ^ s2) 
# 反交集     {2, 3, 4}print(s1 > s2)
# 父集(超集) Trueprint(s1 < s2) 
# 子集      Falseprint(frozenset(s1)) 
# 冻结集合 更不常用 
frozenset({1,2,3,4,5,6,7})
dic = {frozenset(s1):1}print(dic)   
#{frozenset({1, 2, 3, 4, 5, 6, 7}): 1}

数据类型之间转换

list  tupletuple liststr转 
list的方法:name = "alex"  
print(name.split())
list转 str的方法:
lst = ["1","2","3"]
print(''.join(lst)

数据类型总结

分类 数据类型
可变 list,dict,set
不可变 int,str,tuple,bool
有序 list,tuple,str,int,bool
无序 dict,set
取值方式
索引 str,list,tuple
直接 set,int,bool
dict

python的数据类型

可变:list ,dict ,set
不可变:int bool str tuple
有序:list,tuple,str,int,bool
无序:dict,set取值方式:
索引: str list tuple
直接: set ,int ,bool 
键: dict

以后会遇见的坑

for的死循环

lst = [1,2]for i in lst:   
lst.append(3)print(lst)# 打印不出内容

删除列表的坑

lst = [1,2,3,4]
for i in lst:    
	lst.pop()
	print(lst)
	# [1, 2]

lst = [1,2,3,4]
for i in lst:    
	lst.pop(0)print(lst)
# [3, 4]
lst = [1,2,3,4]
for i in lst:    
	lst.remove(i)
	print(lst)# [2, 4]

成功删除的方式

lst = [1,2,3,4,5]
for i in range(len(lst)):   
	lst.pop()print(lst)
	
lst = [1,2,3,4,5]
for i in range(len(lst)-1,-1,-1):  
	del lst[i]print(lst)
	lst = [1,2,3,4,5]
	
for i in range(len(lst)):    
	del lst[-1]
	print(lst)
	
lst = [1,2,3,4,5]
lst1 = lst.copy()
for i in lst1:   
	lst.remove(i)print(lst)

删除字典的坑

dic = dict.fromkeys("12345",1)
for i in dic:   
	dic.pop(i)
	print(dic)# 报错# 字典的迭代的时候改变了原来的大小(不能加不能删)

正确删除的方式

dic = dict.fromkeys("12345",1)
dic1 = dic.copy()
for i in dic1:    
	dic.pop(i)print(dic)
	# {}# 集合和字典都是迭代的时候不能改变原来的大小

二次编码

密码本:

ascii -- 没有中文

gbk -- 英文 8b(位) 1B(字节) 中文 16b 2B

unicode -- 英文16b 2B 中文32b 4B

utf-8 -- 英文8b 1B 欧洲16b 2B 亚洲24b 3B

name = "你好啊"s1 = name.encode("utf-8")
# 编码 s2 = name.encode("gbk") 
# 编码 s2 = s1.decode("utf-8")
# 解码print(s2.encode("gbk"))

小数据池 -- 缓存机制(驻留机制)

== 判断两边内容是否相等

a = 10b = 10print(a == b)

is 是

a = 10b = 10print(a is b)  is判断基于内存地址进行判断

代码块:

一个文件,一个函数,一个类,一个模块,终端中每一个行是一个代码块

数字:

在同一代码块下 只要内容相同就采用相同的内存地址(-5以后就不是)

数字在做乘法的时候范围 -5 ~ 256

数字在做乘法的时候不能使用浮点数

字符串:

在同一代码块下 只要内容相同就采用相同的内存地址

乘法的时候总长度不能超过20

乘法的时候中文,特殊符号乘以1或0

布尔值:

在同一代码块下 只要内容相同就采用相同的内存地址

小数据池:

数字:

-5 ~ 256

字符串:

在同一代码块下 只要内容相同就采用相同的内存地址

乘法的时候总长度不能超过20

乘法的时候中文,特殊符号乘以0

布尔值:

在同一代码块下 只要内容相同就采用相同的内存地址

小数据池的验证方法,必须脱离代码块才能进行验证

先执行代码块的规则,在执行小数据的规则 --(驻留机制)

必会:

== 判断等号两边的值是否相等

is 判断两边的内存地址是否相等

深浅拷贝 (复制)

面试必问 : 赋值,浅拷贝,深拷贝

赋值

lst = [1,2,3,[5,6,7]]lst1 = lstprint(lst1)     
#[1, 2, 3, [5, 6, 7]]print(lst)               
#[1, 2, 3, [5, 6, 7]]lst[-1].append(8)print(lst1)      
#[1, 2, 3, [5, 6, 7, 8]]print(lst)            
#[1, 2, 3, [5, 6, 7, 8]]

浅拷贝

lst = [1,2,3,[5,6,7]]lst1 = lst.copy()      
# 新开辟一个空间给lst1print(lst[-1])            
# [5, 6, 7]print(lst1[-1])            
# [5, 6, 7]浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素
lst = [1,2,3,[5,6,7]]
lst1 = lst.copy()
lst1[-1].append(8)print(lst)   
#[1, 2, 3, [5, 6, 7, 8]]
print(lst1)       
#[1, 2, 3, [5, 6, 7, 8]]
lst = [1,2,3,[5,6,7]]
lst1 = lst.copy()
lst[3] = 567print(lst1)       
#[1, 2, 3, [5, 6, 7]]
print(lst)         
#[1, 2, 3, 567]
lst = [1,2,3,4,[5,6,7,[8,9]]]
lst1 = lst.copy() 
lst1.append(10)
print(lst)     
#[1,2,3,4,[5,6,7,[8, 9]]]
print(lst1)     
#[1,2,3,4,[5,6,7,[8,9]],10]
lst = [1,2,3,4,[5,6,7,[8,9]]]
lst1 = lst.copy()
lst1[-1][-1] = "56"print(lst)       
#[1,2,3,4,[5,6,7,'56']]
print(lst1)              
#[1,2,3,4,[5,6,7,'56']]
lst = [[1,2,],90,6,7,[5,6]]
lst1 = lst.copy()lst1[-1] = 8print(lst)    
#[[1, 2], 90, 6, 7, [5, 6]]print(lst1)           
#[[1, 2], 90, 6, 7, 8]
dic = {"alex":[1,2,3,[5,6]]}
dic1 = dic.copy()dic["alex"][0] = "56"print(dic)  
#{'alex': ['56', 2, 3, [5, 6]]}print(dic1)         
#{'alex': ['56', 2, 3, [5, 6]]}

深拷贝

import copy            
# 导入lst = [1,2,3,[5,6,7]]lst1 = copy.deepcopy(lst)  
# 深拷贝lst[-1].append(8)print(lst)             
# [1, 2, 3, [5, 6, 7, 8]]print(lst1)             
# [1, 2, 3, [5, 6, 7]]
lst = [1,2,3,[5,6,7,[8,10,9]]]
import copylst1 = copy.deepcopy(lst)lst[-1][-1][1] = 5print(lst)   
# [1, 2, 3, [5, 6, 7, [8, 5, 9]]]    
print(lst1)      
# [1, 2, 3, [5, 6, 7, [8, 10, 9]]]

总结:

浅拷贝的时候只拷贝第一层元素

浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变

浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变

浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变

深拷贝开辟一个容器空间(列表),不可变数据共用,可变数据数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行共用的,可变的数据类型再次开辟空间

文件操作

创建文件"asdf.txt"

open( )      
# 打开file           
# 文件的位置(路径)mode             
# 操作文件的模式encoding         
# 文件编码方式f               
# 文件句柄f = open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding="文件的编码")     
# 内置函数f(文件句柄)f = open("asdf",mode="r",encoding="utf-8")print(f.read())f.close()

路径:

1.绝对路径 -- C:\user\meet\python24\asdf 2.相对路径

绝对路径方式打开文件 f = open("F:\s24\day08\asdf","r",encoding="utf-8") print(f.read())

相对路径方式打开文件 f = open("../day03/asdf","r",encoding="utf-8") print(f.read()) ../ 返回上一层

f = open(r"C:\user\net\s24\day03\asdf","r",encoding="utf-8")

路径转义: 1."" 2.r"C:\user\net" 推荐使用相对路径 (*****)

s = "[1,'2',3,4]" print(s) print(repr(s)) # repr -- 显示数据原生态 ```

文件操作的模式:

文件打开模式 描述
r 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
w 以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建
a 以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建
r+ 在r的基础上增加了可写功能
w+ 在w的基础上增加了可读功能
a+ 在a的基础上增加了可读功能
b 读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb, ab, ab+(POSIX系统,包括Linux都会忽略该字符)

r,w,a (********)

r: 读文本
方法 描述 代码
read() 读取全部内容 f.read()
read(5) 按照字符读取 f.read(5)
readline() 按照行进行读取(自动换行) f.readline()
readlines() 按照行进行读取,存放在列表中 f.readlines()
for 使用for循环可以解决大文件读取 for i in f:
r操作:
f = open("asdf",mode="r",encoding="utf-8")print(f.read())   
#全部读取print(f.read(5))  
#按照字符进行读取print(f.read())print(f.readline()) 
# 读取一行内容,自动换行print(f.readline()) 
# "常鑫你就是大帅比\n"print(f.readline().strip())
#去除换行符print(f.readlines())
# 一行一行的读取,存放在列表中
解决大文件:
for i in f:   
	print(i) 
	# 本质就是一行一行进行读取
	print(f.readline())
	print(f.readline())
	print(f.readline())
w:清空,写
方法 描述 代码
write() 写入文件 f.write("123")
  w分为两步:       
  1.先清空文件     
  2.写入文件      
  open("xxx","w",encoding="utf-8") 
  # 进行清空       
  write()  
  只能写字符串
a:追加在源文件的基础上进行添加
f = open("../day03/asdf","a",encoding="utf-8")
f.write("138383848\n")f.write("138383850\n") 
w,a 检测有文件就操作,没文件就创建

rb,wb,ab(****)

rb:读字节
方法 描述 代码
read() 全部读取 f.read()
read(5) 按字节读取 f.read(5)
        read()  全部读取     
        read(3) 看文件的前三字节   
        readline 读取一行(自带换行符)      
        readlines() 一行一行读取存放在列表中wb:清空,写
方法 描述
write() 先清空在写入,只能写字节
        open("xxx","wb")  # 进行清空   
        write()  只能写字节ab:追加    
        open("xxx","ab")         
        write()  只能写字节

r+,w+,a+ (r+**)

r+:读写        错误的方式是写读        先读后写      
在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入 或者操作文件的时候都是在结尾进行的操作.w+:清空写,读        
1.清空文件 写入     
2.读取内容(默认读取的是空)a+:追加写,读       
1.先写后读       
2.读取内容(默认读取的是空)      
# 注意点: (a,ab,a+)将光标移动到某个位置进行,写入的时候还是在文件的末尾

其他操作:

光标

方法 描述 代码
tell() 查看光标,返回的是字节 f.tell()
seek(3) 移动光标(根据编码按字节计算) f.seek()
seek(0,0) 移动到文件头部 f.seek(0,0)
seek(0,1) 当前位置 f.seek(0,1)
seek(0,2) 移动文件末尾 f.seek(0,2)

文件修改:

修改文件内容:

1.创建一个新的文件

2.将文件中的内容进行替换

3.替换后的内容写入新文件中

4.改变文件名

示例:
with open("asdf","r",encoding="gbk")as f,\
    open("asdf.txt","w",encoding="gbk")as f1:
    for i in f:
        s1 = i.replace("大烧饼","井盖")
        f1.write(s1)
import os
os.rename("asdf","asdf.bak")
os.rename("asdf.txt","asdf")

with as

with 关键字 open("xxxx","r",encoding="gbk") as f:
  文件操作的具体内容

with open("文件路径","操作模式",编码")as f:
        操作文件

with open的好处:
        1.可以同时打开多个文件
        2.能够自动关闭文件
f = open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding="文件的编码")       # 内置函数
f(文件句柄)
posted @ 2021-02-24 18:16  丨渍丨  阅读(333)  评论(0)    收藏  举报