python源码结构

在Python中,源文件通常以.py为扩展名,并且可以按照一定的结构进行组织。下面是一个典型的Python源文件的结构示例:

复制代码
 1 # -*- coding: utf-8 -*-
 2 
 3 """模块的文档字符串"""
 4 
 5 # 导入语句
 6 import module1
 7 from module2 import func1, func2
 8 from module3 import *
 9 
10 # 全局变量定义
11 GLOBAL_VAR = 10
12 
13 # 类定义
14 class MyClass:
15     """类的文档字符串"""
16     
17     # 类变量定义
18     class_var = 20
19     
20     def __init__(self, param1, param2):
21         # 实例变量定义
22         self.instance_var1 = param1
23         self.instance_var2 = param2
24     
25     # 方法定义
26     def method1(self):
27         """方法的文档字符串"""
28         # 方法内部代码
29     
30     def method2(self):
31         # 方法内部代码
32 
33 # 函数定义
34 def my_function(arg1, arg2):
35     """函数的文档字符串"""
36     # 函数内部代码
复制代码

 

上述示例展示了一个典型的Python源文件的结构,包括以下部分:

1. shebang & 文件编码声明:# -*- coding: utf-8 -*- 表示文件使用UTF-8编码。

  #/usr/bin/python3  # shebang

       # -*- coding: utf-8  # 编码声明

2. 模块文档字符串:用三重双引号或三重单引号括起来的注释,用于描述整个模块的功能和用法。

3. 导入语句:用于引入其他模块或模块中的函数、类等。

4. 全局变量定义:在模块级别定义的变量,可以在整个模块内部访问。

5. 类定义:包括类名、类的文档字符串、类变量和方法定义。

6. 方法定义:类中的函数定义,包括方法名、参数列表和方法体。

7. 函数定义:在类之外定义的函数,包括函数名、参数列表和函数体。

 

需要注意的是,上述结构仅是一种常见的组织方式,并非强制要求。在实际开发中,根据项目的规模和需求,可能会有不同的文件结构和组织方式。最重要的是保持代码的可读性和可维护性,选择适合团队和项目的结构,并遵循一致的编码风格和最佳实践。

Shebang

Shebang继承自UNIX,也有shabang、shbang的称呼,现中文称为“释伴”。在linux环境中,可用which命令(eg“which python3”命令)查找python3命令的路径,使用该路径的绝对路径。在python文件首行输入:

    #! /usr/bin/python3

    chmod +x myfile.py   # 给myfile.py 添加执行权限

    ./myfile.py           # 执行该脚本

 

使用shebang还需要了解如下知识:

  • 如果脚本文件中没有#!行,那么执行时会默认采用当前Shell去解释这个脚本(即:$SHELL环境变量)。
  • 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,就会把文件名及其参数一起作为参数传给那个解释程序去执行。
  • 如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。
  • 如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。
  • 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”。注意:#!之后的解释程序,需要写其绝对路径,并且不会自动到$PATH中寻找解释器的。
  • 使用类似于”python3 myfile.py”这样的命令来执行程序,那么,#!这一行将会被忽略掉,解释器当然是用命令行中指定的解释器。
  • 脚本文件要有可执行权限。
posted @   Allen_Hao  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示