您的位置:首页 > 编程语言 > Python开发

python-6.模块

2018-04-01 21:26 106 查看
封装:

容器:数据的封装

函数:语句的封装

类:方法和属性的封装

模块:模块就是程序

导入模块:import

模块py文件和调用py文件要在一个文件夹中

>>> import TemperatureConversion  #
>>> TemperatureConversion.c2f(32)
>>> TemperatureConversion.f2c(99)
>>> from TemperatureConversion import c2f,f2c  #
>>> c2f(32)
>>> f2c(99)
>>> import TemperatureConversion as tc  #推荐
>>> tc.c2f(32)
>>> tc.f2c(99)
>>> from TemperatureConversion import *   #不推荐,函数名会产生混乱,使命名空间的优势荡然无存
>>> c2f(32)
>>> f2c(99)


模块的标准模板

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'


第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;

第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;

第6行使用_author_变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;

以上就是Python模块的标准文件模板,当然也可以全部删掉不写,但是,按标准办事肯定没错。

后面开始就是真正的代码部分。

if _name_ == ‘_main_’

TemperaturnConversion.py

def c2f(cel):
fah=cel*1.8+32
return fah
def f2c(fah):
cel=(fah-32)/1.8
return cel
def text():
print('测试,0摄氏度=%.2f华氏度'% c2f(0))
print('测试,0华氏度=%.2f摄氏度'% f2c(0))

text()


calc.py

import TemperaturnConversion as tc
print('32摄氏度=%.2f华氏度'% tc.c2f(32))
print('99华氏度=%.2f摄氏度'% tc.f2c(99))


运行calc.py

=================== RESTART: C:\Users\yue\Desktop\calc.py ===================
测试,0摄氏度=32.00华氏度#不需要打印出测试内容
测试,0华氏度=-17.78摄氏度#不需要打印出测试内容
32摄氏度=89.60华氏度
99华氏度=37.22摄氏度
>>> __name__
'__main__'
>>> tc.__name__
'TemperaturnConversion'
>>>


修改TemperaturnConversion.py

def c2f(cel):
fah=cel*1.8+32
return fah
def f2c(fah):
cel=(fah-32)/1.8
return cel
def text():
print('测试,0摄氏度=%.2f华氏度'% c2f(0))
print('测试,0华氏度=%.2f摄氏度'% f2c(0))

if __name__=='__main__':
text()


运行TemperaturnConversion.py

=========== RESTART: C:/Users/yue/Desktop/TemperaturnConversion.py ===========
测试,0摄氏度=32.00华氏度
测试,0华氏度=-17.78摄氏度
>>>


运行calc.py

=================== RESTART: C:\Users\yue\Desktop\calc.py ===================
32摄氏度=89.60华氏度
99华氏度=37.22摄氏度


搜索路径

默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。

模块与主程序放在同一个文件夹中,或着不在同一文件夹中,添加路径

>>> import sys
>>> sys.path
['', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\idlelib', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
>>> import TemperaturnConversion   #产生错误
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
import TemperaturnConversion
ModuleNotFoundError: No module named 'TemperaturnConversion'
>>> sys.path.append('C:\\Users\\yue\\Desktop') #这种方法是在运行时修改,运行结束后失效。
>>> sys.path
['', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\idlelib', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages', 'C:\\Users\\yue\\Desktop']
>>> import TemperaturnConversion   #模块导入成功
>>>


包package

1.创建一个文件夹,文件夹的名字就是包的名字,用于存放相关模块;

2.在文件夹中创建一个
__init__.py
的模块文件,内容可以为空(表示这个文件夹为包);

3.将相关模块放入文件中。

包和主程序在同一个文件夹中,导入包中的模块(包名为M1):

import M1.TemperatureConversion as tc


标准库中自带的模块

>>> import timeit
>>> timeit.__doc__   #__doc__属性:打印出文档。。。省略
>>> print(timeit.__doc__)   #按照格式打印。。。省略
>>> dir(timeit)    #打印出属性和方法名,也可以用于打印对象的属性和方法
['Timer', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_globals', 'default_number', 'default_repeat', 'default_timer', 'dummy_src_name', 'gc', 'itertools', 'main', 'reindent', 'repeat', 'sys', 'template', 'time', 'timeit']
>>> timeit.__all__   #__all__属性包含的内容是作者希望外部可以调用的函数或属性或类
['Timer', 'timeit', 'repeat', 'default_timer']
>>> from timeit import *  #导入__all__中包含的所有
>>> Timer  #可以调用
<class 'timeit.Timer'>
>>> gc   #不可以调用
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
gc
NameError: name 'gc' is not defined
>>>
>>> import timeit
>>> timeit.__file__  #源代码所在的位置
'C:\\Users\\yue\\AppData\\Local\\Programs\\Python\\Python36\\lib\\timeit.py'
>>> help(timeit) #比__doc__属性更加详细一些


作用域

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_前缀来实现的。

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;

类似
__xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的
__author__
__name__
就是特殊变量,hello模块定义的文档注释也可以用特殊变量
__doc__
访问,我们自己的变量一般不要用这种变量名;

类似
_xxx
__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用,比如
_abc
__abc
等;

之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: