python强势来袭-20-自定义模块让你为所欲为

python强势来袭-入门-3-多版本共存 前面介绍过了再PC中安装python2和python3的开发环境。 同一台PC中,如果同时安装Python2和Python3环境,会在执行python命令时出现错误,操作系统会找到默认的配置进行执行。怎么样才能让python2和python3一起工作又互相不影响呢。 但是由于工作需要,我们的个人PC上可能需要多个python版本共存,应该进行什么样的设置呢,本章内容就针对这个问题进行分析和使用... 阅读详情

今天分享的是:

1 模块的概念和意义

2 模块的定义和使用

3 再说变量的作用域

之前的课程中,我们已经了解了python程序设计开发的基础部分内容
包含了数据类型、变量、运算符、程序选择结构、循环结构、函数处理、字符串处理等等内容。
本节内容开始,我们开始学习python企业级开发基础部分的内容,会涉及到模块式整合开发、面向对象程序设计、错误的调试和测试、高级开发[文件IO处理,网络编程,多线程程序开发、正则表达式等等]内容,

1. 模块的概念和意义

我们在常规程序开发的过程中,如果只是通过python来写一些项目维护的小脚本程序,前面学过的内容已经基本够用了,但是如果涉及到企业级开发的复杂的一些需求的话,程序设计开发过程中会出现大量的代码,如果着大量的代码(如:1万行代码)写在一个python文件中,就会让这个文件的体积非常的庞大,开发过程中会造成大量的不必要的问题:如变量定义是否会覆盖其他定义的变量,添加功能处理代码会否影响其他的功能,由于大量代码集中在一个文件中导致修改维护变得非常的不容易,代码的可读性非常 差等等各种问题。

此时,为了方便我们将不同的处理功能区分开,我们将处理不同数据或者功能的函数分别分组存放在不同的python文件中,就会将上面一个比较庞大的python文件拆分成多个python文件,每个python文件中的代码内容会比较少,通过多个Python文件互相组合的方式来完成复杂的处理功能。这样拆分的不同的python文件,每个python文件就是一个单独的python模块,专业术语:module
我们定义好的Python模块,可以在需要的地方,通过import 模块名称关键字来引入这个模块,代码如下:

user.py 用户模块
--------------
def showInfo(name, age):
      print("user info:  name[" + name + "] age [" + str(age) + "]")
--------------
goods.py 商品模块
--------------
def showGoods(name, price):
      print("goods info: goodsName: [" + name + "] price [¥" + str(price)+ "]")
--------------
main.py 主模块中使用其他的模块
--------------
import user
import goods

user.showInfo("tom", 18)
goods.showGoods("alienware", 14999)

拆分模块的好处是第一、将一个比较复杂的单文件拆分成多个文件,方便代码的管理和开发维护,第二、我们开发并完善好的Python模块,在其他需要这个模块功能的地方就可以直接引入组合这个模块,不需要重复编写Python代码了,第三、不同的python模块中,就可以使用相同名称的变量了,不同模块中的变量不会互相覆盖数据或者产生冲突,降低了我们代码开发的成本

2. 模块的使用和解决的问题

拆分模块之后,我们会遇到这样的问题

2.1. 变量名称冲突

变量名称在不同的python文件/模块中,同名变量不会互相产生冲突

user.py 用户模块
--------------
# 记录当前系统中用户数量的变量count
count = 12
# 打印当前系统中用户数量的函数
def getCount():
      print("user count:" + str(count))
--------------
goods.py 商品模块
--------------
# 记录当前系统中商品数量的变量count
count = 1001
# 获取并答应当前系统中所有商品数量的函数
def getCount():
      print("goods count:" + str(count))
--------------
main.py 主模块中使用其他的模块
--------------
import user
import goods
user.getCount()  #执行结果:12
goods.getCount() # 执行结果:1001
2.2. 模块名称冲突

我们也同样考虑到了,模块名称和定义变量一样,某些情况下模块名称也有可能冲突,如:我们的项目中处理用户数据定义了一个工具模块utils.py,处理商品数据定义了一个工具模块utils.py,此时这两个模块冲突了;解决方案如下
我们会将不同的模块,python定义了包的概念,根据处理的功能或者数据的不同,存放在不同的包中,用于区分不同的模块;
包在python中,就是一个文件夹,为了区分包文件夹和普通的文件夹,在包文件夹中,必须定义一个__init__.py模块文件,这个文件内容可以为空。

# 1\. 创建users文件夹,是用来处理用户数据的包
# 2\. 在users文件夹下创建__init__.py文件,内容可以为空
# 3\. 在users文件夹下创建utils.py工具模块
--------------
"这是处理用户数据的工具模块"
x = 129.00
y = 432.24
# 获取用户当前位置的函数
def getLocation():
      # 返回用户位置数据
      return x, y
--------------
#4\. 创建goods文件夹,是用来处理用户数据的包
#5\. 在goods文件夹下创建__init__.py文件,内容可以为空
#6\. 在goods文件夹下创建utils.py工具模块
--------------
"这是处理商品数据的工具模块"
address = "河南郑州"
# 获取商品产地的函数
def getProduction():
      # 返回商品的产地
      return address
--------------
7.创建main.py程序运行的入口文件,引入users和goods两个模块
使用不同模块中的函数
--------------
import users.utils
import goods.utils
xx, yy = users.utils.getLocation()
addr = goods.utils.getProduction()
print(xx, yy)
print(addr)

包-

模块开发" target="_blank" rel=“nofollow” />

3. 模块中再说变量

变量在之前的课程中,我们已经提到了变量在Python中有局部变量和全局变量的区分,是通过是否定义在函数内部来区分的。
此时有了多模块之后,对于变量的作用域,需要进行更加细致的划分。

3.1. 模块内部

模块内部,还是按照正常的情况进行划分,按照是否定义在函数内部来区分全局变量和局部变量,在模块文件内部,变量的使用没有任何的变量
在模块内部,变量依旧是全局变量/局部变量,变量的作用域正常使用即可

"这是一个用户数据处理模块"
# 全局变量,记录系统中用户的在线人数
onlineCount = 100

def getUserinfo(name):
      # 定义了一个局部变量,这个局部变量只能在当前函数内部访问
      msg = "尊敬的用户您好,"
      if name == "":
            name = "游客"
      return msg + name;
3.2. 不同模块之间的变量访问

python中定义了模块之后,不同模块之间访问数据和函数的情况就比较常见了;模块中的变量,有些是需要让别的模块访问的,有些是不希望别的模块访问的,此时就会将变量区分为模块公开的变量、模块私有的变量两种变量了。

  • python的模块中,按照正常的命名规则命名的变量或者函数,规范为公开的变量或者函数,其他的模块都可以正常的访问

  • python的模块中,使用一个下划线开头来命名的变量或者函数,规范为私有的变量或者函数,只能在当前模块中使用

  • python的模块中,使用两个下划线开头的变量,可以别模块直接引用使用具有特殊的含义,如__name__表示当前模块名称等等;规范要求我们自己的变量名称尽量不要使用这样的名称。

"商品信息管理模块goods.py"
# 游客打折折扣,变量名称下划线开头,不希望其他模块访问
_discountVisitor = 9.5
# 会员打折折扣,变量名称下划线开头,不希望其他模块访问
_discountMember = 8.5

# 游客购买折扣计算,函数名称下划线开头,不希望其他模块访问
def _visitorBuy(goodsName, price):
    resPrice = price * _discountVisitor;
    print("尊敬的游客,您购买了" + name + ",总价格是:" + str(resPrice));

# 会员购买折扣计算,函数名称下划线开头,不希望其他模块访问
def _memberBuy(goodsName, price):
    resPrice = price * _discountMember;
    print("尊敬的游客,您购买了" + name + ",总价格是:" + str(resPrice));

# 购买商品的函数,允许其他模块访问的函数,正常命名
def buy(type, name, price):
    if type == 1:
        _visitorBuy(name, price)
    elif type == 2:
        _memberBuy(name, price);
    else:
        print("对不起,您没有权限购买商品")

注意:这里出现了公开/公有变量和私有变量/函数的概念,公开/公有变量/函数就是我们平时定义的普通的全局变量/函数;这里的私有变量/函数,是在原有的全局变量/函数的基础上,变量名称前面加了一个下划线,约定这是私有的变量/函数,不应该让其他的模块访问【记住:这里的约定,不是强制,所以其他模块如果要访问这样的私有变量,还是可以访问到的,但是规范上不应该这么做】

"用户信息处理模块users.py"
# 这里定义了一个私有的变量 _userType和_userDesc
_userType = "管理员"
_userDesc = "游客操作权限,只能访问不能修改任何信息"
def _changeDisc(_userType):
if _userType == "管理员":
_userDesc = "超级管理员操作权限"
if _userType == "会员":
_userDesc = "普通操作权限,不能修改敏感信息"
-------------------------
"程序运行的主要模块main.py"
import users
# 使用users模块中的_userType变量
print(users._userType)
users._userType = "会员"
print(users._userType)
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#  上面的代码中,我们可以在main模块中,访问引入的
# 另一个模块users模块中定义的私有变量_userType
# !这不是我们想要的,私有的不是不能让其他模块访问吗?
# !这里请注意:下划线开头的变量,规范是私有变量,不应该
# 让其他的模块访问,而不是强制,这里的规范是一种项目开发约定!
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

如果你看到了这里,觉得文章写得不错可以加个关注!如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。

最后针对Android程序员,除了以上内容,我自己整理了一套最新的python系统资料可以免费送给大家,从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。需要这些资料的朋友,可以进python学习交流群:851211580免费领取 。

希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!后续还会更新技术干货,谢谢您的支持!

用Python一分钟选出底部放量跳空上扬的强势股,你也可是巴菲特 前言 最近A股市场行情火爆,对股民们来说,选到一只强势股是梦寐以求的事情,因为只有强势股才能让自己的收益跑赢大盘,不然只能眼巴巴看着指数不断上涨,而手上的股票却不动声色,懊恼不已! 相信大家都听说了量化交易这个东西了吧!不过目前国内外介绍量化的书籍、课程之类的,大多是金融背景的人编写的,所以他们的角度和我们普通股民会有些不同。偏研究分析的模型算法可能我们看不懂、用不到,有些量化系统针对于机构操盘搭建的,也不适合小资金的普通股民。 那么,什么才是普通股民所适合的量化交易打开方式呢?本文就用一个接地气的选股场景 阅读详情

相关推荐

PyScript 强势来袭,HTML 也可以跑 Python 了

Anaconda CEO Peter Wang 在上个月刚过的 PyCon 2022 发布了 PyScript,实现了在 HTML 中支持 Python 代码。简单来说,我们现在可以在 HTML 代码中加入 Python 代码,直接在浏览器中运行,这整个过程甚至不需要安装任何环境,还可以在 PyScript 添加相应的依赖,运行各种数据分析算法和图效。 如何在 HTML 中运行 PyScript? 目前,PyScript 依托于 CSS、JavaScript 代码。和引用其他 CSS、JavaS...

TeamCode的博客 501

【Apache Doris】自定义函数之 JAVA UDF 详解

【Apache Doris】自定义函数之 JAVA UDF 详解

ith321的博客 8086

嵌入式NTC温度解算库:Steinhart-Hart定点实现与硬件解耦设计

NTC热敏电阻是嵌入式系统中最常用的模拟温度传感器,其阻值-温度关系高度非线性,需依赖Steinhart-Hart方程实现高精度转换。该方程通过三参数对数多项式建模,理论上可将误差控制在±0.1°C以内,但直接移植到MCU面临浮点开销大、定点溢出、系数精度损失等工程瓶颈。为此,归一化处理(ln(R/R₂₅))、Q24.8定点运算、查表+插值对数计算等优化技术成为资源受限场景下的关键技术路径。其核心价值在于将ADC采样与温度解算彻底解耦,适配各类HAL/裸机/RTOS环境,广泛应用于电池管理、工业PLC、Io

weixin_35756624的博客 647

Apache Doris基本要点整理

1. 基本介绍 1.1 背景 Apache Doris是一款现代高性能MPP分析存储引擎,由百度开源贡献给Apche 基金会进行孵化。它是分布式架构,支持动态扩缩容;兼容mysql协议,使用任何Mysql客户端和BI工具都可以对接Doris;很高的查询性能,单机导入100M/s,查询亚秒级返回,单机QPS在10000以上 1.2 主要特性 1.2.1 现代化MPP架构 简单的MPP架构,不依赖外部系统,自身进行存储和计算。Doris中分成2种角色:FE(Frontend)和BE(Backend),FE负责元

qq_34599449的博客 6117

02.1 知识图谱工具 Protege的下载安装与使用

Protege的下载安装与使用 本文是王昊奋老师《知识图谱》系列笔记第2.1篇。 文章目录Protege的下载安装与使用0 相关介绍0.0 Protege相关介绍0.1 Protégé的特点0.2 Protégé的用途1 Protege的下载1.1 准备工作:安装配置JAVA环境1.2 官网下载2 Protege的安装2.1 直接解压缩2.2 双击运行3 Protege的使用实例-创建类...

和而不流 7万+

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 101

[1.2.0新功能系列:三]Apache doris 1.2.0 Java UDF 函数开发及使用

我们在使用各个SQL引擎时,会有纷繁复杂的查询需求。一部分可以通过引擎自带的内置函数去解决,但内置函数不可能解决所有人的问题,所以一般SQL引擎会提供UDF功能,方便用户通过自己写逻辑来满足特定的需求,Doris也不例外。在java UDF之前,Doris提供了两种用户可以自己实现UDF的方式:远程UDF,其优缺点如下:支持通过 RPC 的方式访问用户提供的 UDF Service,以实现用户自定义函数的执行只要支持Protobuf的各类语言都能使用,有足够的安全和灵活性。

锋哥聊DORIS数仓 4688

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

Apache Doris 自定义C++ UDF之流程详解(1)

Apache Doris 自定义C++ UDF之流程详解(1)

ith321的博客 2643

Unity与IOS交互,调用IOS系统相机和相册

与IOS的交互,在步骤上要比android简单许多,不会产生因为系统版本,或者包名导致的许多问题。过程中最头疼的一个问题是IOS回调Unity,很简单的一个问题,搞了半天。

Hello Mingo 1万+

【接地系统篇】电力系统接地技术详解:从基本原理到实际应用

接地是为电流返回电源提供的一条低阻抗通道。简单来说,就是为故障电流修建一条"安全回家"的路,防止电流通过人体或其他不应带电的部件。接地系统选择原则安全性优先:TN-S系统安全性最高,适合重要场所经济性考虑:TN-C系统成本最低,适合一般工业连续性要求:IT系统供电连续性最好,适合特殊场所灵活性选择:TN-C-S系统兼顾经济与安全,应用最广。

2301_81299416的博客 2223

存储过程和函数

1.存储程序的语法         存储程序和函数是用CREATE PROCEDURE和CREATE FUNCTION语句创建的子程序。一个子程序要么是一个程序要么是一个函数。使用CALL语句来调用程序,程序只能用输出变量传回值。就像别其它函数调用一样,函数可以被从语句外调用(即通过引用函数名),函数能返回标量值。存储子程序也可以调用其它存储子程序。      在MySQL 5.1中,一个

小魏的博客 1551

激光雷达+相机标定避坑指南:手把手教你用KITTI数据完成坐标转换

本文详细介绍了激光雷达与相机标定的实战指南,利用KITTI数据集完成精准坐标转换。从数据准备、工具链搭建到标定矩阵加载与验证,再到坐标转换流水线的工程实现,提供了全面的避坑技巧和工程实践建议。特别强调了多传感器融合中的常见问题及解决方案,帮助开发者提升自动驾驶和机器人感知系统的环境感知精度。

book8的博客 834

python官方-Python官方中文文档强势来袭

原标题:Python官方中文文档强势来袭Python 官方支持的文档一直没有中文。小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,对于初学者来说,门槛会大大的降低。现在中文文档强势来袭官方中文文档地址:https://docs.python.org/zh-cn以前也是有一些第三方维护的 Python 中文文档,不过可能因为人力等限制,并做不到同步更新与维护。目前也有很多高质量的 Pyt...

weixin_37988176的博客 128

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python强势来袭-21-第三方的那些模块儿

python提供了非常强大的程序设计和编程开发的平台,但是python本身提供的功能在一定程度上并不是非常完善或者完整的契合我们的项目需要。 在python程序开发时,很多开发人员和机构组织,根据不同的应用程序进行设计开发了很多第三方的python模块,这些模块,我们如果在项目开发过程中需要的话,需要下载安装模块然后在我们的项目中进行使用。 1. 怎么样找到自己需要的模块呢? 通常情况下,pyth...

python_doris的博客 205

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python官网中文官网-Python官方中文文档强势来袭

原标题:Python官方中文文档强势来袭Python 官方支持的文档一直没有中文。小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,对于初学者来说,门槛会大大的降低。现在中文文档强势来袭官方中文文档地址:https://docs.python.org/zh-cn以前也是有一些第三方维护的 Python 中文文档,不过可能因为人力等限制,并做不到同步更新与维护。目前也有很多高质量的 Pyt...

weixin_37988176的博客 3825

python中文文档-Python官方中文文档强势来袭

原标题:Python官方中文文档强势来袭Python 官方支持的文档一直没有中文。小伙伴们已经习惯了原汁原味的英文文档,但如果有官方中文文档,对于初学者来说,门槛会大大的降低。现在中文文档强势来袭官方中文文档地址:https://docs.python.org/zh-cn以前也是有一些第三方维护的 Python 中文文档,不过可能因为人力等限制,并做不到同步更新与维护。目前也有很多高质量的 Pyt...

weixin_37988176的博客 126

Python爬虫:jsonpath强势来袭

关于JSONJSON是一个标记符序列。这套标记符包括:构造字符、字符串、数字和三个字面值。构造字符JSON包括六个构造字符,分别是:左方括号、右方括号、左大括号、右大括号、冒号与逗号。J...

tongtongjing1765的博客 1993

python强势来袭-入门-1-开发环境搭建

python下载 首先找到网址: 官方网站:http://www.python.org ftp官方下载地址:http://www.python.org/ftp/python 在官方ftp下载地址中,可以选择下载任意一个需要的版本 安装过程 双击安装包,出现如下的开始安装界面,选择自定义安装选项 选项设置,默认全部勾选即可 高级配置选项,如图勾选即可 安装过程中… ...

python_doris的博客 185

强势来袭,Python爬虫之正则表达式!

点击上方“AI派”,选择“设为星标”最新分享,第一时间送达!作者:Tango,目前就职在一家对日开发的的IT服务公司。不是科班出身的我,出于对编程的热爱,自学了软件开发。...

Oner.wv的专栏 382

python目前版本强势英雄_S11版本强势英雄图解,了解之后上王者手到擒来!

S11赛季已经开始,各位小伙伴也已经向着王者发起冲击,但是苦于不知道哪些是当前版本强势英雄造成上分难的情况,下面小编就简单的介绍一下当前版本各个位置的强势英雄,希望能帮到各位小伙伴。1.首先是打野,当前版本打野情况不容乐观,打野快的后期乏力(例如韩信、李白),打野慢的前期又带不起节奏(例如宫本、赵云)。T0梯队 综合来看当前版本裴擒虎和玄策独具一档位居T0 ,裴擒虎在高端局和职业赛场上的表现...

weixin_33508272的博客 377

python强势来袭-34-服务端快捷开发

之前已经介绍了TCP编程和UDP编程实现网络数据的通信和共享 我们可以看到客户端程序的编写相对容易,主需要连接服务端然后跟服务端进行数据交互就OK了。但是服务端的程序编写较为复杂,如果考虑到数据的并发处理等各种问题,就更加复杂难以操作了。 python提供了一个socketserver模块,可以用于更加快捷的构建我们需要的服务端环境 本次分享: socketserver模块简介 常规模式服务...

python_doris的博客 140

python强势来袭-28-异常处理

本节内容如下: 什么是异常,对异常的解释和描述,口语描述和专业术语的联系 代码中出现错误的处理手段 异常处理方式 什么样的情况算异常 捕获异常【try-except-else-finally】 抛出异常【raise】 常见异常 1. 什么是异常 我们程序在开发过程中,总会遇到各种各样的一些问题,有些是由于拼写、配置、选项等等各种引起的程序错误,有些是由于程序功能处理逻辑不完善引起的漏...

python_doris的博客 293

python强势来袭-17-字符串那些事儿

字符串是我们在程序中使用非常多的一个对象,对于字符串的处理在各种编程语言中也是非常重要的一部分。 1. python中的字符串定义 python中的字符串,可以使用单引号、双引号或者三个单引号包含的字符,都是字符串。 s1 = '我是一个字符串' s2 = "我也是一个字符串" s3 = ''' 我还是一个字符串 我是能换行写内容的字符串 ''' s4 = "多个字符串"*3 # 可以定义将字...

python_doris的博客 256
上一篇: “Python太慢了、Golang糟透了":那些关于软件工程的”宗教“辩论
下一篇: python强势来袭-21-第三方的那些模块儿
python-花猫
博客等级 码龄7年 105粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值