1.深浅拷贝
# 1.浅拷贝:拷贝了最外层的对象,内部的元素只拷贝了一个引用。
# 引用:自动形成的从变量到对象的指针
# a = 1 # a是变量名, = 赋值运算符 1是变量值
# print(a)
# print(id(a)) # id函数返回的是内存地址
# b = 2
# print(id(b))
import copy # 导入模块
# li = [1, 2, [3, 4]]
# l2 = copy.copy(li) # 浅拷贝
# li 和 l2是一个独立的对象,但是子对象指向了同一引用
# l2 = li.copy()
# print(li)
# print(l2)
# print(id(li))
# print(id(l2))
# 往外层列表中添加元素
# li.append('a')
# 往内层列表中添加元素
# li[2].append('a')
# print(li)
# print(l2)
# print(id(li[2]))
# print(id(l2[2]))
# 浅拷贝只会拷贝第一层,深层次的数据改变都会影响
# 2.深拷贝
# 深拷贝拷贝了对象的所有元素
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
# 深拷贝:a, b 是完全了拷贝了父对象和子对象,两者完全独立
print(id(a[2]))
print(id(b[2]))
# 往外层列表中添加元素
# a.append('b')
# 往内层列表中添加元素
a[2].append('b')
print(a)
print(b)
2.异常
# 1.捕获异常
# 格式一:
# 举例一:
# try:
# print(a) # 被检测的代码
#
# # except:
# # print('出现错误')
#
# except NameError as e:
# print(e) # 一旦检测到异常,就执行这里的代码
# 举例二: 捕获所有异常
# try:
# a
# except Exception as e: # 万能异常:Exception 可以捕获任意异常
# print(e)
# 格式二
# else:没有异常时才会执行的代码
# dic = {'name': 'zs'}
# # print(dic['name2']) # KeyError: 'name2'
# try:
# print(dic['name'])
#
# except Exception:
# print('出现错误')
#
# else:
# print('没有捕获到异常')
# 格式三
# finally:无论是否有异常,都会执行的代码
# dic = {'name': 'zs'}
# try:
# print(dic['name2'])
#
# except Exception:
# print('出现错误')
#
# else:
# print('没有捕获到异常')
# finally:
# print('无论有没有异常,都执行')
# 2.异常的传递
# def funa():
# inp = int(input('请输入整数:'))
# return inp
#
# def funb():
# print(funa())
#
# try:
# funb()
# except Exception as e:
# print('错误是:', e)
# 3.抛出异常
# 3.1 创建一个Exception('XXX')对象 , xxx为异常提示信息
# 3.2 raise抛出这个对象
# def funa():
# raise Exception('抛出一个异常') # raise后面的语句不会执行
# # print(123)
# funa()
# 输入密码,判断密码长度不能小于六位
# def funb():
# pwd = input('请输入密码:')
# if len(pwd) >= 6:
# return pwd
# # 创建异常对象
# ex = Exception('长度不够')
# # 抛出异常对象
# raise ex
#
# try:
# print(funb())
# except Exception as e:
# print('错误:', e)
3.模块
import random # 导入模块
# import导入的模块分为这三个类别:
# 1. .py文件
# 2.包好一组模块的包
# 3. 内置模块
# python中,模块分为三类
# 1.内置模块
# 2.第三方模块:通过pip install 库名 指令安装的模块
# 3.自定义模块
# 如果出现红色波浪线,可以正常执行
# as 起别名
# import test as t
# t.funa()
# 多个模块导入
# import random, copy, time 这种方式可以写不推荐
# import random
# import copy
# import time
# from 模块名 import 函数名1,函数名2....
# from test import * # 把模块中的所有内容都导入进来
# from test import funa # 导入部分
# funa()
# py文件:
# 1.脚本
# 2.模块
# 包:包含了__init__.py文件的文件夹
# __init__.py:是python中包的标识;可以编写python代码,但是尽量要保证它简单
from te import te2
4.包
# py文件:
# 1.脚本
# 2.模块
# 包:包含了__init__.py文件的文件夹
# __init__.py:是python中包的标识;可以编写python代码,但是尽量要保证它简单
from te import te2
test.py :
# import 模块 # 中文模块名可以,但不推荐
print('这是test.py')
a = 10
def funa():
print('这是test模块')
# 正常情况下,如果模板被导入,里面的代码块会被执行;
# 加上if __name__ == '__main__',模块被导入的时候,它下面的代码块不会被执行
if __name__ == '__main__': # python模拟的程序入口
funa()
print(123)