python进阶

一、数据类型分类

1.1 按存值个数区分

​ 存多个值(容器):列表、元组、字典、集合

​ 存单个值:整形、浮点型、字符串

1.2 按可变不可变区分

​ 可变:字典、集合、列表

​ 不可变:数字、字符串、元组

1.3 按有序无序区分

​ 有序:字符串、列表、元组

​ 无序:字典、集合

1.4 按访问类型区分

​ 直接访问:数字

​ 顺序访问(序列访问):字符串、列表、元组

​ key值访问(间接访问):字典

二、python深潜拷贝

​ 在python中,对象赋值实际上是对象的引用。创建一个对象,把它赋给另一个变量,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

2.1 拷贝

​ l2是l1的拷贝对象,l1内的任何数据变化,都会引起l2内的数据进行变化,l1、l2的id相同。

l1 = [1,2,3,4]
l2 = l1
l1.append(5)
print(l1)
print(l2)
print(id(l1))
print(id(l2))

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
2389714688328
2389714688328

2.2 浅拷贝

​ l2是l1的浅拷贝对象,l1内的不可变元素发生改变,l2不发生改变;如果l1内的可变元素发生了改变,则l2会跟着改变。

import copy
l1 = [1,2,3,[4,5,6]]
l2 = copy.copy(l1)
l1.append(7)
print(l1)
print(l2)
print(id(l1))
print(id(l2))

[1, 2, 3, [4, 5, 6], 7]
[1, 2, 3, [4, 5, 6]]
2209074390984
2209074391816
import copy
l1 = [1,2,3,[4,5,6]]
l2 = copy.copy(l1)
l1[3].append(7)
print(l1)
print(l2)
print(id(l1))
print(id(l2))

[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6, 7]]
2207936817096
2207936817928

2.3 深拷贝

​ l2是l1的深拷贝对象,l1内的不可变元素发生改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。

import copy
l1 = [1,2,3,[4,5,6]]
l2 = copy.deepcopy(l1)
l1.append(7)
print(l1)
print(l2)
print(id(l1))
print(id(l2))

[1, 2, 3, [4, 5, 6], 7]
[1, 2, 3, [4, 5, 6]]
1654809896904
1654809897736
import copy
l1 = [1,2,3,[4,5,6]]
l2 = copy.deepcopy(l1)
l1[3].append(7)
print(l1)
print(l2)
print(id(l1))
print(id(l2))

[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6]]
1728501852104
1728501852936

三 、异常处理

​ 异常就是程序运行时发生错误的信号

3.1 语法错误

if  # SyntaxError

​ 语法错误报错都是SyntaxError。

3.2 逻辑错误

1/0  #ZeroDivisionError: division by zero

​ 逻辑错误的报错都是不一样的。

3.3 常见的异常

  • AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  • IOError 输入/输出异常;基本上是无法打开文件
  • ImportError 无法引入模块或包;基本上是路径问题或名称错误
  • IndentationError 语法错误(的子类) ;代码没有正确对齐
  • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  • KeyError 试图访问字典里不存在的键
  • KeyboardInterrupt Ctrl+C被按下
  • NameError 使用一个还未被赋予对象的变量
  • SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  • TypeError 传入对象类型与要求的不符合
  • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
  • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

3.4 异常的处理

​ 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

s1 = 'hello'
try:
    int(s1)
except IndexError as e:  # 未捕获到异常,程序直接报错
    print(e)

​ 多分支结构

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
invalid literal for int() with base 10: 'hello'

​ 万能异常Exception

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)

​ 异常的最终执行

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else:
    print('try内代码块没有异常则执行我')
finally:
    print('无论异常与否,都会执行该模块,通常是进行清理工作')

​ try...except是最重要的异常捕捉的方式,而Exception可以捕捉任何异常。

3.5 raise抛出异常(了解)

try:
    raise TypeError('抛出异常,类型错误')
except Exception as e:
    print(e)

3.6assert断言(了解)

a = 1
a += 1
assert a == 3  # 条件成立会跳过,条件错误会报AssertionError错误
print(3)

​ 断言是最早没有pycharm时做调试用的,所一现在基本没有用。

文件处理

一、基本文件操作

1.1 什么是文件

​ 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位。文件的操作是基于文件,即文件的操作核心就是读和写。

1.2打开文件流程

​ 如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。

1.2.1 找到文件路径

path = r'D:上海Python11期视频python11期视频day 09	est.py'  # 鼠标右键点击文件,copy path

1.2.2 双击打开

f = open(path, 'w')  # r-->read 只读 ; w-->只写,清空当前文件后写入print(f)  # 文件数据类型

1.2.3 看文件

data = f.read()
print(data)

1.2.4 写文件

f.write('nick handsome')

1.2.5 关闭文件

del f  # 只删除了文件的引用以及文件在python内存中的占用,但是没有删除对操作系统的占用
f.close()  # 关闭操作系统对文件的占用

二、绝对路径和相对路径

2.1 绝对路径

​ Windows系统绝对路径从盘符(C:、D:)开始写一个完整的路径。

2.2 相对路径

​ 相对于当前执行文件所在的文件夹开始找。

原文地址:https://www.cnblogs.com/tangceng/p/11310516.html