python3(二十) module

# 在Python中,一个.py文件就称之为一个模块(Module)
# 1.最大的好处是大大提高了代码的可维护性。
# 2.可以被其他地方引用
# 3.python内置的模块和来自第三方的模块
# 4.使用模块还可以避免函数名和变量名冲突
# 5.同样,Python也有包(Package),同名不同包引用是也不会冲突。

# 每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是我们定义的包名。
# 类 似这种结构
# mypackage
#  ├─ web
#  │  ├─ __init__.py
#  │  ├─ utils.py
#  │  └─ www.py
#  ├─ __init__.py
#  ├─ abc.py
#  └─ utils.py

# 自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。
# ----------------------------------------------------------------------
# sys模块为例写一个hello 模块
# !/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '  # 模块的文档注释
__author__ = 'shaozhiqi'  # 把作者写进去

import sys  # 导入sys模块


def test():
    args = sys.argv  # argv变量,用list存储了命令行的所有参数
    # argv至少有一个元素,因为第一个参数永远是该.py文件的名称
    if len(args) == 1:
        print('Hello, world!', args[0])
    elif len(args) == 2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')


if __name__ == '__main__':  # 把一个特殊变量__name__置为__main__
    test()


# 上面两行的作用 :
# 当 .py 文件被直接运行时,if __name__ == '__main__' 之下的代码块将被运行;
# 当 .py 文件以模块形式被导入时,if __name__ == '__main__' 之下的代码块不会被运行。
# 场景:就是在当作为引入模块时我们会用文件名.test调用方法,当然不需要执行这两行。
# 执行此py文件: Hello, world! D:/workPython/pythonLearning/pyc/codeModule20.py
# ---------------------------------------------------------------------------------
# 作用域
# 1.类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,
# 比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;
# 2.普通的定义入: abc,x123,PI 是public的
# 3._xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;
# Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
# private的用法类似java,对内公开、对外隐藏。
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)

 

posted @ 2019-09-18 17:05  ~清风煮酒~  阅读(444)  评论(0编辑  收藏  举报