MSCBSC 移动通信论坛
搜索
登录注册
网络优化工程师招聘专栏 4G/LTE通信工程师最新职位列表 通信实习生/应届生招聘职位

  • 阅读:3031
  • 回复:0
PYTHON学习笔记【模块和包】
细阿哥
中级会员
鎵嬫満鍙风爜宸查獙璇


 发短消息    关注Ta 

积分 500
帖子 100
威望 4542 个
礼品券 15 个
专家指数 0
注册 2009-2-25
专业方向  通信
回答问题数 0
回答被采纳数 0
回答采纳率 0%
 
发表于 2019-11-05 09:58:51  只看楼主 

1     python中的模块

python中有一个概念叫做模块,这个和C语言中的头文件以及JAVA中的JAVA包很类似,比如在PYTHON中要调用sqrt函数,必须 import关键字引入math这个模块。

通俗点,模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就必须导入这个模块。

import

python中用关键字import来引入某个模块,比如要引入模块math,就可以文件开始的地方使用import math来引入。

       import module1,module2...

在调用math模块中的函数时,必须 这样引用

       模块名.函数名

 

import random
print(random.randint(0,5))

 

from ...import...

Pythonfrom语句让你从模块中导入一个指定的部分到当前命名空间中:

       from modulename import name[,name2...]

例如,要导入模块fibfibonacci函数:

       from fib import Fibonacci

注意:不会把整 fib模块导入到当前的命名空间中,它中会将fib里的fibonacci单个引入。

from random import randint
print(randint(0,9))# 直接写方法名

 

from...import*

把一个模块的所有内容全都导入到当前的命名空间,只需要如下声明:

       from modname import *

注意:这提供了一个简单的方法来导入一个模块中的所有项目,然而这种声明不该被过多使用,因为不同模块可能存在一样的方法名字,导致后面导入的模块的方法覆盖了前面模块的同名方法。

as

给导入的模块重新命名

import random as rd
print(rd.randint(0,5))

 

查看包的代码:

>>> import random

>>> random.__file__

'D:\Program Files\Python\Python37\lib\random.py'

 

定义自己的模块

python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。

例,调用自定义模块

1.      编写一个module1.py的模块

# 写一个工具方法,判断字符 是否为null,当字符串为nonenull,还有''还为null,还有'  '也为null
def isnull( str ):
if not str:
return True
    elif
str.strip() == '':
return True
    else
:
return False

def
test1():
print("……中的test1方法……")

2.      调用自己编写的模块(main.py

import module1
a =
'a'
print(module1.isnull(a))
module1.test1()


from module1 import isnull,test1
a =
'a'
print(isnull(a))
test1()

 

模块的测试和模块中的__all__

可以根据__name__变量的结果 能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行代码

# 写一个工具方法,判断字符 是否为null,当字符串为nonenull,还有''还为null,还有'  '也为null
__all__=['isnull'# 表示被引用的方法,在from module1 import *有效,

def isnull( str ):
if not str:
return True
    elif
str.strip() == '':
return True
    else
:
return False

def
test1():
print("……中的test1方法……")

# print(isnull(" ")) # 这行虽然是测试代码,但只要被当作模块被导入就会自动执行
#print(__name__)
if __name__=='__main__'#python解释器主动执行该模块代码,测试时执行,当被当作模块调用时,以下代码不执行
print(isnull(" "))

 

2     python中的包

引入包,包就是一个目录,把多个py文件放到同一个文件夹下。

执行顺序:当前目录-python系统目录

Ø  使用” import文件夹.模块的方式导入,python3可以导入,python2不行

Ø  使用”from 文件夹 import 模块的方式导入,python3可以导入,python2不行

Ø  在包的文件夹上创建__init__.py文件,虽然 文件内容没有,但是python2可以用了。在python2中,有一个目录,并且目录下有一个__init__.py文件,才认为是包。

__init__.py文件在python3中没有错,以后均在包的目录上新建一个__init__.py文件。

Ø  __init__.py文件中写入

       from . import 模块1

       from . import 模块2

那么可以使用“import 文件夹导入,也可以使用” from 文件夹 import 模块的方式导入

 

#encoding=UTF-8
'''
import my_package.module1   # python3,
引入包中的模块,方法1
a = 'a'
print(my_package.module1.isnull(a))


from my_package import module1  # python3,
引入包中的模块,方法1
a = 'a'
print(module1.isnull(a))
'''

import my_package  # 引入包中的模块,方法3 在包目录下的__init__.py文件 写代码from . import 模块1
a = 'a'
print(my_package.module1.isnull(a))

 

模块/包的发布

1.      发布的模块/包的目录结构:

[root@localhost test_pub]# tree

.

├── my_package    #要发布的包名

│   ├── __init__.py  

│   ├── module1.py  #待发布的模块1

│   ├── module2.py

│   └── __pycache__

│       ├── __init__.cpython-37.pyc  #.pyc是自解码文件

│       ├── module1.cpython-37.pyc

│       └── module2.cpython-37.pyc

└── setup.py    # 与包同级

2.      编辑setup.py文件

py_modules需要指明所需包含的py文件

from distutils.core import setup
#setup(name='压缩包的名字',version='1.0',description='描述',author='作者',py_modules=['suba.aa','suba.bb'])
setup(name='my_pub',version='3.7',description='没有',author='me',py_modules=['my_package.module1','my_package.module2'])

 

3.      构建模块

python setup.py build

                                              image.png

4.      生成发布压缩包

python setup.py sdist

image.png

模块/包的安装、使用

1.      安装的方式

找到模块的压缩包-》解决-》进入文件夹-》执行命令”python setup.py install”

注意:如果在install的时候,执行目录安装,可以使用”python setup.py install –prefix 安装路径

image.png

image.png

 

2.      模块的引入

在程序中,使用 “from import ”即可完成对安装的模块的使用

       from 模块名 import 模块名或*

image.png

1.      导入模块的路径设置

Ø  查看模块搜索路径

image.png

Ø  添加搜索路径

image.png

Ø  重新导入模块

from imp import *

reload(模块名)

 

 

2.      查看已经安装的模块help()

 

image.png

3.      模块内定义的所有名称dir()函数

dir()函数能够返回由对象所定义的名称列表,例如:这一对象是一模块,则dir()函数可以找到模块内定义的所有名称(含函数、类、变量),以一个字符串列表的形式返回

dir()是有参数的,如果参数是模块名称(当然参数也可以是类,函数等),那么将返回这一指定模块的名称列表。如果没有参数,那么函数将返回当前文件(即当前模块的名称列表):比如你在test2.py下指定dir(test),那么返回test模块的名称列表,如果是dir(),那么返回test2.py名称列表

image.png

 

4.      循环导入,两个模块互相导入

 

image.png

image.png

image.png


扫码关注5G通信官方公众号,免费领取以下5G精品资料
  • 1、回复“LTBPS”免费领取《《中国联通5G终端白皮书》
  • 2、回复“ZGDX”免费领取《中国电信5G NTN技术白皮书
  • 3、回复“TXSB”免费领取《通信设备安装工程施工工艺图解
  • 4、回复“YDSL”免费领取《中国移动算力并网白皮书
  • 5、回复“5GX3”免费领取《 R16 23501-g60 5G的系统架构1
  • 6、回复“iot6”免费领取《【8月30号登载】物联网创新技术与产业应用蓝皮书——物联网感知技术及系统应用
  • 7、回复“6G31”免费领取《基于云网融合的6G关键技术白皮书
  • 8、回复“IM6G”免费领取《6G典型场景和关键能力白皮书
  • 对本帖内容的看法? 我要点评

     
    [充值威望,立即自动到帐] [VIP贵宾权限+威望套餐] 另有大量优惠赠送活动,请光临充值中心
    充值拥有大量的威望和最高的下载权限,下载站内资料无忧

    快速回复主题    
    标题
    内容
     上传资料请点左侧【添加附件】

    当前时区 GMT+8, 现在时间是 2024-04-24 06:21:42
    渝ICP备11001752号  Copyright @ 2006-2016 mscbsc.com  本站统一服务邮箱:mscbsc@163.com

    Processed in 0.245298 second(s), 13 queries , Gzip enabled
    TOP
    清除 Cookies - 联系我们 - 移动通信网 - 移动通信论坛 - 通信招聘网 - Archiver