理解python中的执行流程

2023-12-07

对于 python 新手,对执行流程感到困惑:

为了详细说明,我陈述以下示例:

示例1:

def hello():
    print("hello world")
    python()

def python():
    print("testing main")

if __name__ == "__main__":
    hello()

**output :**
    hello world
    testing main

注意:我知道的用法__name__ ==“__main__”。

示例2:

python()

def python():
    print("testing main")

**output**
File "main_flow.py", line 2, in <module>
python()
NameError: name 'python' is not defined

据我所知,python 按顺序执行程序(如果我错了,请纠正我),因此在示例 2 中,当遇到方法 python() 时,它无法找到它。

我的困惑是为什么在示例1中没有发生类似的错误,这种情况下的执行流程是什么。


Edit 1: 当您在 python 中调用自定义函数时,它必须知道它在文件中的位置。我们用def function_name():定义我们在脚本中使用的函数的位置。我们必须打电话def function_name():在我们打电话之前function_name(),否则脚本不会知道function_name()并会引发异常(函数未找到错误)。

通过跑步def function_name():它只让脚本知道有一个函数叫做function_name()但它实际上并没有运行里面的代码function_name()直到你调用它。

在你的第二个例子中你打电话python()在脚本到达之前def python(),所以它不知道什么python() is yet.

The 实施例1顺序是:

1.    def hello(): # Python now knows about function hello()
5.        print("hello world")
6.        python()

2.    def python(): # Python now knows about function python()
7.        print("testing main")

3.    if __name__ == "__main__":
4.       hello() 

The 实施例2顺序是:

1.    python()    # Error because Python doesn't know what function python() is yet

-     def python(): # Python doesn't reach this line because of the above error
-         print("testing main")

The 实施例2解决方案是:

1.     def python(): # Python now knows about function python()
3.         print("testing main")

2.     python()   

Edit 2:重申一下实施例1从脚本的角度来看:

def hello(): 
def python(): 
if __name__ == "__main__":
hello() 
print("hello world")
python()
print("testing main")

这是脚本查看和运行每行代码的顺序。很明显脚本知道python()因为 def 在第 #2 行被调用,并且python()在第 6 行调用。

看来您不明白范围在定义方面的含义。阅读相关内容。函数的作用域不在 def 期间执行,仅在调用函数时执行。

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

理解python中的执行流程 的相关文章

随机推荐

  • 如何将文件下载到服务器中的特定路径:Python

    如何通过 http 将文件下载到 jython 或 python 服务器上的本地文件夹 下面的代码可能有效 os chdir path to change to from urllib2 import urlopen f urlopen h
  • 将 ObservableCollection 设置为 ObservableProperty

    我要切换到CommunityToolkit Mvvm源生成器来处理我的视图模型 我对如何处理有点困惑ObservableCollections 我的视图模型如下所示 public partial class MyViewModel Obse
  • 将字符字段更改为日期

    我有一个遗留的 postgres 数据库 其日期列转换为character 50 字段 不要问 我想更改表格和列以包含实际日期 因为这有效 select distinct to date date begin YYYY DD MM from
  • 如何动态实现api版本控制和swagger文档

    我正在 dotnet core api 工作 我必须在 api 上实现版本控制 swagger文档应该按api版本分类 在 Net Core api 版本控制中 可以通过添加来自 nuget 的以下参考来实现 Microsoft AspNe
  • MYSQL 缺少第一行数据[重复]

    这个问题在这里已经有答案了 我编写了一个 PHP 脚本 其中返回餐厅名称 地址 电话号码 营业时间表和自定义菜单的链接 但是 即使数据库中有周一的条目 当我在 mysqli fetch assoc 中执行 while 循环时 它也不会显示
  • Powershell:如何将一个 CSV 中的唯一标头合并到另一个 CSV 中?

    Edit 1 因此 我已经弄清楚如何获取 CSV 2 中的唯一标头以附加到 CSV 1 header table Get Member MemberType NoteProperty Name header add table add Ge
  • MVP 到 MVVM Android

    这里的一个人告诉我 MVVM 比 MVP 更好 他告诉了我很多优点和很多优点 但我想知道我的 MVP 是否做得很好 或者您是否知道任何其他可能转换为 MVVM 的方法 这是使用 Google MVP 登录 我不会放置所有代码 但我会放置文件
  • C# 鼠标悬停时改变表格行颜色

    我的 winform 中有一个表格布局面板 我想在鼠标悬停在一行时向行添加效果 我想我需要在表格上进行 Mouse over 操作 然后检测表格的行号 然后迭代该行上的每个单元格并更改其背景颜色 问题是我不知道如何获取行号 有什么想法吗 E
  • cer、pvk 和 pfx 文件之间有什么区别?

    cer pvk 和 pfx 文件之间有什么区别 另外 我要保留哪些文件以及我应该将哪些文件提供给我的交易对手 Windows 使用 X 509 证书的 cer 扩展名 这些可以是 二进制 ASN 1 DER 也可以使用 Base 64 进行
  • 使用 AccountManagement 扩展类时如何设置二进制属性?

    我正在使用一个自定义类以在 Active Directory 中公开一些自定义架构 我正在存储一个二进制 blob 根据项目要求 该数据必须存储在 AD 中 我不能使用外部存储 如果可以的话我会这样做 当我创建用户时 它可以很好地存储 bl
  • 在一次调用中检索存储库及其标签版本的列表

    我有两个天蓝色的 CLI 查询 az acr repository list 检索我的容器注册表中的存储库列表 az acr repository show tags 检索第一个查询返回的每个存储库的版本标记 这会导致初始调用来检索列表 然
  • 如何从表单中获取 int 而不是 string?

    从表单获取变量
  • 如何通过JavaScript中的正则表达式将camelCase更改为slug-case(或kebab-case)

    因为某些原因 这个答案我发现 据说 如何在 php 中做到这一点只是给了我错误的匹配 它似乎添加了破折号 但也用字符串其余部分的副本替换了大写字母 所以我希望 abcZxc 变成 abc zxc 但它把它变成 abd zxczxc 这 加上
  • 将第三方 js 文件与 TypeScript 结合使用

    我是 typeScript 的新手 我希望能够使用没有定义文件的第三方库 Typescript 是否允许您使用外部库 我尝试使用的库是 filesaver jshttps github com eligrey FileSaver js 我需
  • 使用 Python 以无密码的用户身份登录 Windows

    我这里有一个情况 使用Python 我创建了一个进程 以系统或管理员用户身份运行 并且我需要使用不同的用户名 无需密码 调用应用程序 因此 阅读下面的链接 结论是可能的 使用 Kerberos 模拟另一个没有密码的用户 但我没有找到任何用
  • Crosswalk 从 JavaScript 调用 Java 方法

    我现在正在走人行横道 当用户单击 HTML 中的按钮时 我需要调用 Java 方法 该方法可能如下所示 a href Start a 我不确定是否人行横道延长线就是我想要的 仅仅为了调用Java函数似乎就很重了 有没有更简单的方法来做到这一
  • 在 SQLite 错误中插入多行(错误代码 = 1)

    在 SQLite Android 中执行以下查询时出现错误 sDataBase execSQL query 插入联系人 ID 名字 姓氏 电话号码 电子邮件 ID 状态 值 ae0caa6a 8ff6 d63f 0253 110b20ac2
  • 如何在具有设定名称的文件夹中列出谷歌驱动器中的所有文件?

    我的驱动器中有一个文件夹 其中包含多个 客户端 文件夹 每个客户端文件夹都具有相同的结构 其中包括一个包含已完成发票 称为 已完成发票 的文件夹 我需要一种方法来遍历所有名为 Completed Invoices 的文件夹 并在 Googl
  • 将 Codeigniter 3 应用于新域名主机会导致 session_files_drive.php 出现 mkdir() 错误

    我有一个 Codeigniter 框架设置 我将其跨多个域设置作为默认起点 它给了我以下错误 当我添加全新安装的 CI3 并添加数据库信息以及以下自动加载时 情况是一样的 autoload libraries array database
  • 理解python中的执行流程

    对于 python 新手 对执行流程感到困惑 为了详细说明 我陈述以下示例 示例1 def hello print hello world python def python print testing main if name main