首页 > 编程语言 > 详细

python基础进阶-模块详解

时间:2019-03-06 23:08:36      阅读:193      评论:0      收藏:0      [点我收藏+]

在我们实际开发的过程中,每个项目都会或多或少的调用一些相同的代码。如果每次都把代码复制粘贴进项目的话,非常的繁琐,且容易出错,python模块很好的为我们解决了这个问题。python的模块是以 .py 结尾的,而我们的python程序也是以 .py 结尾的,所以,python所有的代码都可以看作为模块。

 

模块的好处是,可以调用自定义的模块,也可以调用别人成熟的模块。在程序需要的时候,使用 import 导入就可以直接使用了,非常的方便快捷。我们先来看看模块的定义。

# 实例1,我们用实例来解释模块的定义,新建m1.py

#! /usr/bin/env python3

# -*- coding:utf-8 -*-

 

"这里是模块的说明"

__author__="PyShadow"

 

b1=‘hello python‘

b2=666

b3=True

 

def func(x,y):

    return ‘x * y = {0} ‘.format(x*y)

def func1():

    return ‘666‘

# 第一行表示该程序可以在Unix/Linux/Mac直接运行

# 第二行表示采用utf-8编码

# 接下来的字符串表示模块的说明

# __author__代表的是编写该模块的作者

# 接下来的就是模块的代码,定义了b1,b2,b3三个变量,且定义了func函数

 

# 调用模块

import Modulename

#调用模块的函数 

Modulename.functionname

# 调用模块的变量

Modulename.varname

 

# 实例2,我们新建一个test.py文件,以此来调用 m1.py (实例1的代码)

import m1

print(m1.b1)

print(m1.b2)

print(m1.b3)

print(m1.func(2,3))

>>> 

    hello python

    666

    True

    x * y = 6 

# 导入模块m1,调用m1的变量以及函数

你会问了,如果出现一个和自定义模块名称相同的第三方模块,我们该怎么办呢?这里我们引入一个“包”Package。包就是模块的集合,包可以容许有相同名称的模块。

 技术分享图片

# 如上图所示,包 w1 和 test.py 在同一目录下,w2 和 m1.py 、__init__.py 在同一目录下,w2 目录中有 m1.py 和 __init__.py。如果包里面没有__init__.py文件,则认为是普通目录。我们把各个文件的代码贴上来。__init__.py可以是空文件。

# w1/m1.py 的代码

 

#! /usr/bin/env python3

# -*- coding:utf-8 -*-

‘注释‘

__author__="Shadow"

 

def func1():

    return ‘hello python‘

def func2(x,y):

    return ‘x * y = {0}‘.format(x*y)

# w1/w2/m1.py 的代码

#! /usr/bin/env python3

# -*- coding:utf-8 -*-

 

"注释"

__author__="Shadow"

 

def func():

    return "hello world"

# test.py 的代码

import w1.m1

print(w1.m1.func1())

print(w1.m1.func2(2,3))

print("*"*15)

 

import w1.w2.m1

print(w1.w2.m1.func())

>>> 

    hello python

    x * y = 6

    ***************

    hello world

# 虽然两个自定义模块的文件名是一样的,但是,加入到包里,就不会出现重复的情况了。

# 包的调用方法为,包.文件名;调用模块的函数,包.文件名.函数名;调用模块的变量,包.文件名.变量。

当我们调用的模块代码比较多,但我们只用其中的某一个函数的时候,使用上述的代码会把模块中的变量、函数、类等都引入进来,造成了不必要的资源浪费。这里说一下部分引入的概念,部分引入就是只引入我们需要的某些函数或者类,语法如下:

from module import xxx

# 实例1

from w1.m1 import func2

print(func2(2,3))

>>> 6

# 这里引入了 w1.m1 模块中的函数 func2 。使用这种部分引入后,我们在调用函数的时候,可以直接使用函数名称。

我们也可以给模块定义一个别名(也就是简称),方便调用。

import module as xxx

# 实例2

import w1.w2.m1 as m

print(m.func())

>>> hello world

# 我们把 w1.w2.m1 别名定义为 m,在调用的时候,直接使用 m 就可以调用。

接着,我们来说说模块的定义域。定义模块的时候,有些变量或者函数我们想给调用者用,有些不想给用。我们可以给变量或者函数前面加“_”或者“__”来告诉使用者,这些变量和模块是不能调用的。"__author__" 是输入特殊变量。

虽然我们说这些不能调用,但是python没有机制来限制被调用。也就是大家约定俗成的,但是并没有什么x用。我们来看看实例:

# 实例1,定义和 test.py 同级别的模块 m2.py

#! /usr/bin/env python3

# -*- coding:utf-8 -*-

"注释"

__author__="Shadow"

 

_a=‘func1‘

_b=‘func2‘

c=‘hello world‘

def _func1():

    return _a

def _func2():

    return _b

def func(n):

    if n==1:

        return _func1()

    else:

        return _func2()

# 以"_"开头的都是非公开的,其他的为公开的。

# 实例2,修改test.py文件

import m2

print(m2.c)

print(m2.func(1))

>>> 

    hello world

    func1

# 我们调用的是公开函数和公开变量

技术分享图片

关注公众号,了解更多!

python基础进阶-模块详解

原文:https://www.cnblogs.com/pyshadow/p/10400741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!