Python语法进阶学习--模块和包

在学习python进阶知识中的面向对象之前,还要了解一下当中几个概念:包、模块、类和函数。

一.模块和包

模块和包:用来组织Python代码的。

  • 包 => 含有 __init__.py文件的文件夹
  • 模块 => py文件
  • 类 => class 【面向对象学习】
  • 函数(方法)=> def
    以上均不能以数字开头,也不能和python内置的一切重名

1.1包是具有特殊文件的文件夹

当我们使用一个包时,这个包目录下的__init__.py文件中的代码会自动执行。
包的 init 文件中,也可以设置 all 内置变量,限定 from 包名 import * 时默认导入的模块。
平时沟通时,包和模块的概念往往不区分
包和模块都存在内置的第三方的区别,第三方的就是玩家自己写的、非Python官方的

第三方包需要额外安装
安装命令:
pip install 包名或模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install 包名或模块名==版本号
pip install 包名或模块名

卸载命令:pip uninstall 包名或模块名

注意:

  1. 安装第三方的包和模块是在 python 解释器安装目录的 Lib/site-packages 下面
  2. python虚拟环境和默认环境 需要各自安装各自的三方包!
    安装到指定的py虚拟环境下 /虚拟环境路径/python -m pip install 包名或模块名
    默认安装到默认python下:pip install 包名或模块名

1.2 模块的搜索路径

一切以被运行的python文件所在的路径为准,是工作路径,同时也是相对路径的起点

import sys
print(sys.path)
"""
sys.path可以说明:
运行py代码时,Python解释器会自动搜索要使用的模块
会自动向以下两个路径进行搜索:
1. 当前工作路径
2. Python虚拟环境路径还可以手动添加导包环境路径:
import sys
sys.path.append('要导包的位置')注意:自定义的一切变量、函数、类、模块、包,都不要和python内置的一切重名!
"""

二.模块和包的使用

在我们写Python代码的时候,常常需要导入一些模块和包,下面是导入模块和包的几种方式。
在这里插入图片描述
假设有一个包(包的名字:my_module),包里面会有一个__init__.py文件,在里面再创建自己的模块py文件(名字:my_module),文件里面有自己写的func_1函数。

方式一:import 模块名

示例:
import my_module
print(my_module.func_1(1,2))
print(my_module.arg_a)

方式二:from 模块 import 函数

示例:
from my_module import func_1,arg_a
print(func_1(2,3))
print(arg_a)

方式三:用 as关键字 起别名

示例1:
import os as winos
ret = winos.listdir()
print(ret)

示例2:
from os import listdir as win_listdir
ret = win_listdir()
print(ret)

方式四:(不推荐)from 模块名 import *

原因如下:
1- 不方便阅读
2- 如果有多个导入,会导致重名的问题
3- 配合__all__使用,会有使用限制

三.__name__ 属性

只有运行入口的py文件(模块)的__name____main__,其他被引用的文件(模块)的__name__是不带扩展名的文件名

下边的a.py和b.py两个文件,在同一目录中!
a.py - 运行该文件

print("a模块的name属性值",__name__)if __name__ == '__main__':print("对数据库中数据删除的操作")

b.py

print(__name__)if __name__ == '__main__':# 如果被其他py文件引用,这里将不会执行# 因为被引用时,b.py的__name__是 b,而不是__main__# 只有b.py作为主文件运行时,b的__name__才是__main__print('bbbb')print(__name__)
__name__属性总结
1- 代码中一般都会写下面的判断语句,也就是if __name__ == '__main__':
2- 该判断,是用来限定某些代码只在执行该模块代码的时候才执行。一般放的是测试代码,或者是整个程序的入口函数

四.__all__属性

如果一个py文件(模块)中有 __all__变量(list类型),当其他py文件(模块)使用from 模块名 import *引用它时,只能导入这个列表中指定的内容

a.py

__all__ = ['foo', 'my_int'] my_int = 666def foo():return my_intdef bar():return 777

b.py - 运行该文件

# from a import *
#
# print(my_int)
# print(foo())
# print(bar())from a import my_int,foo,bar
print(my_int)
print(foo())
print(bar())
__all__属性总结
1- __all__是一个列表,用来控制其他导入的时候,使用权限。需要配合import *
2- 如果在import中明确要导入的内容,那么是不受__all__属性影响

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

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

相关文章

Unity3D时间类Time和DateTime的用法

系列文章目录 Unity知识点 文章目录 系列文章目录前言一、Time和DataTime的区别1-1、命名空间不同 二、Time和DataTime的使用2-1、Time类2-2、代码解释如下:2-3、DataTime类2-4、代码解释如下: 三、实际应用3-1、Time类测试性能代码如下3-2、运行结果如…

小H靶场笔记:DC-7

DC-7 January 8, 2024 4:11 PM Tags:Drupal 8;Drush Owner:只惠摸鱼 信息收集 使用arp-scan和nmap扫描C段存活主机,探测到靶机ip:192.168.199.137,且开放80、22端口 探测22、80开放端口的服务、版本、操…

Mac电脑系统提速软件CleanmyMac X2024

Mac是现代人日常工作时必不可少的工具,尤其是在居家办公已经屡见不鲜的当下。视频会议、文档传送、视频剪辑等等。它在工作中扮演的角色越来越重要,所以也导致了它的流畅程度可以在很大程度上影响人们一整天的工作效率和心情。 CleanMyMac X全新版下载如…

Shiro框架:ShiroFilterFactoryBean过滤器源码解析

目录 1.Shiro自定义拦截器SpringShiroFilter 1.1 ShiroFilterFactoryBean解析 1.1.1 实现FactoryBean接口 1.1.2 实现BeanPostProcessor接口 1.2 SpringShiroFilter解析 1.2.1 OncePerRequestFilter过滤逻辑实现 1.2.2 AbstractShiroFilter过滤逻辑实现 1.2.2.1 创建Sub…

Alphalens 因子分析 - 以低换手率因子为例(1)

因子分析是量化研究的基本技能之一。通过因子分析,找出有效的因子,通过相关性去重后,就可以通过机器学习、线性回归等方法把因子组合起来,构成交易策略。 这一篇笔记我们就介绍如何使用 Alphalens 来进行单因子分析。我们使用的因子是低换手率因子。 股谚有一种说法,天量…

风速预测 | 基于深度学习的风速预测模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 风速预测 | 基于深度学习的风速预测模型(Matlab) 程序设计 完整程序和数据获取方式:私信博主回复基于深度学习的风速预测模型(Matlab)。 参考资料 [1] htt…

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中,运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符,以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…

智慧灯杆sip广播可视对讲解决方案

智慧灯杆sip广播可视对讲解决方案 智能路灯以城市公共设施的全面高效利用为出发点,根据路况加载智能照明、新能源汽车充电桩、城市广播、视频监控、WIFI热点、LED/LCD信息发布、环境监测、微型基站、停车场管理、井盖等。监控和USB手机充电灯功能,不仅能…

2024 年 API 安全:预测和趋势

随着技术以前所未有的速度不断进步,API(应用程序编程接口)安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增,组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年,预计几个关键…

海外代理IP在游戏中有什么作用?

随着科技的飞速发展,手机和电脑等电子产品已成为互联网连接万物的重要工具,深度融入我们的日常生活,我们借助互联网完成工作、休闲和购物等任务,以求提升生活质量。 不仅如此,网络游戏也是人们心中最爱,它…

前端开发的新纪元:全方位工具栈探索 | 开源专题 No.57

vuejs/vue Stars: 205.6k License: MIT Vue 是一个用于构建用户界面的渐进式框架。它从头开始设计,可以根据不同的使用情况轻松地在库和框架之间进行扩展。Vue 由一个专注于视图层的核心库组成,并且还有一系列支持性库来帮助您处理大型单页应用程序中的…

YOLOv8改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)

一、本文介绍 本文给大家带来的改进机制是TransNeXt特征提取网络,其发表于2023年的12月份是一个最新最前沿的网络模型,将其应用在我们的特征提取网络来提取特征,同时本文给大家解决其自带的一个报错,通过结合聚合的像素聚焦注意力和卷积GLU,模拟生物视觉系统,特别是对于中…

MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)

文章目录 MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)REDO相关主要参数innodb_log_buffer_size innodb_redo_log_capacityinnodb_log_group_home_dir参考 【免责声明】文章仅供学习交流,观点…

web前端(html)练习

第一题 1. 用户名为文本框,名称为 UserName,长度为 15,最大字符数为 20。 2. 密码为密码框,名称为 UserPass,长度为 15,最大字符数为 20。 3. 性别为两个单选按钮,名称为 sex,值分…

链表--141.环形链表/easy C级理解

141.环形链表 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链…

750ml离心瓶进口国产离心机通用750ml离心杯高低速离心机瓶

750ml低速离心瓶系列: 产品货号:ZY1136222 材质:PPCO 容量(ml):750 尺寸(O.DxH,mm):98.5x147 最大离心力(xg):6000 产品货号&…

CloudCompare——点云空间圆拟合

目录 1.概述2.软件实现3.完整操作4.相关代码 本文由CSDN点云侠原创,CloudCompare——点云空间圆拟合,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的Tools——>…

【DevOps-07-2】Sonarqube基本使用

一、简要说明 Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果 Sonarqube集成在Maven实现代码检测使用sonar-scanner客户端的方式二、Sonarqube管理后台安装中文插件 1、登录Sonarqube管理后台 示例:http://192.168.95…

Python+requests搭建接口自动化测试框架

一、接口自动化的意义(为什么做这个框架) 新版本上线时之前版本的功能需要进行回归测试,导致大量的重复性手工测试。引入自动化测试可以使用自动化技术代替部分手工的回归性测试,解放更多人力做其它更有必要的事情。但目前项目UI变…

RDD算子——转换操作(Transformations )【map、flatMap、reduceByKey】

一、map map 算子 # spark-shell sc.parallelize(Seq(1, 2, 3)).map( num > num * 10).collect()# IDEA Test def mapTest(): Unit {// 1. 创建RDDval rdd1 sc.parallelize(Seq(1, 2, 3))// 2. 执行 map 操作val rdd2 rdd1.map(item > item * 10)// 3. 得到结果val re…