Skip to content

02|第一个程序

安装好 Python 后,先写一个能运行的最小程序,确认环境配置正确。

一、交互式解释器

在终端输入 python3 进入交互式环境:

bash
$ python3
Python 3.11.4 (main, Jun  9 2023, 07:23:44)
[GCC 11.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

>>> 是提示符,表示等待输入。直接输入代码并回车,会立即执行:

python
>>> print("hello world")
hello world
>>> 2 + 3
5

交互式环境适合测试短代码片段,不适合写完整程序。按 Ctrl+D(Linux/macOS)或 Ctrl+Z(Windows)退出。

二、脚本文件

把代码写进 .py 文件,可以保存、复用和版本控制。

创建 hello.py

python
print("hello world")

运行:

bash
python3 hello.py

输出:

text
hello world

三、脚本文件的标准结构

一个规范的 Python 脚本通常包含以下部分:

python
#!/usr/bin/env python3
"""这是一个示例脚本,打印问候语。"""


def main():
    """主函数,包含程序的主要逻辑。"""
    print("hello world")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

各部分的含义:

  • #!/usr/bin/env python3:shebang 行。Linux/macOS 上给文件加执行权限后,./hello.py 会按这行找到解释器
  • """...""":文档字符串(docstring),说明这个模块/函数的作用
  • def main():把主逻辑收进函数。脚本变长后,主流程和具体实现分离,更容易阅读
  • if __name__ == "__main__":判断当前文件是被直接执行还是被其他文件 import。被 import 时,这行以下的代码不会执行
  • raise SystemExit(main()):用 main() 的返回值作为进程退出码

给文件加执行权限:

bash
chmod +x hello.py
./hello.py

四、if __name__ == "__main__" 的作用

每个 Python 模块都有一个内置变量 __name__。直接运行文件时,__name__ 的值是 "__main__";被其他文件 import 时,__name__ 的值是模块名(如 "hello")。

这个机制让同一个文件既能当脚本执行,又能当模块被导入。被导入时,import 语句只执行文件顶层的定义(函数、类、变量),不会执行 if __name__ == "__main__" 块里的代码。

python
# utils.py
MESSAGE = "来自 utils 模块"

def greet():
    print(MESSAGE)

if __name__ == "__main__":
    print("utils.py 被直接执行")
python
# main.py
import utils

utils.greet()  # 输出:来自 utils 模块
# 不会输出 "utils.py 被直接执行"

五、输入与输出

print() 输出到标准输出:

python
print("hello")
print("a", "b", "c")           # 输出多个值,默认空格分隔
print("a", "b", sep="-")       # 指定分隔符:a-b
print("line1", end="")         # 不换行,默认 end="\n"

input() 从标准输入读取一行:

python
name = input("请输入名字: ")
print(f"你好, {name}")

input() 返回的是字符串。如果需要数字,要手动转换:

python
age = int(input("请输入年龄: "))

转换失败时会抛出 ValueError,后续会讲到如何处理这类异常。

记忆锚点:交互式环境用 >>> 提示符,适合测试短代码;脚本文件用 .py 后缀,保存完整程序;if __name__ == "__main__" 让文件既能执行又能被导入;input() 返回字符串,数字需要 int() 转换。