猫史档案馆


【Python精讲】如何使用自定义模块(说人话就是在一个py文件中运行另一个py文件)

用户:_Rise__Rise_查看:7 回复:10 评论:7 创建时间:2020-08-27T16:44:08


模块概述

      模块,可以认为是一盒积木,通过它可以拼出某一主题的东西。这与函数不同,一个函数相当于一块积木,而一个模块可以包括很多函数,也就是很多积木。
      在Python中,一个扩展名为.py的文件就称为一个模块。

1.创建模块
      创建模块可以将模块中的相关代码编写在一个单独的文件中,并且将该文件命名为“模块名+.py”
      *创建模块时,模块名不能为Python自带的标准库名称

2.使用import语句导入模块
      创建模块后,就阔以在其他程序中使用该模块了。这可以用import语句实现,代码如下:
      import name as sss
      name为模块名称,sss是给模块起的别名,通过该别名也可以使用模块。
      【示例】编写一个模块,在模块所在文件夹下创建“模块”文件,在该文件中导入模块“模块示例代码”,并执行模块中的f函数,“模块示例代码”代码如下:

def f():
    a = input()
    print(a)

      “模块”代码如下:

import 模块示例代码
模块示例代码.f()

      运行结果:

center_image


      *在调用模块中的函数等时,需在名称前加入“模块名.”作为前缀

3.使用from……import语句导入模块
      在使用import语句导入模块时,每执行一条import语句都会创建一个新的命名空间,并且在该命名空间执行与py文件相关的所有语句。如果不想在每次导入模块时创建一个新的命名空间,而是将具体的定义导入当前命名空间中,这时可以使用form……import语句。使用form……import语句导入模块后,不需要再添加前缀。
      from……import语句代码:
      form name import member
      其中,name为模块名称,member为需要导入的函数等,可以同时导入多个模块,中间有“,”分隔,如果想导入所有模块,可以用“*”代替。
      例:

from Example import change               #导入Example模块中的change函数
from Example import change,getW,getH     #导入Example模块中的change,getH,getW函数
from Example import *                    #导入Example模块中的所有定义

       *在使用from……import语句导入时,需注意模块名是当前命名空间唯一的,否则将出现冲突,后导入的会覆盖先导入的。如需导入两个名称一样的模块,这时就需要import语句导入了。
      【错误示例】导入两个包括同名函数的模块
(1)“矩形模块”代码,用于计算矩形面积:

def mianji(w,h):
    return w*h
if __name__ == '__main__':
    print(mianji(10,20))

(2)“圆形模块”代码,用于计算圆形面积:

import math                   #导入标准库math
PI = math.pi                  #圆周率
def mianji(r):
    return round(PI*r*r,2)    #计算面积并保留两位小数
if __name__ == '__main__':
    print(mianji(10))

(3)创建一个名称为“模块”的py文件,导入圆形模块和矩形模块的全部定义,再输出,代码:

from 矩形模块 import*                        #导入矩形模块
from 圆形模块 import*                        #导入圆形模块
if __name__ =='__main__':
    print('圆的面积:',mianji(1000))         #调用计算圆的面积的函数
    print('矩形的面积:',mianji(10,100000))  #调用计算矩形的面积的函数

执行以上代码后,会出现以下结果:

center_image
      从上图可以看出,后导入的圆形模块mianji函数覆盖了先导入的矩形模块mianji函数。解决该问题的方法是,不使用from……import语句导入,改用import语句导入。修改后代码如下:

import 矩形模块 as c                            #导入矩形模块
import 圆形模块 as r                            #导入圆形模块

if __name__ =='__main__':
    print('圆的面积:',r.mianji(1000))          #调用计算圆的面积的函数
    print('矩形的面积:',c.mianji(10,100000))   #调用计算矩形的面积的函数

运行结果如下:

center_image

 


回复

上一页1 页 / 共 1下一页
86135clc86135clc

emotion_编程猫_厉害了

点赞0


评论


_Rise__Rise_

点赞0


评论


某科学的七濑胡桃某科学的七濑胡桃

板凳

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

from 举行模块 import mianji as rmianji

他不香吗

点赞0


评论


阳光的流熔怪Uyt5阳光的流熔怪Uyt5

Rise水……(飞到九霄云外了)

点赞0


评论


蒟蒻OIer1048576蒟蒻OIer1048576

而且,尽量避免名字冲突

# mj就是面积
from math import pi
def mj(a,b = None):
    if b is None:
        return round(pi*a**2,2)
    else:
        return a*b

点赞0


评论


ZCH编程小贝壳ZCH编程小贝壳

你真是牛-逼,几个月前还是新手,现在人话都不会说了·emotion_doge

点赞0


评论


白篮白篮

对python一窍不通的我....直呼内行emotion_doge

点赞0


评论


tq_xyytq_xyy

创建模块时,模块名不能为Python自带的标准库名称

不赞同,因为如果有同名模块则按搜索路径导入 (默认为当前目录优先), 这个列表是sys.path

点赞0


评论


_Rise__Rise_

点赞0


评论