在实战webapp项目中,发现之前学习速度可能有些过快,很多知识又忘记了。所以,带着复习python的基础知识,力争一点一点吃透。
一、模块
1、在python中一个.py文件就是一个模块(Module)
一个模块编写完毕,就可以被其他地方引用,不用从头编写。
相同名字的函数和变量可以分别存在于不同的模块中。
2、比模块更高一级的组织是包(package)
mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py
mycompany是一个目录,目录里有__init__.py,abc.py,xyz.py三个.py文件。注意:必须有__init__.py这个文件的目录才是包,__init__.py可以是空文件,可以写一些初始化的python代码。__init__.py本身就是一个模块,模块名是mycompany
包里的模块名字就变成了mycompany.abc和mycompany.xyz
3、和目录类似,包也可以多层级
mycompany
├─ web
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ __init__.py
├─ abc.py
└─ xyz.py
二、使用import引入模块
1、import moduleName
导入moduleName模块,但是不会把moduleName模块中所有类和函数导入当前的命名空间中(语意表);它只是引入了模块名moduleName。你可以通过moduleName.func和moduleName.className来访问模块中定义的函数和类。
除了包含函数定义外,模块也可以包含可执行语句。这些语句一般用来初始化模块。它们仅在 第一次 被导入的地方执行一次。
2、from moduleName import className,funcName
这种语句会直接将className,funcName导入到本模块的语意表中。
>>> from fibo import fib, fib2 >>> fib(500) 1 1 2 3 5 8 13 21 34 55 89 144 233 377
fib函数就直接可以使用。
三、将模块作为脚本运行
当在命令行输入
python fibo.py <arguments>
这样的语句时,模块中的代码会作为脚本直接运行 。就像使用import fibo一样。
此时,fibo模块的__name__属性被设置为'__main__',意味这是主程序。
但是import fibo时,__name__并不是'__main'。这就意味着,如果模块中有一段代码,在命令行直接启动时想让它执行,而import时不想让它执行,就可以放在if __name__ == '__main__':判断语句的后面。
因为,在命令行直接运行时,__name__ == '__main__',在import时__name__ != '__main__'
三、某定义不会被连续import
例如:a.py中定义了class A。
b.py中使用了:from a import A
c.py又使用了import b,则在c.py中不能直接使用class A