模块基本使用


你看这个车帅吗////??
昨日内容回顾

* 生成器对象

  ```python
  # 可以看成就是自定义迭代器对象 目的也是为了节省空间 优化代码
  定义生成器需要编写函数并且在函数体代码中使用yield关键字
  def index():
    yield 123
    yield 321
  res = index()  # 转变成生成器
  res.__next__()  # 123
  res.__next__()  # 321
  
  """
  yield功能
  	1.可以返回后面的值 与return一致
  	2.可以将代码停在yield位置 下次基于该位置往后执行
  	3.还可以接收外界传值
  		res.send()  # 传值+迭代
  """
  ```

* 自定义range方法

  ```python
  # 写代码一定不要想的太多 先写一个大致的主题 之后再慢慢扩展
  '''先考虑range方法的一种参数情况 其余两种后面再考虑'''
  def my_range(start, stop=None, step=1):
      if not stop:
        stop = start
        start = 0
      while start < stop:
        yield start
        start += step
  ```

* 生成器表达式及练习

  ```python
  res = (i for i in 'jason' if i != 'j')  # generator
  """
  尽可能减少程序的空间消耗 课下可以看看类似于的视频(了解)
  	小霸王游戏
  """
  # 把握一个核心>>>:迭代取值的时候才会执行生成器内部代码
  ```

* 模块简介

  ```python
  """
  python的发展历程以及模块的重要性
  	调包侠
  """
  模块的出现能够让我们真正进入编程的世界!!!
  ```

* 导入模块的两种句式

  ```python
  """一定要搞明白导入模块到底发送了什么事"""
  import句式
  	import 模块名  # 模块名不能加文件后缀
    """
    如果重复导入 那么只会执行一次
    1.运行当前执行文件产生一个名称空间
    2.运行被导入模块文件产生一个模块空间
    3.在当前执行文件中产生一个模块的名字指向模块名称空间
    4.后续可以通过该名字使用到模块名称空间中所有的名字
    """
    使用import句式不会产生名字冲突的问题
    
  from...import...句式
  	"""
  	如果重复导入 那么只会执行一次
  	1.运行当前执行文件产生一个名称空间
    2.运行被导入模块文件产生一个模块空间
    3.在当前执行文件中产生import后面写的诸多名字
    4.后续直接使用这些名字就可以调用模块名称空间中对应的名字
  	"""
    使用该句式可能会造成名字冲突的问题
  ```

* 导入模块的补充知识

  ```python
  # 1.起别名
  	import time as tm
    from md import name as nm
  # 2.并列导入
  	import md1,md2,md3
    '''并列的几个模块最好具有相似的部分 否则建议分开导入(清晰)'''
  	from md import name,money,num
  # 3.通用导入
  	from md import *  # 将md中所有的名字全部加载到当前文件
    """
    *默认表示所有 但是也可以在模块文件中通过__all__来限制可以使用的名字
    """
  模块这个知识点后期使用很解答 但是前期学习的时候由于需要讲解所有可能发送的情况给你的感觉会有点多有点乱但是它很像字符编码(理论多实践少)
  ```


今日内容详细

循环导入  
两个文件彼此导入彼此   
循环导入会很容易报错   在以后的尽量避免循环导入的问题  如果确实需要循环导入   双方的名字记得提前定义好  
#(一错再错的办法)
  方式1:将导入模块的句式写在定义名字的下面
  方式2:将导入模块的句式写在函数体代码内
    
__name__ 与"__main__"分别是什么?
1、__name__是当前模块的一个属性,属性名称的前后各有两个_修饰,表明它是一个内置属性(也称内置变量)

2、"__main__"则是一个字符串对象,"xx",一对双引号是创建字符串对象的快捷方式
判断文件类型
py文件分为两种类型
执行文件
导入文件
有一个内置变量__name__
当这个变量__name__所在的文件是被执行的文件结果是__main__
当__name__所在的文件是被导入的时候结果是模块名
可以借助__name__来区分到底是被导入还是被测试
由于上述代码在很多启动脚本中经常使用 所以有简写方式
直接输入main之后按tab键即可
if __name__ == '__main__':
  	当前文件是执行文件的时候才会执行的子代码块
img
模块有三种查找顺序
1.先从内存空间中去查找
2;再从内置模块中查找
3.最后去sys.path查找(类似于我们前面学习的环境变量)
如果上述三个地方都找不到 那么他会直接报错!!!
默认情况下,当前工程自定义包->文件->系统路径,顺序加载。

自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。
# 方式2:利用from...import...句式指名道姓的查找
# from aaa import mddd  # 从文件夹aaa中导入mddd模块
# print(mddd.name)
# from aaa.bbb.ccc import mm  # 通过点的方式进入下一层目录
# print(mm.name)
模块的绝对导入和相对导入
1.再导入模块的时候一切查找模块的句式都是以执行文件为准
无论导入的句式是在执行文件还是被导入文件中都以执行文件为准
相对导入:、、
	相当导入打破了必须参照执行文件的所在路径的要求 只需要考虑当前模块所在的路径然后使用特殊符号.去查找其他模块即可
  from . import a
  相对导入只能在被导入文件中使用 不能在执行文件中使用
"""
预备知识
	.表示当前路径
	..表示上一层路径
	../..表示上上一层路径
"""
'''以后如果想一劳永逸 那么就只使用绝对导入即可'''
绝对导入、、、
绝对导入:按照sys.path顺序搜索,先主目录(sys.path中第一项''),然后PYTHONPATH环境变量、标准库路径、pth指定路径等。
永远按照执行文件所在的路径一层层往下查找(无脑查找即可)
绝对导入是首选,因为它们非常明确和直接。仅仅通过查看语句就可以很容易地确定导入资源的位置。此外,即使导入语句的当前位置发生更改,绝对导入仍然有效。
'然而,有时,绝对导入会变得相当冗长,这取决于目录结构的复杂性。想象一下有这样的语句:from package1.subpackage2.subpackage3.subpackage4.module5 import function6 那太荒谬了,对吧?幸运的是,在这种情况下,相对导入是一个很好的选择!
相对导入
'相对导入指定资源相对于当前位置导入,即导入语句所在的位置。相对导入有两种类型:隐式和显式。隐式相对导入在Python 3中已经被弃用,所以我不会在这里涉及它们
'从专业角度去解释  包就是内部含有  __init__.py文件
从实际角度来讲  包就是多个模块的结合体 内部有多个模块文件  
在python中提供了创建报的选择
本质就是文件夹里面有一个__init__.py文件
导入包
'再导入包的时候  索要名字其实实在跟包来要的      如果想直接通过包来调用包里的模块  需要提前 在 __init__.py导入方可使用'
也可以直接点  使用绝对导入。
包里面的__init__可以看成是你的管家 
你可以吩咐它帮你做事 也可以直接架空它自己动手
编程思想的演变
1小白阶段懵懂无知就是在一个地方不停的敲
2.函数阶段 我们学会了一些特定功能 将一些代码封装到函数里供后续代码反复使用调用
3.模块阶段 
不是简单的将功能封装到函数中而是将相似的代码功能拆分到不同的py文件中便于后续的管理
'为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。软件的目录规范并无硬性标准,只要清晰可读即可,假设你的软件名为foo,推荐目录结构如下'
Foo/
|-- core/
|   |-- core.py
|
|-- api/
|   |-- api.py
|
|-- db/
|   |-- db_handle.py
|
|-- lib/
|   |-- common.py
|
|-- conf/
|   |-- settings.py
|
|-- run.py
|-- setup.py
|-- requirements.txt
|-- README
摘自 csdn
1.bin文件夹
	存放程序的启动文件		start.py
2.conf文件夹
	存放程序的配置文件   settings.py
3.core文件夹
	存放程序的核心业务   src.py
  	就是最为重要的代码 能够实现具体需求
4.lib文件夹
	存放程序公共的功能   common.py
5.db文件夹
	存放程序的数据				userinfo.txt
6.log文件夹
	存放程序的日志记录		log.log
7.readme文本文件
	存放程序的说明、广告等额外的信息
8.requirements.txt文本文件
	存放程序需要使用的第三方模块及对应的版本
  
文件夹命名   大致英语翻译
bin   二进制 文件 接收器     .bin文件夹  是存放程序的启动文件
conf  配置文件 游戏配置
core  核心的,最重要的;基础的,必修的
lib    系统会使用到的函数库   理解为i公用
db   数据库   存放程序的数据	
log    日志 记录 原木 自然对数
readme   读我档案 自述文件 自述 说明文件   理解为说明程序说明
requirements      要求 需求  理解为可以存放需要使用的第三方文件

posted @   文质彬彬赵其辉  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示