La introducción de módulos day20, paquetes de software y especificaciones directorios

1. Módulo de Importación

1.1 Hay dos utiliza un archivo de Python

  1. A medida que el programa se está ejecutando
  2. Módulo se introdujo como una

1.2 ¿Cuál es la diferencia entre los dos que?

Para presentar foo como ejemplo:

1, cuando se ejecuta el foo.py, el valor name__ __ '__main__'
2, cuando foo.py se introduce como un módulo, __ valor name__ 'foo'

print('模块foo==>')

# __all__=['x',] # 控制*代表的名字有哪些
x=1
def get():
    print(x)

def change():
    global x
    x=0

def say():
    print('我还活在内存中呢。。。。')
if __name__ == '__main__':
    print('文件被执行')
    get()
    change()
else:
    # 被当做模块导入时做的事情
    print('文件被导入')
    pass

Para módulo de importación se introduce

El modo de importación 1.3 importación ventajas y desventajas

módulos de importación IMPOT hay que añadir en el uso del prefijo "módulo."
ventaja : ciertamente no conflicto con el nombre del espacio de nombres en la corriente
inconveniente : aparece prefijo en problemas

1.4 de ... ... impot declaración

El proceso de importación de tres

  1. La producción de un espacio de nombres del módulo
  2. El nombre de la operación foo.py generada durante el funcionamiento se tiran al módulo de espacio de nombres
  3. En el espacio de nombres actual para obtener un nombre, un nombre y una dirección de memoria del módulo de espacio de nombres
from foo import x # x=模块foo中值的内存地址
from foo import get
from foo import change

print(x)
print(get)
print(change)
x=333333333
print(x)
get()
change()
get()

print(x)
from foo import x # x=新地址
print(x)

Porque de los módulos importados para

1.5 de IMPOT ... ... pros y los contras

a partir ... ... impot módulos de importación cuando se usa sin prefijar

Ventaja : el código más ágil

Desventajas : fácil de confundirse con el espacio de nombres actual

from foo import x # x=模块foo中值1的内存地址
x=1111

Notas de importación ...

  • Línea de los múltiples nombres de importación (no se recomienda)
  • Los nombres de todos los tiempos módulo de importación se pueden utilizar: *
  • módulo de alias puede introducirse desde
from foo import x,get,change
from foo import get as g
name='egon'
from foo import *
print(name)

from socket import *
'''
了解知识: * 导入时是访问对应模块的__all__的值,是一个列表
__all__=['x',] # 控制*代表的名字有哪些
'''

1.6 Módulo de prioridad de ruta de búsqueda

Sea o importación de ... importación Al importar el módulo están relacionados con el encontrar el problema

Prioridad :
una memoria (módulo incorporado)
2, un disco duro: en el orden del archivo se almacenan secuencialmente en sys.path de búsqueda módulo de importación

# 值为一个列表,存放了一系列的对文件夹
# 其中第一个文件夹是当前执行文件所在的文件夹
>>> import sys
>>> sys.path
['', 'E:\\Python\\Python38\\python38.zip', 'E:\\Python\\Python38\\DLLs', 'E:\\Python\\Python38\\lib', 'E:\\Python\\Python38', 'E:\\Python\\Python38\\lib\\site-packages']
>>

sys.path El primer camino es generalmente ruta vacía, en nombre del archivo ejecutable se encuentra, por lo que al ser importado módulos y ejecutar archivos en el mismo directorio debe estar funcionando correctamente importado, pero para el módulo y ejecutar archivos se importan en el caso en caminos diferentes, con el fin de garantizar el módulo correspondiente al archivo de origen todavía se pueden encontrar, es necesario añadir la ruta del archivo fuente a foo.py sys.path ubicado, se asume el path donde foo.py / pythoner / proyectos /

import sys
sys.path.append(r'/pythoner/projects/') #临时添加
#找foo.py就把foo.py的文件夹添加到环境变量中,获取文件的绝对路径,再添加
import foo #无论foo.py在何处,我们都可以导入它了

Aprender: Vista sys.modules se ha cargado en los módulos de memoria

import sys
import foo # foo=模块的内存地址
del foo

def func():
    import foo # foo=模块的内存地址

func()

# print('foo' in sys.modules)
print(sys.modules)

1.7 escribir un módulo de especificación

#!/usr/bin/env python #通常只在类lunix环境有效,作用是可以使用脚本名来执行,而无需直接调用解释器。

"The module is used to..." #模块的文档描述

import sys #导入模块

x=1 #定义全局变量,如果非必须,则最好使用局部变量,这样可以提高代码的易维护性,并且可以节省内存提高性能

class Foo: #定义类,并写好类的注释
    'Class Foo is used to...'
    pass

def test(): #定义函数,并写好函数的注释
    'Function test is used to…'
    pass

if __name__ == '__main__': #主程序
    test() #在被当做脚本执行时,执行此处的代码

1.8 función suplementaria de conocimiento

Tipo del aviso dando a entender Tipo (más bajo Python 3.5)

#Python是一种强类型的动态语言
#可以:+类型,规定传入值的类型,本质上:后是添加的提示信息,可以根据需要填写
#->int 规定返回值的类型
#虽然规定了传入类型,但实际上还是可以传入其他类型的,传入值的规范
def register(name:str,age:int,hobbbies:tuple)->int:
 print(name)
 print(age)
 print(hobbbies)
 return 111

register(1,'aaa',[1,])
#可以添加默认值,默认值在类型后面添加
def register(name:str='egon',age:int=18,hobbbies:tuple=(1,2))->int:
 print(name)
 print(age)
 print(hobbbies)
 return 111
register()
res=register('egon',18,('play','music'))

1585325998024

2. paquete

2.1 ¿Qué es el paquete

El paquete es una carpeta que contiene el archivo de __init__.py

¿Por qué tener 2.2 paquete

La naturaleza del envase es una forma de un bloque de módulo, el paquete va a ser introducido como un módulo

2.3 Cómo utilizar el paquete

import mmm
print(mmm.x)
print(mmm.y)
mmm.say()

from mmm import x

La etapa de introducir tres paquetes

1, lo que resulta en un espacio de nombres
2 _ el paquete se ejecuta bajo el init archivo _.py, el nombre generado durante la operación arroja al espacio de nombres 1
3, mmm obtener un nombre en el espacio de nombres de archivos actualmente ejecutando, mmm 1 a espacios de nombres

Hizo hincapié en :
1. Declaraciones relacionadas con la importación sobre el paquete se divide también en la importación y de importación ... ... dos tipos al importar debe seguir un principio:

Cualquier pequeña en el momento de la importación, el punto izquierdo debe ser un paquete, de otro modo ilegal.
2, los paquetes A y B en el paquete del mismo nombre no módulo de conflicto, como Aa y Ba partir de dos espacios de nombres
3, cuando el archivo de importación importación, generar nombre de espacio de nombres de archivo, espacio de nombres paquetes de importación generada el nombre proviene del mismo archivo, ese paquete _ bajo el init _.py, importe el paquete está en la naturaleza del archivo de importación

Absoluta y relativa introdujeron la introducción de 2,4

# 绝对导入,以包的文件夹作为起始来进行导入
#pool下的__init__.py
from pool import versions


# 相对导入:仅限于包内使用,不能跨出包(包内模块之间的的导入,推荐使用相对导入)
# .:表示当前文件夹
# ..:表示上一层文件夹
# 局限性:.不能超出foo之外

#pool下的__init__.py
from . import versions
'''
强调:
1、相对导入不能跨出包,所以相对导入仅限于包内模块之间相互导入
2、绝对导入是没有任何限制的,所以绝对导入是一种通用的导入方式
'''

#针对包内部模块之间的相互导入推荐使用相对导入,需要特别强调:
'''
1、相对导入只能在包内部使用,用相对导入不同目录下的模块是非法的

2、无论是import还是from-import,但凡是在导入时带点的,点的左边必须是包,否则语法错误
'''

包 de importación *

'''
在使用包时同样支持from pool.futures import * ,
毫无疑问*代表的是futures下__init__.py中所有的名字,通用是用变量__all__来控制*代表的意思
'''
#futures下的__init__.py
__all__=['process','thread']

'''
包内部的目录结构通常是包的开发者为了方便自己管理和维护代码而创建的,
这种目录结构对包的使用者往往是无用的,此时通过操作__init__.py可以“隐藏”包内部的目录结构,
降低使用难度,比如想要让使用者直接使用
'''
import pool

pool.check()
pool.ProcessPoolExecutor(3)
pool.ThreadPoolExecutor(3)

# 需要操作pool下的__init__.py
from .versions import check
from .futures.process import ProcessPoolExecutor
from .futures.thread import ThreadPoolExecutor

3. Software especificación de directorio de desarrollo

Con el fin de mejorar la legibilidad y mantenibilidad del programa, debemos ser estructura de directorios de software bien diseñado, la codificación estilo tan importante como esto y normas. especificación del directorio hay software fuerte y rápido estándar, siempre y cuando se puede leer claramente, asumiendo su software llamado foo, la estructura de directorios recomendados es el siguiente

estructura de directorios de software 3.1

Foo/ 
|-- core/ # 存放业务逻辑相关代码
|   |-- core.py
|
|-- api/ # 存放接口文件,接口主要用于为业务逻辑提供数据操作。
|   |-- api.py 
|
|-- db/ # 放操作数据库相关文件,主要用于与数据库交互
|   |-- db_handle.py
|
|-- lib/ # 存放程序中常用的自定义模块
|   |-- common.py
|
|-- conf/ # 存放配置文件
|   |-- settings.py
|
|-- run.py # 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹				sys.path的第一个路径,这样就省去了处理环境变量的步骤
|-- setup.py # 安装、部署、打包的脚本。
|-- requirements.txt # 存放软件依赖的外部Python包列表
|-- README # 项目说明文件

Descripción del software 3.2 README

Sobre el README, y esto debe ser cada proyecto debe tener un archivo, el propósito es ser capaz de información breve de la descripción del proyecto, lo que permite a los lectores a entender rápidamente el proyecto. Cabe señalar que los siguientes asuntos:

'''
1、软件定位,软件的基本功能;

2、运行代码的方法: 安装环境、启动命令等;

3、简要的使用说明;

4、代码目录结构说明,更详细点可以说明软件的基本原理;

5、常见问题说明。
'''

Supongo que te gusta

Origin www.cnblogs.com/Henry121/p/12592683.html
Recomendado
Clasificación