python项目开发中首先要学习的几个知识点

2023-11-03

python项目开发中首先要学习的几个知识点

1.知识点:
  • python中的推荐命名规范。

  • python项目的推荐目录结构。

  • python中__init__.py的作用。

  • python中在不同文件夹/同一个文件夹两种情况下如何引用另一个.py文件。

  • python为什么要使用if __name__ == '__main__':

2.解释:
  1. python中的推荐命名规范。

    参考Google开源风格

    python代码中需要命名的主要包括包、模块、类、函数、变量、常量,python之父Guido推荐的 命名方法如下:*

    类型 说明 示例
    小写下划线 my_package
    模块 小写下划线 my_module
    大驼峰命名法 MyClass
    函数 小写下划线 my_function
    变量 小写下划线 my_variable
    常量 大写下划线 MY_CONSTANT
  2. python项目的推荐目录结构。

    以项目名称为‘MyProject为例,说明推荐的目录结构,如下:’

    MyProject/   项目名称
    |-- bin/ 目录下放项目的可执行文件
    |   |-- myproject
    |
    |-- my_project/ 所有的项目代码、模块目录都放在这个目录下
    |   |-- tests/ 单元测试代码目录
    |   |   |-- __init__.py
    |   |   |-- test_main.py
    |   |
    |   |-- __init__.py
    |   |-- main.py 程序入口
    |
    |-- docs/ 项目文档目录
    |   |-- conf.py
    |   |-- abc.txt
    |
    |-- setup.py 安装、部署、打包的脚本
    |-- requirements.txt 依赖的外部python包的列表
    |-- README 项目说明文件
    
  3. python中__init__.py的作用。

    __init__.py主要有两个作用:

    1. 让代码文件夹变成可以被导入import的软件包,如果文件夹下没有__init__.py文件则使用import 或from import 会报错 ImportError: No module named...
    2. 使用 from pakge import *时 *****所指的模块可以在__init__.py中自定义

    下面以2中推荐目录说明__init__.py的作用,python3.3及以上版本不使用__init__.py也不会报错,但在这里我们还是推荐使用__init__.py

    • 以2中目录为例,如果my_project文件夹和tests文件夹中没有__init__.py,那么在想要在docs文件夹下的conf.py文件中使用其他模块将会报错,如下:

      conf.py中代码 运行结果
      import my_project.main ImportError: No module named my_project.main
      import my_project.tests.test_main ImportError: No module named my_project.tests.test_main
    • 以2中目录为例,如果只有my_project中有__init__.py,那么在想要在docs文件夹下的conf.py文件中使用其他模块如下:

      conf.py中代码 运行结果
      import my_project.main 成功
      import my_project.tests.test_main ImportError: No module named my_project.tests.test_main
    • 以2中目录为例,如果my_project文件夹和tests文件夹中都有__init__.py,那么在想要在docs文件夹下的conf.py文件中使用其他模块如下:

      conf.py中代码 运行结果
      import my_project.main 成功
      import my_project.tests.test_main 成功
  4. python中在不同文件夹/同一个文件夹两种情况下如何引用另一个.py文件。

    • 不同文件夹

      在python3.3及以上的版本中,不同文件夹引用.py文件的方法如下:

      # 以2中目录为例,my_project目录中的main.py 要引用 tests 目录下的test_main.py
      import tests.test_main
      # 或者
      from tests import test_main
      

      在python3.3以下的版本,在要引用.py的文件夹下添加__init__.py文件后,可使用如上同样的方法导入.py模块。

    • 同一文件夹直接使用import 模块名(.py文件名)导入

  5. python为什么要使用if __name__ == '__main__':

    先给结论:

    1.防止当前.py文件在被其他.py文件导入时显示多余的程序主体部分

    2.程序的入口

    举例如下:

    ​ 有aa_one.py文件,其中定义了一个print_a()方法,同时还打印了一行字符串

在这里插入图片描述

​ 现在有aa_two.py想要调用aa_one.py中的方法print_a()方法,如下:

在这里插入图片描述

​ 我们从如上执行结果可以看到,我们只想要调用执行aa_one.py中的方法print_a()方法,但在调用print_a()方法之前就先执行print('what ever'),原因是在我们使用import aa_one语句导入时会把aa_one.py中的代码执行一遍,如何规避这个问题呢,有的同学可能会想到把print('what ever')删除掉不就好了吗,这其实是一种解决方案,但是更多时候我们在写一些功能类或者方法的时候,我们就是需要在文件中编写一些测试的代码,但是在写完之后我们又不想删除,因为可能有时候还需要调整测试,为了满足这个需求,我们就可以使用if __name__ == '__main__':,我们再来看下使用了if __name__ == '__main__':的情况:

在这里插入图片描述
这个时候print('what ever')就不会在调用中被执行,功能类和方法的调试代码就可以写到if __name__ == '__main__':中,在被其他模块调用时也不用删除这些测试代码,同时if __name__ == '__main__':也作为**程序的入口**。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python项目开发中首先要学习的几个知识点 的相关文章

  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐

  • Vue3的使用

    1 安装命令步骤 vue create 命令 接下来我们创建 runoob vue3 app 项目 vue create runoob vue3 app 执行以上命令会出现安装选项界面 Vue CLI v4 4 6 Please pick
  • 解决升级JDK后:找不到sun.misc.Unsafe的类文件

    原因 JDK9以后已经将sun misc Unsafe弃用 同时改进了lib文件的存储方式 将sun misc Unsafe全部存储在了jdk unsupported里面 解决 手动添加弃用的类文件 在编译时 携带参数 add module
  • 运维Shell脚本小试牛刀(七):在函数文脚本件中调用另外一个脚本文件中函数

    运维Shell脚本小试牛刀 一 运维Shell脚本小试牛刀 二 运维Shell脚本小试牛刀 三 cd dirname 0 pwd 命令详解 运维Shell脚本小试牛刀 四 多层嵌套if elif elif else fi 蜗牛杨哥的博客 C
  • react 字段拼接

    Array from columns el index1 gt
  • 正确解决:坑爹的0xc000007b

    1 出现0xc000007b 应用程序无法正常启动 其根本原因是缺乏所需要的DLL 提供了错误版本的dll相当于没有DLL 提示完全一样 2 网上有人说缺乏dx运行环境 如果属实 也是因为缺乏dx相关的dll 所以根本原因 在低一点 3 与
  • PyCharm运行Python代码时出现“未找到模块”错误

    PyCharm运行Python代码时出现 未找到模块 错误 在PyCharm中执行Python脚本时 有时会出现 ModuleNotFoundError No module named XXXX 错误 这种错误是因为在项目中没有安装对应的
  • C++求vector中的最大值

    习惯了Python的编程以后 再回过头来写C 感觉头都被搞大了 Python是一门高级语言 而C 是一门偏底层的语言 所以Python一行解决的问题用C 也许需要好几行 比如在一个列表中找最大值的问题 如果是Python的话 那么代码大概是
  • (二十八)业绩归因之Brinson模型

    单期Brinson模型 一个时期的基金收益可以分为四个部分 资产配置收益 个股选择收益 交互收益和基准组合收益 先构建4个概念性的组合 Q1 Q4 基准收益组合和实际投资组合 Q2 积极资产配置组合 这表示基金经理能自主选择资产配置的比例
  • 定时器中断控制LED状态实验

    一 STM32 通用定时器简介 STM32F1 的通用定时器是一个通过可编程预分频器 PSC 驱动的 16 位自动装载计数 CNT 构成 STM32 的通用定时器可以被用于 测量输入信号的脉冲长度 输入捕获 或者产生输出波 输出比较和 PW
  • C++虚函数详解

    C 虚函数详解 前言 C 的特性使得我们可以使用函数继承的方法快速实现开发 而为了满足多态与泛型编程这一性质 C 允许用户使用虚函数 virtual function 来完成 运行时决议 这一操作 这与一般的 编译时决定 有着本质的区别 虚
  • 毕业设计-基于 MATLAB 的医学超声图像处理仿真平台设计与研究

    目录 前言 课题背景和意义 实现技术思路 一 平台的总体设计 二 医学超声图像处理仿真平台算法概述及 GUI 实现 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设
  • 管理的核心是什么?这里有一套科学、高效的团队管理法则

    员工就该牢牢约束才能管好 对于员工的管理尺度令许多管理者头大 管紧了 容易让员工产生反叛心理 甚至导致人员的流失 管的松了 员工好像又不怎么用心工作 其实在这里 很多管理者经常有一个误区就是 管理就是控制和约束 但实际上有效的管理是对员工的
  • MES系统最全介绍来了

    制造型企业在生产过程中 或多或少都会遇到以下生产问题 1 生产现场管理混乱 造成人力资源和物流的浪费 2 生产进度不透明 给业务和跟单带来诸多不便 3 不能及时了解产品不良率 质量控制难度大 4 仓储管理不规范 造成材料积压过多 物料查找麻
  • VMware Workstation 16 在此主机上不支持嵌套虚拟化 修复方法

    一 准备工作 已安装 VMware Workstation 16 Pro 以上版本 操作系统为 Windows 10 以上版本 设备已联网 并能访问到 VMware 官方服务器 二 操作步骤 1 升级 VMware Workstation
  • 想拿 20k 无压力?Android开发必读的一篇文章!

    程序员分很多种类和等级 如果要提高达到20k的概率 有两个条件如果满足的话 则很容易达到 1 一线城市 北上广深杭 2 互联网行业 如果你非得抬杠 我要在三线城市 做外包要赚20k的话 很难 我自己也做不到 所以 如果你要做程序员的话 必须
  • [Spring Boot]02 使用IDEA快速构建Spring Boot工程

    新建 Spring Initializr 项目 选择 Spring Initializr 如下图选择SDK和URL 点击NEXT 填写项目信息Group和Artifact 什么是Group和Artifact Group 是项目组织的唯一标识
  • MySQL高级篇_第18章_主从复制

    1 主从复制概述 1 1 如何提升数据库并发能力 在实际工作中 我们常常将 Redis 作为缓存与 MySQL 配合来使用 当有请求的时候 首先会从缓存中进行查找 如果存在就直接取出 如果不存在再访问数据库 这样就提升了读取的效率 也减少了
  • [vulnerhub] easy_cloudav write up

    摘要 0x1 靶机 192 168 88 13 靶机下载地址 https download vulnhub com boredhackerblog easy cloudantivirus ova 攻击机 192 168 88 8 每周六都会
  • Unity3D 移动物体方式总结

    简述 在Unity 3D中很多时候我们会想要移动一个物体到别的位置 如让想人物跑动起来 或者想要移动相机来跟随人物 有很多种方法可以改变物体的坐标 实现移动的目的 移动的本质是在每一帧中修改物体的position 在这里把之前使用过的移动物
  • python项目开发中首先要学习的几个知识点

    python项目开发中首先要学习的几个知识点 1 知识点 python中的推荐命名规范 python项目的推荐目录结构 python中 init py的作用 python中在不同文件夹 同一个文件夹两种情况下如何引用另一个 py文件 pyt