当前位置: 首页 > news >正文

Python小白学习教程从入门到入坑------第十八课 异常模块与包【下】(语法基础)

一、内置全局变量__name__

在Python中,有一些内置的全局变量和特殊变量,它们是由Python解释器预定义的,可以在代码的任何地方直接使用。

这些变量通常用于提供关于当前解释器状态的信息,或者用于控制解释器的行为

在Python中,__name__是一个内置的特殊变量,也被称为“魔法变量”或“双下划线变量”

它并不是传统意义上的“全局变量”,因为它不是由用户定义的,而是由Python解释器自动为每个模块和脚本设置的

然而,由于其作用范围是整个模块,并且可以在模块中的任何地方访问,所以有时会被非正式地称为“全局变量”(在模块范围内)

1.1 语法

if  __name__ == "__main__" : 

(用来判断当前运行的脚本是否是主程序,而不是被其他脚本导入的模块)

1.2 作用

用来控制py文件在不同的应用场景执行不同的逻辑

1.3  __name__ 使用案例

if  __name__ == "__main__" : 这行代码通常用于在脚本被直接运行时执行一些操作,而在脚本被导入为模块时不执行这些操作

这样做的好处是,你可以让你的Python文件既可以作为脚本直接运行(执行一些特定的任务,比如运行测试、作为程序的入口点等),也可以作为模块被其他脚本导入,提供函数、类和变量等

1、文件在当前程序执行(即自己执行自己):__name__ == "main"

2、文件被当作模块被其他文件导入:__name__== 模块名,下面的代码不会被显示出来

eg:

# myscript.py  def my_function():  print("Hello from my_function in myscript!")  if __name__ == "__main__":  # 这段代码只有在myscript.py被直接运行时才会执行  print("myscript.py is being run directly")  my_function()

如果你直接运行 myscript.py 输出将是:

myscript.py is being run directly  
Hello from my_function in myscript!

但是,如果你从另一个Python脚本中导入 myscript.py ,比如:

# another_script.py  import myscript  myscript.my_function()

然后运行another_script.py,输出将是:

Hello from my_function in myscript!

注意: 在 another_script.py 的执行过程中, myscript.py  中的 if __name__ == "__main__": 块没有执行,因为 myscript.py 是被导入的,而不是直接运行的

因此, myscript.py 中的print("myscript.py is being run directly") 语句没有打印出来

二、包

2.1 包的基础信息

含义:包就是项目结构中的文件夹/目录

与普通文件夹的区别:包是含有__init__.py 的文件夹

作用:包就是将有联系的模块放到同一个文件夹下,并且在这个文件夹中创建一个名字为

__init__ .py 文件,那么这个文件夹就称之为包,有效避免模块名称冲突问题,让结构更清晰。

包的本质依然是模块,包又可以包含包

2.2 包的应用 

2.2.1 新建包

在Pycharm中新建包:右键项目名 -> new -> Python Package

eg(汉化版):

2.2.2 导入包

注意:

1、import 导入包时,首先执行__init__.py 文件的代码

2、不建议在 __init__ 中编写Python模块,尽量保证__init__ 的内容简单

导包方式一:import  pack_01

在Python中,使用import语句来导入包或模块是一种基本且常见的做法。若你有一个名为pack_01的包,并希望在你的Python脚本或交互式环境中使用它,你可以按照以下方式导入:

import pack_01

这条语句会告知Python解释器去搜索名为pack_01的包,并将其内容加载到当前的命名空间中。但请注意,这里所说的是“内容”,实际上是指pack_01包下的__init__.py文件所定义的内容

若__init__.py为空,或未定义任何类或函数等,那么直接导入pack_01后,你可能无法直接访问包内的其他模块或函数(除非它们在__init__.py中被显式导入)

若你希望在导入包后能够直接使用其内部的模块或函数,你可以在__init__.py文件中添加相应的导入语句,例如:

# pack_01/__init__.py  
from .module1 import function1  
from .module2 import Class2

完成上述设置后,当你执行import pack_01时,function1和Class2将被导入,你可以通过pack_01.function1()和pack_01.Class2() 的方式调用它们

导包方式二:from  pack_01  import  fuction

如果你更习惯于直接访问包内的模块或函数,而非通过包名作为前缀,你还可以使用from ... import ...的语法来导入: 

from pack_01 import module1, module2  
# 或者直接导入特定的函数或类  
from pack_01.module1 import function1

在导入module1和module2后,你可以直接通过module1.some_function() 和  module2.SomeClass() 来调用它们

而如果你导入了特定的函数或类,如function1,则可以直接使用 function1() 进行调用,无需再通过模块名作为前缀

2.3 __all__

__all__ 变量:一个列表,可以控制要引入的东西(模块、函数、类等)

在Python中,__all__ 是一个特殊的变量,它是一个字符串列表,用于定义当从包或模块中使用 from ... import * 语句时应该导入哪些名称(模块、函数、类等)

这个变量提供了一种方式来控制导入的命名空间,避免导入不必要的或可能引发冲突的名称

当你在一个包的 __init__.py 文件或单独的模块文件中定义 __all__ 时,你实际上是在告诉Python解释器:“当有人尝试使用 from mypackage import * 或 from mymodule import * 时,只应该导入这个列表中的名称。”

例如,假设你有一个包 mypackage,其结构如下:

mypackage/  __init__.py  module1.py  module2.py

在 mypackage/__init__.py 文件中,你可以定义 __all__ 来控制导入:

# mypackage/__init__.py  __all__ = ['module1', 'some_function']  from .module1 import some_function  
# 注意:这里我们没有直接导入 module2,因为它不在 __all__ 列表中

然后,在另一个脚本中,如果你尝试:

from mypackage import *

这将只会导入 module1(作为模块对象)和 some_function(从 module1 中导入的函数)

注意:由于 module2 没有在 __all__ 列表中,它不会被导入

然而,有一个重要的点需要注意:__all__ 只影响 from ... import * 形式的导入。如果你显式地指定了要导入的名称,__all__ 将不会有任何效果。例如:

# 这将导入 module2,即使它不在 __all__ 列表中  
from mypackage import module2

今天的分享就到这里了,欢迎大家一起交流讨论学习,不当之处烦请大家指出~

相关文章:

Python小白学习教程从入门到入坑------第十八课 异常模块与包【下】(语法基础)

一、内置全局变量__name__ 在Python中,有一些内置的全局变量和特殊变量,它们是由Python解释器预定义的,可以在代码的任何地方直接使用。 这些变量通常用于提供关于当前解释器状态的信息,或者用于控制解释器的行为 在Python中&a…...

arcgis pro 3.3.1安装教程

一、获取方式: http://dt4.8tupian.net/2/29913a61b1500.pg3二、软件目录: 三、安装步骤: (1)安装软件运行环境windowsdesktop-runtime 8.0.4; (2)选中安装文件arcgispro_33zh_cn_190127.exe&…...

Spring 获取Cookie/Session

获取Cookie/Session Cookie & Session获取Cookie传统方法获取使用 Spring 获取 Cookie 获取Session传统方法使用 SpringBoot 获取 Session简洁获取 Session HTTP协议 自身是属于 无状态协议(默认情况下 HTTP 协议的客户端与服务端的这次通信,和下次的通信之间没…...

小红书接口数据查询优化指南

小红书,作为分享生活、购物心得与美妆护肤经验的热门社交媒体平台,对开发者而言,其数据接口具有极高的实用价值。本指南将聚焦于如何通过接口高效查询小红书数据,并提供清晰的步骤与示例代码。 一、前置准备 在深入查询之前&…...

数据结构 - 图

文章目录 一、图的基本概念二、图的储存结构1、邻接矩阵2、邻接表 三、图的遍历1、广度优先遍历2、深度优先遍历 四、最小生成树1、概念2、Kruskal算法3、Prim算法 五、最短路径问题1、单源最短路径--Dijkstra算法2、单源最短路径--Bellman-Ford算法3、多源最短路径--Floyd-War…...

如何在Linux系统中管理和优化Swap空间

如何在Linux系统中管理和优化Swap空间 Swap空间简介 检查Swap空间 创建Swap空间 创建Swap文件 创建Swap分区 配置Swap空间 编辑fstab文件 设置vm.swappiness Swap使用策略 调整vm.vfs_cache_pressure 设置vm.min_free_kbytes Swap空间的监控 使用top命令 使用free命令 Swap…...

瑞格智慧心理服务平台 NPreenSMSList.asmx sql注入漏洞复现

0x01 产品描述: ‌ 瑞格智慧心理服务平台‌是一个集心理测评、心理咨询、心理危机干预、心理放松训练等功能于一体的综合性心理健康服务平台。该平台由北京瑞格心灵科技有限公司开发,旨在为用户提供全方位的心理健康服务。0x02 漏洞描述:…...

大模型是否具备推理能力?解读苹果新论文:GSM-Symbolic和GSM8K

在人工智能领域,大模型的推理能力一直备受关注。OpenAI的GPT-4和其他大模型的表现令人惊叹,但究竟是否具备真正的数学推理和抽象逻辑能力?最近,苹果的研究人员发表了一篇题为“GSM-Symbolic:理解大语言模型中数学推理的…...

自动化部署-02-jenkins部署微服务

文章目录 前言一、配置SSH-KEY1.1 操作jenkins所在服务器1.2 操作github1.3 验证 二、服务器安装git三、jenkins页面安装maven四、页面配置自动化任务4.1 新建任务4.2 选择4.3 配置参数4.4 配置脚本 五、执行任务5.1 点击执行按钮5.2 填写参数5.3 查看日志 六、查看服务器文件七…...

HTB:Analytics[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…...

【每日题解】3211. 生成不含相邻零的二进制字符串

给你一个正整数 n。 如果一个二进制字符串 x 的所有长度为 2 的 子字符串 中包含 至少 一个 "1",则称 x 是一个 有效 字符串。 返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。 示例 1: 输入: n 3 输出&a…...

Nginx、Tomcat等项目部署问题及解决方案详解

目录 前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的常见原因 2. 端口开启问题2.1 Windows环境下的端口开放2.2 Linux环境下的端口开放 3. 重视日志分析3.1 Nginx日志分析3.2 Tomcat日志分析 4. 开发环境与部署后运行结果不同4.1 开发环境与生产…...

【PythonWeb开发】Flask-RESTful参数解析

flask-restful中的reqparse.RequestParser是一个用于解析和验证参数的工具。它可以帮助开发者从请求中提取参数,并确保这些参数符合预期的格式和类型。参数解析的意思就是规范化传入的参数并获取到这些参数。 一、什么是 reqparse.RequestParser? reqpa…...

gcc与mingw64版本介绍

三类编译器 GCC,全称为GNU Compiler Collection,是一个强大的编译器集合,它不仅支持C和C语言,还支持Fortran、Ada、Java等多种编程语言的编译。在GCC工具链中,gcc和g是两个核心的编译器工具。gcc是专门用于编译C语言程…...

CSS3新增长度单位

CSS3新增长度单位 rem:根元素字体的倍数,只与根元素字体大小有关;vw:占视口宽度的百分比;vh:占视口高度的百分比;vmax:占视口中宽和高最大的百分比;vmin:占视…...

【Spring】创建Spring项目前的配置工作

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼文章收录于:Spring 目录 1.下载Spring Initializr 2.配置Spring国内源 3.添加Spring框架的支持(pom.xml) 4.刷新Maven仓…...

docker 安装部署 nginx

命令 docker run \ -p 15008:80 \ --name nginx1.21.6 \ -v /iepms/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /iepms/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /iepms/nginx/log:/var/log/nginx \ -v /iepms/nginx/html:/usr/share/nginx/html \ -d 192.168.1.103…...

黑马数据库学习笔记

课程地址 (基础篇)MySQL的启动 mysql 默认使用 3306 端口 在 centos下,启动 mysql 数据库:service mysqld start; 查看状态/启动/停止/重启:systemctl status/start/stop/restart mysqld; 登录到mysql数据库&…...

MYSQL-SQL-03-DQL(Data Query Language,数据查询语言)(单表查询)

DQL(数据查询语言) DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。 查询关键字: SELECT 在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访…...

【数据结构和算法】三、动态规划原理讲解与实战演练

目录 1、什么是动态规划? 2、动态规划实战演练 2.1 力扣题之爬楼梯问题 (1)解题思路1: (2)解题思路2: (3)动态规划(DP):解题思路 (4&#x…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...