首页 > 编程语言 >Python-8-Python模块

Python-8-Python模块

时间:2023-08-01 15:34:28浏览次数:42  
标签:__ p1 Python py 模块 libs import

8-1 Pycharm 安装 

http://www.jetbrains.com/pycharm/ 选 Download 下载,下载 Community 社区版本,此时就已经在下载了。

安装过程中勾选"64-bit launcher","Add launcher dir to PATH",".py".

首次启动,不安装插件,直接启动。需要添加python解释器,设置字体。


8-2 介绍Python项目组织结构

包(文件夹)下面是模块(文件),文件里面是业务逻辑。

在工程名test上右键,New,Python Package 创建一个包,包名假设为lib,当创建一个包后在包下面会自动生成一个 __init__.py 文件,这个文件就声明了其所在目录名是一个包(没有这个文件的,父目录只是一个文件夹)。若在工程test目录上,手动右键,New,Python File 创建一个名为 __init__.py 文件的话,此时工程目录test文件夹也变成了一个包。

还可以在一个包里面创建很多个子包,在子包里面可以创建很多个模块,在lib上右键,New,PythonFile,创建第一个模块,假设指名为p1.py,再创建一个指定名为p2.py.


8-3 import 导入模块

1. 在同一个包中

在 p1.py 中定义三个变量
a = 1
b = 2
c = 3

在 p1.py 中引用这三个变量,import p1 报错,Pycharm的问题,在libs目录上右键,Mark Directory as,Source Root 就可以了。右键,Run就可以正常被打印了。
import p1
print(p1.a, p1.b, p1.c) #通过<模块名>.<变量名>进行引用

Python允许给模块取个别名,下面也是可以的:
import p1 as t
print(t.a, t.b, t.c)

2. 不在同一个包(目录)中

在工程test目录上右键创建一个 main.py 文件,与 libs/p1.py 不在同一个包中,也即从外面的包中去引用子包中的模块

import libs.p1
print(libs.p1.a, libs.p1.b, libs.p1.c)
#也可以取个别名
import libs.p1 as t
print(t.a, t.b, t.c)

注:要运行哪个文件,就在哪个文件的编辑界面右键 Run <文件名>,比如 Run p2.py、Run main.py


8-4 from import 用法

from import 可以避免使用'.'的方式访问其它模块的变量,它导入的不是模块名,而是具体的变量。

1. 在同一个包下的 p2.py 中执行:

from p1 import a, b, c #从p1模块中导入abc
print(a, b, c)

2. 不在同一个包下的 mian.py 中执行:

from libs.p1 import a, b, c #需要将p1所在的包名给带上
print(a, b, c)
#也可以
from libs.p1 import * #表示将p1模块内的所有内容都导入进来
print(a, b, c)

3. 在原模块中可以指定哪些变量是可被导入的

在 p1.py 中,使用 __all__ 指明只有 a 这个变量是可以被导入的。

__all__ = ['a']
a=1
b=2
c=3

总结:使用 from import 会比 import 更加方便,不用导入模块,直接导入变量、函数、类。


8-5 __init__.py 特点

__init__.py 特点:
1. 声明一个文件夹为一个包
2. import包。实际是 import 这个包下面的 __init__.py 这个模块。
3. 该模块名为一个包名。__init__.py 的模块名是包的名字。
4. 自定义选择哪些模块可以被导入。


#main.py 中:
import libs #这不是导入模块,而是导入一个包(libs是一个文件夹)########
#或
from libs import p1

#libs/__init__.py 中:
print('this is libs.__init__.py');
print(__name__) #查看此模块的名字,打印'libs'

当在 main.py 文件中右键 Run main.py 执行时,'this is libs.__init__.py'被打印了。当我们 import 一个包时,它 import 的是包下面的 __init__.py 这个模块。

__init__.py 可以指定哪些模块是可以被导入的:

#libs/__init__.py 中:
__all__ = ['p1'] #指明此包下只有模块p1是可以被导入的。若想让p2也是可以被导入的,可以 __all__ = ['p1', 'p2']

#main.py中
from libs import *
print(p1.a) #成功
print(p2.a) #报错,不可被导入


8-6 __name__ 的应用

print(__name__) #打印当前模块的模块名

#p1.py中:
def add(x, y)
    sum = x + y
    print(sum)
    return sum
add(3, 4) #右键运行当前文件可立即测试

#main.py中:
from libs.p1 import add
add(5, 5)

此时在 main.py 中右键,Run main.py 发现 p1.py 中的 add(3, 4) 也执行了,若不行让其执行的话,可以:

#p1.py中d调用add函数位置改为
if __name__ == '__main__' #表示只有从当前模块去执行的话才会执行里面的内容 
    add(3, 4)

表示只有运行 p1.py 时才会还行 add(3, 4),若是从其它模块导入执行的话,不会再执行 add(3, 4) 了。此时再在 main.py 中执行就只返回10了。

再举一个例子:

#p2.py中
if __name__ == '__main__'
    print('Hello pycharm')
print('Hello world')

#main.py中
from libs import p2

在p2.py中右键执行,两个都会打印,在main.py中右键执行,只会打印'Hello world'。

 

标签:__,p1,Python,py,模块,libs,import
From: https://www.cnblogs.com/hellokitty2/p/17596653.html

相关文章

  • Python 程序的运行原理
    1.简单的例子先从一个简单的例子说起,包含了两个文件foo.py和demo.py[foo.py]defadd(a,b):returna+b[demo.py]importfooa=[1,'python']a='astring'deffunc():a=1b=257print(a+b)prin......
  • Python 函数 类 语法糖
    Python语法糖\,换行连接Pythons=''s+='a'+'b'+'c'n=1+2+3#6while,for循环外的else如果while循环正常结束(没有break退出)就会执行else。Pythonnum=[1,2,3,4]mark=0whilemark<len(num):......
  • 在python中,title()可以用在列表中吗?
    1、python根据一个随机url链接获取该链接中的title?2、在python中,title()可以用在列表中吗?3、Python绘图如何显示中文标题4、在python中set_title的意思python根据一个随机url链接获取该链接中的title?1、这种方法为从urlparse模块中通过urlparse方法提取url通过hostnam......
  • Python-6-Python面向对象
    6-1面向过程与面向对象1.面向过程面向过程,核心在过程二字,面向过程设计思维,就好比精心设计一条流水线,考虑周全,相应时候处理相应问题。优点:将复杂问题流程化,进而简单化。缺点:扩展性差。若更改需求,可能整个代码都需要重写,牵一发而动全身。若解决不需要经常迭代更新的程序时,面向过......
  • 关于安装python包执行setup.py文件报错类似提示line 155 warnings.warn(f'Cannot copy
    首先可以确定世python语法问题,一般来说python3.6以后字符串使用f是没有问题的,后来发现问题所在,原来我安装好python以后,没有将python命令软连接到python3,导致python命令其实一直是使用的python2,所以才会有这样的问题。所以,当python3安装好以后,一定要重新指向软连接,还有pip3,也要指向......
  • (Python编程)基本的内嵌技术
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。23.3.BasicEmbeddingTechniques23.3.基本的内嵌技术Asyoucanprobablytellfromtheprecedingoverview,thereismuchfl......
  • Boost.Python构建与测试HOWTO
    Boost.Python构建与测试HOWTOboost文档翻译(http://boost.everydo.com/)截止到2008.1.14:boost文档翻译计划共有成员10名:xuwaters、金庆、yinyuanchao、felurkinda、simonyang、fatalerror99、hzjboost、alai04、farproc、jasson.wang。目前已完成:an......
  • 用Boost.Python构建混合系统
    BuildingHybridSystemswithBoost.Python用Boost.Python构建混合系统Author:DavidAbrahamsContact:Organization:BoostConsultingDate:2003-03-19Author:RalfW.Grosse-KunstleveCopyright:CopyrightDavidAbrahamsandRalfW.Grosse-Kunstleve2003.Allrightsreserve......
  • DC电源模块输出电压的调节范围
    BOSHIDADC电源模块输出电压的调节范围DC电源模块是一种可以将交流电转换为直流电的设备,可以广泛应用于电子、通信、工业自动化等领域。在实际使用中,输出电压的调节范围非常重要,因为它决定了该模块能够适应的电器设备的种类和使用范围。下面将详细介绍DC电源模块输出电压的调节范......
  • (Python编程)目录工具
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。   4.3.DirectoryTools 4.3.目录工具Oneofthemorecommontasksintheshellutilitiesdomainisapplyinganoperationtoasetoffilesin......