扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
python开发中,每一个.py文件都可以看作是一个模块,模块内部的函数或者方法可以被其他模块调用,至于函数或者方法是具体如何实现的,调用者不需要关心。
创新互联建站是一家专注于成都网站制作、做网站、外贸营销网站建设与策划设计,雄县网站建设哪家好?创新互联建站做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:雄县等地区。雄县做网站价格咨询:18982081108
假如项目中既含有UI也有逻辑代码还有功能实现,如果全写在一个py文件,可能会有几万甚至十几万行代码,显得代码很臃肿,为了方便代码阅读和维护,我们可以将项目拆分为多个模块,不同的模块实现不同的功能,这样分工合作开发效率也高,而且就算出现bug也方便定位。
python中有一些内置模块我们直接调用,比如:sys、time、json等,具体使用方法我们在调用模块中详细讲解;
安装第三方开源模块,可以直接cmd打开控制台或者打开pycharm终端运行 pip install <模块名> 即可,前提是anacoanda已经安装正确,例如:学习爬虫的时候需要安装request
1 | pipinstallrequest |
除了前面两种模块,我们也可以自己写模块来供自己调用,具体实现什么功能有自己决定,在后面的模块调用中会有详细讲解,值得注意的是:模块名字不能和内置模块名字一样,会造成冲突;
使用 import关键字 导入模块,并放置在代码最开始位置;同一个模块不管执行了多少次 import <模块名>,实际上只会被导入一次。
为了讲解关于模块的调用方法,假如我们有一个计算加减乘除的模块文件calculator.py,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解忧 @Blog(个人博客地址): shuopython.com @WeChat Official Account(微信公众号):猿说python @Github:www.github.com @File:calculator.py @Time:2019/10/11 21:25
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! """
# 定义一个全局变量 name="calculator"
# 加法 defadd(x,y): returnx+y
# 减法 defsub(x,y): returnx-y
# 乘法 defmultiplication(x,y): returnx*y
# 除法 defdivision(x,y): returnx/y
# 使用内置函数eval计算表达式的结果,如果表达式有误,直接抛异常 defget_result(input_str): try: returneval(input_str) exceptExceptionase: print("表达式输入异常!") returnNone |
如果已经忘记python 异常处理的小伙伴请参考: python 异常处理详细讲解
新建一个py文件,用于调用模板文件 calculator.py 中的函数,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 导入模块 importcalculator
# 调用calculator模块中的add函数 : 模块名.函数名 或者 模块名.变量名 result=calculator.add(2,5) print(result)
# 调用calculator模块中的sub函数 : 模块名.函数名 或者 模块名.变量名 result=calculator.sub(2,5) print(result)
# 调用calculator模块中的multiplication函数 : 模块名.函数名 或者 模块名.变量名 result=calculator.multiplication(2,5) print(result)
# 调用calculator模块中的add函数 : 模块名.函数名 或者 模块名.变量名 result=calculator.division(2,5) print(result)
# 调用calculator模块中的get_result函数 : 模块名.函数名 或者 模块名.变量名 result=calculator.get_result("3+2*8-40") print(result)
# 调用calculator模块中的name变量 : 模块名.函数名 或者 模块名.变量名 print(calculator.name) |
输出结果:
1 2 3 4 5 6 | 7 -3 10 0.4 -21 calculator |
注意:调用模块中的函数时需要指明函数或者变量来自哪个模板:<模块名>.函数名 <模块名>.变量名
做一个简单理解,从哪个模块导入哪些函数或者变量,外部导入模块后调用时只能调用导入的函数或者变量,模块中没有导入的变量或者函数不能调用,示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ''' 从模块calculator中导入add,sub两个函数, 意味着调用calculator模块时,只能调用add,sub两个函数, calculator 模块中的其他变量或者函数无法调用 '''
fromcalculatorimportadd,sub
# 在代码顶部已经声明add函数从calculator导入,可以直接使用,不需要带上模板名 result=add(2,5) print(result)
# 在代码顶部已经声明sub函数从calculator导入,可以直接使用,不需要带上模板名 result=sub(2,5) print(result)
# 错误写法:该模块并没有导入name变量 # result = multiplication(2,5)
# 错误写法:该模块并没有导入name变量 # result = division(2,5)
# 错误写法:该模块并没有导入name变量 # result = calculator.get_result("3+2*8-40")
# 错误写法:该模块并没有导入name变量 # print(calculator.name) |
这种写法表示直接导入模块中的所有内容,意味着模块中的函数或者变量都可以使用,该写法实际上和第二种导入方法类似,示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 导入calculator 模块中所有函数和变量 fromcalculatorimport*
# 在代码顶部已经声明导入calculator模块所有内容,可以直接使用,不需要带上模板名 result=add(2,5) print(result)
# 在代码顶部已经声明导入calculator模块所有内容,可以直接使用,不需要带上模板名 result=sub(2,5) print(result)
# 在代码顶部已经声明导入calculator模块所有内容,可以直接使用,不需要带上模板名 result=multiplication(2,5) print(result)
# 在代码顶部已经声明导入calculator模块所有内容,可以直接使用,不需要带上模板名 result=division(2,5) print(result)
# 在代码顶部已经声明导入calculator模块所有内容,可以直接使用,不需要带上模板名 result=get_result("3+2*8-40") print(result)
# 在代码顶部已经声明导入calculator模块所有内容,可以直接使用,不需要带上模板名 print(name) |
输出:
1 2 3 4 5 6 | 7 -3 10 0.4 -21 calculator |
使用该方法导入模块时有一个缺陷:如果同时导入多个模块文件,如果模块中的函数或者变量重名,编译器也不知道具体是用哪一个模块重名的函数或者变量,会造成意想不到的bug,往往这种bug最难查找!
利用上面的calculator模块,再加上前面的python基础知识,其实我们已经可以写一个简单的计算器了,唯独没有界面而已,至于界面后面会有pyqt5的教程,暂时不做过多讲解。计算器代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 导入内置模块time,计算耗时,默认单位秒 importtime # 导入calculator 模块 importcalculator
whileTrue: # 获取表达式 input_str=input("请输入表达式:") ifinput_str=='q':# 输入 q 退出程序 break time_start=time.clock() print(calculator.get_result(input_str)) time_end=time.clock() # 将 秒 转为 毫秒 print("计算耗时:{}毫秒".format((time_end-time_start)*1000))
print("退出计算,程序结束!") |
测试结果:
1.注意模块的几种导入方式,python开发中推荐使用写法一的方式导入:import <模块名>;
2.注意内置函数和内置模块的区别:内置函数是任何模块都可以直接调用,内置模块需要import模块之后才能调用模块里面的函数;
3.不同的模块中可以存在相同的变量名或者函数名,但是不能与内置函数名或者内置模块名字重复,避免造成冲突;
1.python内置函数input/eval函数
2.字典推导式
3.列表推导式
4.python异常处理
转载请注明:猿说Python » python模块
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流