第十章 自定义模块

news/2024/11/19 5:29:51/文章来源:https://www.cnblogs.com/xianyuq/p/18348178

10.1 导入模块

1.什么是python模块?

​ Python模块(Module),是一个Python文件,以.py结尾 模块可以定义函数,类和变量,模块里也能包含可执行的代码

2.模块的作用:

​ python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能

3.模块的导入方式:

# 模块在使用前需要先导入 导入的语法如下:
[from 模块名] import [模块|类|变量|函数|*] [as 别名]# 常用的组合形式如:import 模块名from 模块名 import 类 、变量、方法等from 模块名 import *import 模块名 as 别名from 模块名 import 功能名 as 别名
<==========================================>
# mian.py文件
# import 导入模块
import mymodule
import mymodule
"""
注意点:模块导入时,导入一次,终身受益,并不会重复导入
"""
# 1.导入的基本使用
# (1) 模块.变量
print(mymodule.cat)# (2) 模块.函数
mymodule.jump()# (3) 模块.类
print(mymodule.Classroom().name)# 2.导入任意模块路径下的任意模块
"""
默认导入当脚本文件同级目录下的模块等..
系统执行流程:首先看一下sys.path里面有没有想要导入的这个模块路径
如果有,默认导入,如果没有,需要手动追加
"""
import sys
print(sys.path)
sys.path.append(r"D:\tmp")# 3.from..import..基本使用
"""
from..从哪里import..引入具体的某个成员"""
"""# (1) 导入单个成员
from mymodule import dog
print(dog)# (2) 导入多个成员
from mymodule import jump,lookdoor
jump()
lookdoor()# (3) 导入所有成员*带有所有
from mymodule import *
print(dog)
print(cat)# (4) 设置*导入的范围
from mymodule import *
print(dog) # error
print(cat)# (5) 设置引入成员的别名 as
from mymodule import cat as c ,lookdoor as ld
print(c)
ld()# 4.__name__的使用
"""
返回模块名字的魔术属性__name__
如果当前文件是直接运行的,返回"__main__字符串"
如果当前文件是间接导入的,返回当前文件名(模块名)
"""
res = "__mian__"
print(res)
print(type(res))<===========================================================># mymodule.py文件
# 可以手动指定*的引入范围
__all__ = ["cat"]cat = '甜甜'
dog = '旺财'def jump():print("小猫能上树")def lookdoor():print("小狗能看门")class Classroom():name = "python32"print("我是mymodule模块")
print(__name__)"""
把需要引入的代码写在if判断的上面
把需要做简单测试的代码,不需要引入的代码写在if判断的下面,防止导入
"""
if __name__ == "__mian__":jump()lookdoor()

10.2 导入包

1.什么是python包?

​ 包就是一个文件夹,在该文件夹下包含了一个__int__.py文件,该文件夹可用于包含多个模块文件

文件目录结构:
image

# __int__.py文件print("初始化文件被执行...")
__all__ =["ceshi3"]
ceshi1 = "ceshi1"
ceshi2 = "ceshi2"
ceshi3 = "ceshi3"from package1 import my_module<====================================================># my_module.py文件def myjoin():print("这是myjoin方法")def mygetsize():print("这是mygetsize方法")<====================================================># main.py文件# import导入包
# 当引入包时,会自动指定包中__init__.py的初始化文件,对包进行初始化,对包进行初始化
# 1.import引入包的语法
import package1
# 导入包的属性
print(package1.ceshi1)# 导入包下的某个模块
# 方法一:
import package1.my_module
package1.my_module.myjoin()# 方法二: as 起别名
import package1.my_module as pm
pm.myjoin()# 方法三: 把要引入的模块放到初始化文件(__int__.py)当中进行引入,可以简化操作
import package1
package1.my_module.mygetsize()# 2.from ..import 引入包中具体成员的语法
# 引入包中的属性
from package1 import ceshi2
print(ceshi2)# 引入包中的模块
from package1 import  my_module
my_module.myjoin()# 引入包中模块下的成员
from package1.my_module import mygetsize
mygetsize()# 可以指定*号的范围用 __all__
from package1 import  *
# print(ceshi2) # error
print(ceshi3)# 可以用as起别名
from package1 import ceshi2 as c2 ,ceshi1 as c1
print(c1)
print(c2)

2.单入口模式
文件目录结构:
image

# pkg1_m1.py文件
ceshi103 = "ceshi103"
ceshi104 = "ceshi104"<================================================># pkg1_m2.py文件
ceshi100 = "ceshi100"
ceshi101 = "ceshi101""""
.代表当前路径 
..代表上一级路径相对路径不能被解释器直接引入,路径找不到
分模块中的文件不能直接执行,必须通过导入到主入口文件,
间接执行才能找到对应的路径含有相对路径的分模块不能直接执行,得通过主入口文件间接执行
"""
from . import  pkg1_m1
print(pkg1_m1.ceshi103)from . pkg1_m1 import ceshi104
print(ceshi104)# 找上一级中的一个模块
from .. import pkg_module1
print(pkg_module1.ceshi201)# 找上一级中的一个模块里的一个成员
from .. pkg_module1 import  ceshi202
print(ceshi202)# 找上一级包中的具体某个模块
from .. pkg2 import pkg2_m2
print(pkg2_m2.ceshi300)# 找上一级包中的具体某个模块里的具体的某个成员
from .. pkg2.pkg2_m2 import ceshi301
print(ceshi301)<=========================================================># pkg2_m2.py文件
ceshi300 = "ceshi300"
ceshi301 = "ceshi301"<=========================================================># pkg_module1.py文件
ceshi201 = "ceshi201"
ceshi202 = "ceshi202"<====================================================># main.py文件
# 单入口模式
# 使用相对路径进行导入
import package2.pkg1.pkg1_m2 as ppp2
print(ppp2.ceshi100)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/779547.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷达气象相关词汇(一 扫描模式)

参考自https://www.radartutorial.eu/15.weather/wr20.en.html https://en.wikipedia.org/wiki/Plan_position_indicator PPI(平面位置显示) A plan position indicator (PPI) is a type of radar display that represents the radar antenna in the center of the display, wi…

searchLights 动画

LOGO扫光效果.logo { width: 200px; height: 70px; display: flex; line-height: 70px; position: relative; overflow: hidden } .logo img { width: 100%; height: 70px } \3c p>.logo:before { } \3c br> @-webkit-keyframes searchLights { } \3c br> @-o-keyfram…

JavaWeb后端开发2024-08-08

Maven Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。Maven作用 依赖管理统一的项目结构项目构建仓库安装Maven<mirror> <id>alimaven</id> <name>aliyun maven</name> <u…

Golang语言之gRPC程序设计示例

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.RPC协议介绍1.什么是RPC2.什么是GRPC3.安装gRPC环境3.1 使用gRPC的前提3.2 安装protoc3.3 安装go plugin二.Protocol Buffer的使用指南1.使用Protocol Buffer的基本流程概述2.编写产品服务等proto文件…

迅雷赚钱宝1代刷OpenWRT单网口接在主路由下,内网访问正常,外网无法访问的解决办法。

1. 问题缘由OpenWRT单网口NAS(迅雷赚钱宝1代),接在主路由下面提供NAS服务,配置有基于eth0的DHCPv6Client来获取IPv6公网IP,以实现通过IPv6公网,提供对外的NAS服务。发现在局域网访问DDNS-go的管理界面9876端口正常访问,DDNS-go已允许外网访问,但通过手机数据流量模拟外…

c#农历开源库

https://6tail.cn/calendar/api.html非常牛逼 Unity将当前时间转为天干地支using System; using Lunar; using UnityEngine;public class GanZhiTimeConverter : MonoBehaviour {private void Start(){var solar = Solar.FromDate(DateTime.Now);Debug.Log(solar.Lunar.YearInG…

关于算法竞赛,青岛农业大学ACM实验室简介

大家好,我是青岛农业大学ACM实验室的杨兴睿,一名帅气的acmer~( ̄▽ ̄~)(~ ̄▽ ̄)~,尽管你在官网或者其他地方看过各种各样天花乱坠的宣传,我可以很明确的告诉你那是不真实的,今天用这篇博客给大家介绍一下最真实的ACM实验室。 我们先从算法竞赛开始讲起吧,算法竞赛也是…

18. 内置函数

1. 概念 内置函数是python解释器自带的函数,不需要导入模块就能使用,69个官网介绍https://docs.python.org/3/library/functions.html#staticmethod 2. 数据类型转换  8个(1)整数类型转换 int# 将内容为整数的字符串转换为整型 a = 666 print(int(a)) # 666(2)浮点数…

全网最适合入门的面向对象编程教程:33 Python 的内置数据类型-对象 Object 和类型 Type 的关系

对象是某个类型的实例,是内存中的实体,有类型和属性;在Python中,类型本身也是对象,所有的类型(类)都是type类型的实例。全网最适合入门的面向对象编程教程:33 Python 的内置数据类型-对象 Object 和类型 Type 的关系摘要: 对象是某个类型的实例,是内存中的实体,有类…

画廊 (2023 年 2 月至 2023 年 10 月)

Gallery (I)上图于 2023 年 4 月 5 日摄于保定。上图于 2023 年 4 月 22 日摄于北京平谷。上图于 2023 年 5 月 1 日摄于贵阳。上图于 2023 年 5 月 3 日摄于石家庄正定。上图于 2023 年 5 月 3 日摄于石家庄正定。上图于 2023 年 9 月 16 日摄于张家口下花园。上图于 2023 年 …

benchmarkaql测试MariaDB

下载benchmarksql (1)首先从github 直接下载源码 (2)修改src/client/jTPCC.java文件 vi src/client/jTPCC.java在123和124行增加如下内容:else if (iDB.equals("mariadb")) dbType = DB_UNKNOWN;(3)修改src/client/jTPCCConnection.java文件 vi src/c…