我发现这个事实很有意思,解释器似乎与python ex1.txt
一起工作正常,但它应该是 ex1.py 。这可能是什么原因?是否有关于此类行为的任何文档。 ex1.py或ex1.txt具有相同的print "hello"
,如果我有任何代码更改,这将更改。 python ex1.txt
不起作用的某些条件可能是什么。我用Google搜索并发现没什么好处。
答案 0 :(得分:7)
Python启动后应该没有区别;也就是说,解释器本身不会根据源文件的扩展名不同地处理Python源代码。
但是,.py
扩展名对import
语句具有特殊含义,该语句查找模块。模块(通常)是具有.py
扩展名的文本文件(尽管可以预编译为.pyc
)或包含名为__init__.py
的文件的目录。 (imp
模块为导入没有.py
扩展名的文件提供了一种解决方法。此外,在Python 3中,技术上不需要__init__.py
文件。)
此外,在Windows中(虽然不是在Linux中!)文件的扩展名决定了用于启动文件的程序;当首次安装Python时,您(我相信,大多数Python安装程序版本)提示您选择是否将.py
扩展名与Python文件相关联。这意味着当您双击.py
文件时,它将使用Python启动(相当于命令行中的Python <filename>.py
)。
在Linux中(实际上在任何* NIX风格的环境中,甚至是Windows上的Cygwin),文件扩展名没有这种特殊含义,即操作系统本身将特定操作与特定扩展相关联;因此,在Linux上看到用Python(或其他脚本语言)编写的具有 no 文件扩展名的脚本并不罕见,从而使外观(和行为)更像一个简单的命令。这个习惯用法在文件开头(#!/usr/bin/python
或类似)使用“shebang”符号表示应该调用Python来解释文件。因此,在* NIX风格的shell中,要创建一个用Python编写的名为foo
的新命令,只需在文件foo
中实现该命令,将#!/usr/bin/python
放在文件的开头即可,并将文件放在$PATH
上的某个位置(例如~/bin
)。
答案 1 :(得分:1)
.py
扩展名是一种惯例。实际上,您可以在任何文件上调用解释器。但是,在某些情况下,遵守惯例很重要。例如,如果你编写一个模块(你import
),那么解释器就不会“猜测”你的python源代码隐藏在.txt
文件中。它只搜索符合常规命名的文件。
答案 2 :(得分:1)
扩展更像是推荐。通常有两种类型的文件 - 二进制和ASCII。二进制文件几乎只有1和0,通常是可执行文件,但不可编辑。二进制文件包含类似.docx文件的内容,因为即使您可以在Microsoft Word中打开它(可以解码二进制内容),在记事本中打开它只会导致垃圾。 ASCII文件(如.txt和.py文件)可以通过记事本等编辑,这使我们能够在许多编辑器中编写代码或文本。这些文件和任何其他文件的扩展名只有一个目的 - 告诉您的计算机如何打开它。这就是为什么你可以设置应用程序分别打开.py和.txt文件。但是,它们的核心仍然是ASCII文件。只要python解释器(或任何编译器)可以读取该ASCII数据,它就可以运行它。扩展名仅用于指示用户和计算机的内容类型。 .py扩展还有助于Python指示用于导入的其他文件,这就是我们通常需要它用于大型程序的原因。