Python中__main__的概念探究

2024-01-01

我目前正在使用 Python,并且对函数列于中这一事实感到困惑__main__。我一直在查看多个 python 脚本,试图找到一个共同的主题,即哪些函数值得在其中占有一席之地__main__,但无济于事。这里有我自己的代码示例。firstfunction and anotherfunction是我的代码中仅有的两个函数。

def main(argv):

    firstinput=""
    secondinput=""

    if len(argv) < 3 or len(argv) > 3:
        print """"Please set to:
                metisfinal.main(metisfinal.py, firstinput, secondinput)""""
        return
    else:
        firstinput = argv[1]
        secondinput = argv[2]

    firstfunction(firstinput, dictionary)
    anotherfunction(list, secondinput)

if __name__ == "__main__":
    main(sys.argv)

(我认为)我知道这些论点和__main__调用是正确的,但是firstfunction and anotherfunction总是返回错误(因为它们的参数不是全局定义的)。我确信这是由于错误的理解而引起的__main__,因为我看过的所有其他示例基本上都成立了__main__以相同的方式。

什么构成在中列出特定功能__main__?我偶然发现了一些 Python 代码,其中包含超过 30 个函数,但程序员只列出了其中的 2 个函数__main__。同样,有时代码的主要参数中会有类,就像这个(Project之前定义为对象类):

def main(argv):

    filename = ""
    outputfilename = ""

    p = Project(filename, outputfilename, subdomainNames) 
    p.generateICs()

if __name__ == "__main__":
    main(sys.argv)

从概念上讲,我无法理解为什么没有列出所有函数......不是所有函数都需要运行或者是__main__只是初始化一些东西?

我正在查看非典型代码吗?有哪些关键概念__main__我失踪了吗?一旦我找到了要放入哪些功能__main__,有具体的格式化方法吗?


不清楚你所说的“列在__main__". __main__不是源文件中的实体。相反,它是name模块的名称,如果直接执行的话。当你这样做时if __name__=="__main__",当且仅当代码作为主模块执行时(即,如果它是正在运行的程序),您就告诉 Python 执行该块中的代码。中的代码if __name__=="__main__"如果模块是从另一个模块导入的,则块将不会运行。

请注意,您不会在该 if 块中“列出”函数。相反,你把常规程序代码在您想要运行的那个块中。通常,这段代码只调用一个函数。人们通常称该函数为main()。但之间并无特殊关系__main__ and main。您可以将该函数称为任何您喜欢的名称:

def snicklefritz():
    # This function will be run when you run the program
    print "You ran the program!"

if __name__ == "__main__":
    snicklefritz()

尝试运行这个程序(例如,将其另存为“snicklefritz.py”,然后执行python snicklefritz.py从命令行)。您会看到“您运行了该程序!”打印。如果您创建一个单独的文件import snicklefritz,该消息将不会被打印。

请注意,没有任何关于“列出函数”的内容。例如,看看这个程序:

print "This will always be printed!"

if __name__ == "__main__":
    print "This will only be printed if you run the file as a program!"

这里的if __name__=="__main__"块不“列出”任何函数。它仅包含文件作为脚本运行时运行的实际代码。不过,人们通常不会这样做,因为将代码放在单独的函数中比仅仅“暴露”在函数之外更整洁。

至于其他函数,您可以在模块中定义您喜欢的任何其他函数,以便在该模块内使用,或者由导入您的模块的其他模块使用。通常,模块中的大多数函数不会在模块内部使用if __name__=="__main__"块,因为它们不会成为“main”函数的一部分。相反,它们将是供其他代码使用的其他函数。例如:

def otherFunc(x):
    # Return x squared
    return x**2

def snicklefritz():
    # This function will be run when you run the program
    print "You ran the program!"

if __name__ == "__main__":
    snicklefritz()

otherFunc模块中根本没有使用。没关系。可能有人想要导入您的模块并使用otherFunc他们自己。并非每个函数都必须在同一模块中使用,更不用说从if __name__=="__main__" block.

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

Python中__main__的概念探究 的相关文章

  • 在二维数组中进行所有可能的组合

    我正在尝试制作具有所有可能组合的 4x4 16 像素黑白图像数组 我制作了以下数组作为模板 template 0 0 0 0 start with all white pixels 0 0 0 0 0 0 0 0 0 0 0 0 然后我想迭
  • C函数指针混淆

    这两个声明有什么区别 int operate int func int int int a int b return func a b and int operate int func int int int a int b return
  • 有什么好的适用于 Google App Engine 应用程序的 AJAX 框架吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的 Google App Engine 应用程序中实现 AJAX 因此我正在寻找一个好的
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • NumPy 数组与 SQLite

    我在 Python 中见过的最常见的 SQLite 接口是sqlite3 但是有什么东西可以很好地与 NumPy 数组或 rearray 配合使用吗 我的意思是 它可以识别数据类型 不需要逐行插入 并提取到 NumPy rec 数组中 有点
  • RVM 无法通过 SSH 工作(作为一项功能)

    我刚刚在 Debian 6 服务器上安装了 RVM 一开始没有任何问题 但是 在一切设置完成后 我无法在终端中运行 RVM 我打字时收到的消息rvm use is RVM is not a function selecting rubies
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • 无法使用Python请求会话模块登录网站

    我刚刚开始进行网络抓取 对于我的第一个项目 我尝试使用 requests Session 登录 artofproblemsolving com 并访问另一个用户的帐户 这是我的代码 import requests LOGIN URL htt
  • 对法语文本进行词形还原[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些法语文本需要以某种方式进行处理 为此 我需要 首先 将文本标记为单词 然后对这些单词进行词形还原以避免多次处理相同的词根 据我
  • Asyncio:从未检索到任务异常的怪异

    假设我有一个简单的代码 import asyncio async def exc print 1 0 loop asyncio get event loop loop create task exc try loop run forever
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • 尝试校准keras模型

    我正在尝试通过 Sklearn 实现来校准我的 CNN 模型CalibratedClassifierCV 尝试将其包装为KerasClassifier并覆盖预测功能但没有成功 有人可以说我做错了什么吗 这是模型代码 def create m
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • 在字符串内打印单引号

    我想输出 XYZ s ABC 我在Python IDLE中尝试了以下3条语句 第一条和第二条语句输出 a before 带打印功能的第三条语句不输出 before 作为 Python 新手 我想了解为什么 之前输出 在第 1 条和第 2 条
  • 解析整数集的字符串并列出间隔

    I have 2 5 7 9 12 string 我想从中获取 2 5 7 8 9 12 列表 python中有没有内置的函数 Thanks UPD 我想 直接的答案是No 不管怎样 谢谢你的 片段 使用一个 建议者斯文 马尔纳克 s 2
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • 本地主机上的 Google App Engine GQL 查询

    我正在 Google App Engine Windows 上的 SDK 版本 1 7 0 上开发一个应用程序 我需要经常测试该应用程序 并且此测试涉及数据存储上的大量 GQL 查询 您可以在 App Engine 管理界面的浏览器中在线运
  • Django 中使用外键的抽象基类继承

    我正在尝试在 Django 支持的网站上进行模型继承 以遵守 DRY 我的目标是使用一个名为 BasicCompany 的抽象基类来为三个子类提供通用信息 Butcher Baker CandlestickMaker 它们位于各自的应用程序
  • 为数据集生成随机 JSON 结构排列

    我想生成 JSON 结构的许多不同排列作为同一数据集的表示 最好不需要对实现进行硬编码 例如 给定以下 JSON name smith occupation agent enemy humanity nemesis neo 应该产生许多不同
  • 尝试 numba 时出现巨大错误

    我在使用 numba 时遇到了大量错误 讽刺的是 正确的结果是在错误之后打印的 我正在使用最新的 Anaconda python 并安装了 numba conda install numba 一次在 Ubuntu 13 64 位和 anac

随机推荐

  • 如何使用 LINQ 对集合及其子集合进行排序?

    我有一组员工 每个员工都有一组职责 我想输出按姓名排序的员工列表 并输出按职务排序的他们的职责 所以 应该这样输出 简 琼斯 职责 责任A 责任乙 迈克 史密斯 职责 责任A 责任C 为了获得初始集合 我使用 var employees c
  • Android:方法中包含的中断线程

    在 Android Studio 中 我有一个线程包含在像这样的方法中 如下所示 因为我想每当调用该线程时都重新启动该线程 1 重新创建线程而不是重新启动 public void callthread final Thread myThre
  • 如何在vbscript中清除数组的内容?

    我在函数库中声明了一个二维数组并将其与一个测试相关联 在测试的action1中 我尝试使用 erase 语句清除数组 我的代码 在函数库中 Dim strVerifyAry 25 6 在行动1中 erase strVerifyAry 错误信
  • PDF 文件的视觉差异以确定像素完美度 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要使用 MS Reporting Services 重构一些报告 使用 Jasper 生成 原始报告的副本以 PDF 格式提供 要求是
  • 集成显卡上的 Java2D 绘图速度缓慢

    我正在开发一个简单的 2D 游戏 通过 Java2D API 进行渲染 我注意到 当我尝试在集成显卡上绘图时 性能会崩溃 我已经在配备较新 ATI Radeon 的主设备和拥有 5 年历史的笔记本电脑上测试了这款游戏 笔记本电脑也配备了 极
  • 自 apache arrow 1.0.1 发布以来用于长期存储的 Feather 格式

    正如我在搜索问题时了解到的那样羽毛Github https github com wesm feather 以及 stackoverflow 中的问题 例如羽毛和镶木地板有什么区别 https stackoverflow com quest
  • 插入后如何返回多个值?

    这是光滑2 0 我有以下内容 mytable returning mytable map id item session 我希望插入不仅返回id但也name场和lastname字段 在 Slick 中可能吗 map确定返回表的投影 因此您可
  • 视图控制器演示的“多个”和“单个”有什么区别?

    我一直在 Xcode 中开发 OS X 应用程序 一个让我完全困惑的选项是 Presentation 有 Single 和 Multiple 两个选项 这个属性有什么作用 所以 一旦我使用它 这实际上是 显而易见的 基本上 此功能会导致窗口
  • Django REST API“获取”功能

    我正在按照教程进行操作here http www django rest framework org tutorial 1 serialization 我遇到过这个 def update self instance validated da
  • Alamofire 无法正常工作 - 元组问题元素数量不同

    使用 Xcode 7 1 在 Alamofire 响应 JSON 请求中 我无法输入 4 个参数 下面是代码 let url2 https httpbin org get Alamofire request GET url2 respons
  • 如何设置实例变量的默认值?

    在我的作业中 我得到了Food像这样的类 class Food private String name name of food private int calPerServing calories per serving must be
  • TFS2010:打开某些 Excel 报告会出现错误 TF80076

    当我尝试打开某些 TFS2010 Excel 报告时 我从 Excel 中收到以下错误弹出窗口 TF80076 工作项中的数据是 无效或您没有 修改数据的权限 请 纠正问题并重试 然后弹出窗口 TF208103 初始化 连接到 Team F
  • Objective-C中如何将句子的第一个单词大写?

    我已经找到了如何将句子中的所有单词大写 但不仅仅是第一个单词 NSString txt hi my friends txt capitalizedString 我不想更改为小写并将第一个字符大写 我只想将第一个单词大写 而不改变其他单词 这
  • 从 Flex 3 安全地访问 .NET Web 服务

    我们可以成功地从 Flex AS3 应用程序使用 NET 2 0 Web 服务 除了 SSL 之外 我们还能如何提高安全性 即身份验证 您可以通过使用 ASP Net 内置的会话管理来装饰您的 webmethods
  • 将 ImageSharp.Image 转换为 ImageSharp.PixelFormats.Rgba32?

    我正在遵循教程 https opentk net learn chapter1 4 textures html https opentk net learn chapter1 4 textures html 使用 ImageSharp 如何
  • 在特定单词后断开字符串并将其保留在新行中(正则表达式)

    假设我有一个文本字段 用户可以在其中提交代码片段 我想检测字符串中何时出现特定单词 然后对出现的单词 字符执行某些操作after那个词 假设我们有一个字符串 在单词后面pyjamas我想在没有缩进的情况下在新行上开始其余代码 与代码美化器的
  • 如何测试AWS Elasticache中redis的性能?

    我想测试在 AWS ElastiCache 中运行的 Redis 性能 我努力了redis benchmark在我的本地机器上测试它的工具 我需要在 ElastiCache 中进行相同的测试 但我相信没有终端访问或redis benchma
  • 为什么在 C89 中整数除法会得到不同的值?

    例如 假设您有以下变量 int i 9 int j 7 取决于实施的价值 i j 可以是 1 or 2 怎么可能得到这两个不同的结果呢 令人惊讶的是 结果是 C89 中定义的实现 ANSI 草案 http flash gordon me u
  • 对 CursorLoaders 以及将它们与自定义 SQLiteOpenHelper 一起使用感到困惑

    我正在编写一个应用程序 允许人们为他们需要执行的各种任务设置闹钟 我当前的计划是将所有相关数据存储到 SQLite 数据库中 为此 我创建了一个扩展 SQLiteOpenHelper 的类 并用方法填充它来处理我期望必须接受的所有 CRUD
  • Python中__main__的概念探究

    我目前正在使用 Python 并且对函数列于中这一事实感到困惑 main 我一直在查看多个 python 脚本 试图找到一个共同的主题 即哪些函数值得在其中占有一席之地 main 但无济于事 这里有我自己的代码示例 firstfunctio