python笔记-模块

2018-06-26 142次浏览 发表评论
  • 一个abc.py的文件就是一个名字叫abc模块
  • 一个xyz.py的文件就是一个名字叫xyz模块
  • 目录就称为:包。
mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 ├─ utils.py
 └─ xyz.py
  • 每一个包(目录)下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。
  • __init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany
  • 文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utilsmycompany.web.utils

检查是否和系统模块名冲突,是在Python交互环境执行import abc,若成功则说明系统存在此模块。

# 用import导入模块
import math
print(math.sqrt(16))   # => 4

# 也可以从模块中导入个别值
from math import ceil, floor
print(ceil(3.7))       # => 4.0
print(floor(3.7))      # => 3.0

# 可以导入一个模块中所有值
# 警告:不建议这么做
from math import *

# 如此缩写模块名字
import math as m
math.sqrt(16) == m.sqrt(16)   # => True

# Python模块其实就是普通的Python文件。你可以自己写,然后导入,模块的名字就是文件的名字。

# 你可以这样列出一个模块里所有的值
import math
dir(math)

作用域

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_前缀来实现的。

  • 正常的函数和变量名是公开的(public),可以被直接引用,比如:abcx123PI等;
  • 类似_xxx__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc__abc等;

非公开函数的作用:

def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:

外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

理解Python中的if __name__ == '__main__'

通俗的理解__name__ == '__main__'假如你叫小明.py。在朋友眼中:你是小明__name__ == '小明';在你自己眼中:你是你自己__name__ == '__main__'

if __name__ == '__main__'的意思是当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

评论

随便说点,聊聊天~