持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
import
想要使用Python源文件,只需在另一个源文件里执行import语句。以下是简单示例:
创建support.py文件,在其中定义以下函数:
def print_func(par):
print("Hello:", par)
return
创建test.py文件,导入并使用:
import support
support.print_func('hf')
from ... import
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
把上面的test.py改下
from support import print_func
print_func('hf')
或者干脆全导入:
from support import *
print_func('hf')
__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该模块自身运行时执行。
创建using_name.py:
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
执行using_name.py
(base) ➜ module git:(22-08) ✗ python3 using_name.py
程序自身在运行
导入test.py并执行:
import using_name
(base) ➜ module git:(22-08) ✗ python3 test.py
我来自另一模块
包
包是一种管理Python模块命名空间的形式,采用“点模块名称”。比如一个模块的名称是A.B,那么他表示一个包A中子模块B。
下面给出了一种可能包结构:
sound/ 顶层包
__init__.py 初始化 sound 包
formats/ 文件格式转换子包
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ 声音效果子包
__init__.py
echo.py
surround.py
reverse.py
...
filters/ filters 子包
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
目录只有包含一个叫做__init__.py的文件才会被认作是一个包。用户可以每次只导入一个包里面的特定模块,比如:
import sound.effects.echo
使用全名去访问:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
还有一种导入子模块的方法是:
from sound.effects import echo
这样就不需要冗长的前缀,可以这样:
echo.echofilter(input, output, delay=0.7, atten=4)
笔者认为这点没有java方便,直接使用文件夹的形式,如果出现同名类另外的使用全限定类名就行。go和java类似。