首页 > 其他分享 >第四周总结

第四周总结

时间:2022-10-23 22:59:49浏览次数:62  
标签:总结 文件 __ 模块 print import 四周 os

周总结

异常常见类型

SyntaxError  
NameError
IndexError
KeyError
IndentationError
......

异常处理语法结构

1.基本语法结构
try:
  待检测的代码
except 错误类型:
  针对上述错误类型指定的方案
2.查看错误的信息
try:
  待检测的代码
except 错误类型 as e:
#e就是系统提示的错误信息
  针对上述错误制定的方案
3.针对不同的错误类型制定不同的解决方案
try:
  待检测
except 错误类型1 as e:
  针对上述错误1指定的方案
except 错误类型2 as e:
  针对上述错误2指定的方案
4.万能异常 exception/baseexception
try:
  待检测大代码
except exceptin as e:
   针对各种常见的错误类型全部同意处理
5.结合else使用
try:
  待检测大代码
except exceptin as e:
   针对各种常见的错误类型全部同意处理
else:
   try的子代码正常运行结构没有人任何的报错后 再执行else子代码吗
6.结合finally使用
try:
  待检测的代码
except exception as e:
    针对各种常见的错误类型全部统一处理
else:
    try的子代码正常运行结束没有任何的报错后 在执行else子代码
    finally:
    无论try的子代码是否报错 最后都要执行finally子代码

异常处理补充

1.断言
  name = 'jason'
  assetr isinstance(name,str)#判断name使不得hi字符串 如果是 就输出 如果不是就报错
  print('xxx')
  name.strip()
2.主动抛异常
  name = 'jason'
  if name == 'jason':
    raise Exception ('yyy')
  else:
    print('xxx')

异常处理实战应用

1.异常处理能少用就少用
2.被try检测的代码能尽量少就尽量少
3.当代码中可能会出现一些去发控制的情况才会考虑使用
eg:使用手机访问网络软件 断网

生成器对象

1.本质:
  内置里有__iter__和__next__的迭代器对象
2.区别:
  迭代器对象是解释器自动提供的
    数据类型/文件对象>>>:迭代器对象
  生成器对象是程序员编写出来的
    代码 关键字>>>:迭代器对象(生成器)
3.创建生成器的基本语法:
    函数代码中填写yield关键字
    '''
    1.函数体代码中如果有yield关键字
    那么函数名加括号不会执行函数体代码
    会生成一个生成器对象
    2.使用加括号之后的结果调用__next__才会执行函数体代码
    3.每次执行完__next__代码会停yield位置 下次基于该位置继续往下找第二个yield
    4.yield还有点类似于return 可以返回返回值
    '''
    

生成器表达式

就是生成器的简化写法
l1 = [i**2 for i in range(100)]
print(l1)

索引取值与迭代取值的差异

1.索引取值
  可以任意位置任意次数取值
  不支持无序类型的数据取值
2.迭代取值
  只能从前往后依次取值 无法后退
  支持所有类型的数据取值(有序 无序)

模块简介

1.模块的本质
  内部具有一定的功能的py文件
2.python模块的历史
  python一开始被人瞧不起 起了一个外号叫调包侠(贬义词)
  后来大家也都在用python 觉得python真香调包侠(褒义)
3.python模块的表现形式
  1.py文件
  2.含有多个py文件的文件夹
  3.已被编译为共享库或DLL的c或c++扩展
  4.使用C编写并链接到python的解释器的内置模块

模块的分类

1.自定义模块
  自己写的模块
2.内置模块
  python解释器提供的模块
3.第三方模块
  别人写的模块

导入模块的两种句式

"""
强调:
    1.一定要搞清楚谁是执行文件 谁是被导入文件
    2.以后开发项目的时候py文件名一般是纯英文 不会含有中文 甚至空格
    3.导入模块不需要填写后缀名
"""
1.import句式
  以import a 为例研究底层原理
  ''' 
  1.先产生执行文件的名称空间
  2.执行被导入的文件的代码将产生的名字放入被导入文件的名称空间中
  3.再执行文件的名称空间中产生一个模块名字
  4.再执行文件中使用该模块名点的方式使用模块名称空间中所有的名字
  '''
2.from..import句式
  以from a import name,func1为例研究底层原理
  '''
  1.先产生执行文件的名称空间
  2.执行被导入的文件的代码将产生的名字放入被导入的文件名称空间中
  3.再执行文件的名称空间中产生对应的名字绑定模块空间中对应的名字
  4.在执行文件中直接用名字就可以访问名称空间中对应的名字
  '''

导入模块的补充说明

1.import 与 from...import...两者优缺点
  import句式
  由于使用模块名称空间中的名字抖需要模块名点的方式才可以用 所以不会轻易的被执行文件中的名字替换掉 但是每次都要加点
  from...import..句式
  指名道姓的导入模块名称空间需要使用的名字 不需要模块名点 但容易跟执行文件中的名字冲突
2.重复导入模块
  解释器只会导入一次 后续重复导入语句并不会执行
3.起别名
  import hahahha as ha
  from heiheihei import hahahha as ha
4.涉及到多个模块导入
  第一种:
  import a 
  import hhh
  第二种:
  import a,hhh

循环导入问题

1.循环导入
  两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字 极容易报错
2.如何解决循环导入问题
  1.确保名字在使用前就已经准备好了
  2.我们应该尽量避免出现循环导入问题的出现

判断文件类型

所有的py文件都可以直接打印__name__对应的值
当py文件是执行文件的时候 __name__对应的值是__main__
当py文件是被导入文件的时候__name__对应的值是模块名
使用场景:
   1.模块开发阶段
   2.项目启动文件
from a import * 
*默认是将模块名称空间中所有的名字导入
__all__=['名字1','名字2']
针对*可以限制拿的名字

模块的查找顺序

1.内存
  	import aaa
    import time
    time.sleep(15)#休眠15s
    print(aaa.name)#讲文件aaa删除 仍然可以输出
    aaa.func1()  #休眠结束 开始运行 就找不到该文件了
2.内置
	import time
    print(time)
    print(time.name)
	 """
	 以后在自定义模块的时候尽量不要与内置模块名冲突
	 """
        
3.sys.path
    sys.path中即可
    import sys
    print(sys.path)  # 列表
    sys.path.append(r'D:\pythonProject03\day17\mymd')
    import ccc
    print(ccc.name)

绝对导入与相对导入

''' 强调:一定要分清谁是执行文件!
        模块导入全部以执行文件为准
'''
绝对导入
   from mymd.aaa.bbb.ccc.ddd import name 
    #可以精确到变量名
    from mymd aaa.bbb.ccc.import ddd
    #也可以精确到模块名
相对导入
    .再路径中表示当前目录
    ..在路径中表示上一层目录
 	..\..在路径中表示上上一层目录
	不在依据执行文件所在的sys.path 而是以模块自身路径为准
    from . import b
 	相对导入只能用于模块文件中 不能在执行文件中使用
'''
相对导入使用频率较低 一般用绝对导入即可 结构更加清晰
'''

大白话:多个py文件的集合>>>:文件夹
专业:内部含有__init__.py文件的文件夹(python2必须要求 python3无所谓)

包的具体使用

虽然python3对包的要求降低了 不需要__init__.py也可以识别 但是为了兼容性考虑最好还是加上__init__.py

1.如果只想用包中某几个模块 那么还是按照之前的导入方式即可
	from aaa import md1, md2
2.如果直接导入包名
	import aaa
 	导入包名其实就是导包下面的__init__.py文件,该文件内有什么名字就可以通过包名点什么名字

编程思想的转变

1.面条版阶段
	所有的代码全部堆叠在一起
2.函数版阶段
	根据功能的不同封装不同的函数
3.模块版阶段
	根据功能的不同拆分成不同的py文件
"""
第一个阶段可以看成是直接将所有的数据放在C盘
	视频 音频 文本 图片
第二个阶段可以看成是将C盘下的数据分类管理
	视频文件夹 音频文件夹 文本文件夹 图片文件夹
第三个阶段可以看成是将C盘下的数据根据功能的不同划分到更合适的位置
	系统文件夹 C盘	
	视频文件夹 D盘
	图片文件夹 E盘
ps:类似于开公司(小作坊 小公司 上市公司)
	为了资源的高效管理
"""

软件开发目录规范

1.文件及目录的名字可以变换 但是思想是不变的 分类管理
2.目录规范主要规定开发程序的过程中针对不同的文件功能需要做不同的分类
myproject项目文件夹
    1.bin文件夹	  主要存放项目启动文件  
        start.py 	启动文件可以放在bin目录下 也可以直接在项目根目录 
	 2.conf文件夹		主要存放项目配置文件
    	 settings.py  里面存放项目的默认配置 一般都是全大写
 	 3.core文件夹		主要存放项目核心文件
    	  src.py    里面存放项目核心功能
 	 4.interface文件夹	 主要存放项目接口文件
    	  goods.py 	  根据具体业务逻辑划分对应的文件
         user.py
        account.py
 	 5.db文件夹		主要存放项目相关数据
    	  userinfo.txt
       	 db_handler.py   存放数据库操作相关的代码
	 6.log文件夹		主要存放项目日志文件
         log.log
 	 7.lib文件夹		主要存放项目公共功能
    	  common.py	 
	 8.readme文件		 主要存放项目相关说明
 	 9.requirements.txt文件  主要存放项目所需模块及版本

常用内置模块之collections模块

1.具名元组:namedtuple
    from collections import namedtuple

    # 表示二维坐标系
    # point = namedtuple('点', ['x', 'y'])
    # 生成点信息
    # p1 = point(1, 2)
    # print(p1)  # 点(x=1, y=2)
    # print(p1.x)  # 1
    # print(p1.y)  # 2

    card = namedtuple('扑克牌', ['num', 'color'])
    c1 = card('A', '黑♠')
    c2 = card('A', '红♥')
    print(c1, c1.num, c1.color)
    print(c2, c2.num, c2.color)
 
2.队列
	队列与堆栈
		队列:先进先出
 		堆栈:先进后出
	队列和堆栈都是一边只能进一边只能出

常用内置模块之时间模块

import time
"""
三种时间表现形式
    1.时间戳
        秒数
    2.结构化时间
        主要是给计算机看的 人看不适应
    3.格式化时间
        主要是给人看的
"""
# print(time.time())  # 1666150097.5481427
# print(time.localtime())  # time.struct_time(tm_year=2022, tm_mon=10, tm_mday=19, tm_hour=11, tm_min=32, tm_sec=50, tm_wday=2, tm_yday=292, tm_isdst=0)
# print(time.strftime('%Y-%m-%d'))  # 2022-10-19
# print(time.strftime('%Y/%m/%d'))  # 2022/10/19
# print(time.strftime('%Y/%m/%d %H:%M:%S'))  # 2022/10/19 11:30:20
# print(time.strftime('%Y/%m/%d %X'))  # 2022/10/19 11:31:18
time.sleep(10)  # 让程序原地阻塞指定的秒数


# import datetime
# print(datetime.datetime.now())  # 2022-10-19 11:58:23.682282
# print(datetime.datetime.today())  # 2022-10-19 11:58:23.682282
# print(datetime.date.today())  # 2022-10-19
'''
datetime 年月日 时分秒
date     年月日
time     时分秒(后续会有此规律)
'''
# from datetime import date, datetime
# print(date.today())
# print(datetime.today())
# print(datetime.utcnow())
# import datetime
# c = datetime.datetime(2017, 5, 23, 12, 20)
# print('指定日期:',c)  # 指定日期: 2017-05-23 12:20:00
from datetime import datetime
# d=datetime.strptime('2017/9/30','%Y/%m/%d')
# print(d)  # 2017-09-30 00:00:00
# e=datetime.strptime('2017年9月30日星期六','%Y年%m月%d日星期六')
# print(e)
# f=datetime.strptime('2017年9月30日星期六8时42分24秒','%Y年%m月%d日星期六%H时%M分%S秒')
# print(f)
import datetime
# ctime = datetime.date.today()
# print(ctime)
# time_del = datetime.timedelta(days=3)
# print(ctime + time_del)

# ctime = datetime.datetime.today()
# print(ctime)
# time_del = datetime.timedelta(minutes=20)
# print(ctime + time_del)

常用内置模块之随机数模块

import random

# print(random.random())  # 随机产生0到1之间的小数
# print(random.randint(1, 6))  # 随机产生1到6之间的整数
# print(random.randrange(1, 100, 2))  # 随机产生指定的整数
# print(random.choice(['一等奖', '二等奖', '三等奖', '谢谢惠顾']))  # 随机抽取一个样本  '二等奖'
# print(random.choices(['一等奖', '二等奖', '三等奖', '谢谢惠顾']))  # 随机抽取一个样本   ['二等奖']
# print(random.sample(['jason', 'kevin', 'tony', 'oscar', 'jerry', 'tom'], 2))  # 随机抽指定样本数  ['tom', 'jerry']
# l1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
# random.shuffle(l1)  # 随机打乱数据集
# print(l1)


'''产生图片验证码: 每一位都可以是大写字母 小写字母 数字  4位'''
def get_code(n):
    code = ''
    for i in range(n):
        # 1.先产生随机的大写字母 小写字母 数字
        random_upper = chr(random.randint(65, 90))
        random_lower = chr(random.randint(97, 122))
        random_int = str(random.randint(0, 9))
        # 2.随机三选一
        temp = random.choice([random_upper, random_lower, random_int])
        code += temp
    return code

res = get_code(10)
print(res)
res = get_code(4)
print(res)

os模块

os模块主要与代码运行所在的操作系统打交道
import os
# 1.创建目录(文件夹)
# os.mkdir(r'd1')  # 相对路径 在执行文件所在的路径下创建目录     可以创建单级目录
# os.mkdir(r'd2\d22\d222')  # 不可以创建多级目录
# os.makedirs(r'd2\d22\d222')  # 可以创建多级目录
# os.makedirs(r'd3')  # 也可以创建单级目录
# 2.删除目录(文件夹)
# os.rmdir(r'd1')  # 可以删除单级目录
# os.rmdir(r'd2\d22\d222')  # 不可以一次性删除多级目录
# os.removedirs(r'd2\d22')  # 可以删除多级目录
# os.removedirs(r'd2\d22\d222\d2222')  # 只能删除空的多级目录
# os.rmdir(r'd3')  # 只能删空的单级目录
# 3.列举指定路径下内容名称
# print(os.listdir())
# print(os.listdir(r'D:\\'))
# 4.删除/重命名文件
# os.rename(r'a.txt', r'aaa.txt')
# os.remove(r'aaa.txt')
# 5.获取/切换当前工作目录
# print(os.getcwd())  # D:\pythonProject03\day19
# os.chdir('..')  # 切换到上一级目录
# print(os.getcwd())  # D:\pythonProject03
# os.mkdir(r'hei')
# 6.动态获取项目根路径(重要)
# print(os.path.abspath(__file__))  # 获取执行文件的绝对路径  D:/pythonProject03/day19/01 os模块.py
# print(os.path.dirname(__file__))  # 获取执行文件所在的目录路径  D:/pythonProject03/day19
# 7.判断路径是否存在(文件、目录)
# print(os.path.exists(r'01 os模块.py'))  # 判断文件路径是否存在  True
# print(os.path.exists(r'D:\pythonProject03\day19'))  # 判断目录是否存在  True
# print(os.path.isfile(r'01 os模块.py'))  # 判断路径是否是文件  True
# print(os.path.isfile(r'D:\pythonProject03\day19'))  # 判断路径是否是文件  False
# print(os.path.isdir(r'01 os模块.py'))  # False
# print(os.path.isdir(r'D:\pythonProject03\day19'))  # True
# 8.路径拼接(重要)
# s1 = r'D:\pythonProject03\day19'
# s2 = r'01 os模块.py'
# print(f'{s1}\{s2}')
"""
涉及到路径拼接一定不要自己做 因为不同的操作系统路径分隔符不一样

"""
# print(os.path.join(s1, s2))
# 9.获取文件大小(字节)
# print(os.path.getsize(r'a.txt'))

sys模块

import sys

# print(sys.path)  # 获取执行文件的sys.path
# print(sys.getrecursionlimit())  # 获取python解释器默认最大递归深度
# sys.setrecursionlimit(2000)  # 修改python解释器默认最大递归深度
# print(sys.version)  # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
# print(sys.platform)  # 平台信息 win32(了解即可)
res = sys.argv
if len(res) != 3:
    print('执行命令缺少了用户名或密码')
else:
    username = res[1]
    password = res[2]
    if username == 'jason' and password == '123':
        print('jason您好 文件正常执行')
    else:
        print('您不是jason无权执行该文件')

json模块

json模块也称为序列化模块 序列化可以打破语言限制实现不同编程语言之间数据交互

json格式数据的作用

json格式数据的形式
	字符串类型并且引号都是双引号
 
json相关操作
	针对数据
    json.dumps()
    json.loads()

 	针对文件
    json.dump()
    json.load()

标签:总结,文件,__,模块,print,import,四周,os
From: https://www.cnblogs.com/lzy199911/p/16819886.html

相关文章

  • 每周总结
    这周完成了简单的课堂测试:Result文件数据说明:Ip:106.39.41.166,(城市)Date:10/Nov/2016:00:01:02+0800,(日期)Day:10,(天数)Traffic:54,(流量)Type:video,(类型:视频video或文......
  • Oracle 存储过程学习总结
    创建/更新存储过程基础基础用法创建/修改无参存储过程CREATEORREPLACEPROCEDUREprocedure_name[IS|AS]--声明全局变量(可选)BEGIN--存储过程的执行体END;--也......
  • 计算机基础与程序设计第八周学习总结
    教材内容学习总结计算机科学概论课本第九章1,了解面向对象方法和面向过程方法的区别;2,编译器,解释器的意义和区别;3,高级语言的功能和应用。C语言与程序设计课本第七章1......
  • C语言问题定位总结
    二分搜索法gitbisect命令,可以定位问题引入的第一个commit,如下图:用法举例:1、下载模拟代码:[email protected]:bradleyboy/bisectercise.git$cdbisecterci......
  • python学习第四周总结
    异常常见类型异常处理语法结构异常补充处理异常处理实战应用生成器对象自定义生成器range()功能yield冷门用法生成器表达式模块简介模块的分......
  • 总结
    目录异常生成器对象索引取值与迭代取值的差异模块包编程思想的转变软件开发目录规范常用内置模块collections模块时间模块随机数模块os模块sys模块json模块异常1.异常处......
  • 第四周自我回顾自我回顾
    目录一、异常的捕获与处理异常的错误类型异常处理的语法结构和讲解主动抛出异常异常处理应用举例二、生成器什么是生成器生成器的两种形式1、生成器表达式2、自定义生成器......
  • 第四周总结复习
    一周总结异常处理异常常见类型AttributeError#访问的对象属性不存在ImportError#无法导入模块或者对象,主要是路径有误或名称错误SyntaxError#pytho......
  • chap4 循环结构、chap6 回顾数据类型和表达式 学习总结
     在我认为循环结构是c语言中较为重要的部分,他在使用中也能发挥很大的作用,无论是for还是while或是dowhile,都有他们各自的特点,通常他们在一样的的题目中都可以用,但是在一......
  • 第四周总结
    第四周总结目录第四周总结异常处理异常常见类型异常处理语法结构异常处理补充异常处理实战应用生成器生成器对象yield冷门用法生成器表达式自定义生成器range索引取值与迭......