首页 > 技术文章 > python--模块

cznczai 2019-08-30 09:14 原文

好处

  • 好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
  • 自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

总结

模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。
创建自己的模块时,要注意:
模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。

使用模块

里面有命令行的知识点 直接看网站
url : https://www.liaoxuefeng.com/wiki/1016959663602400/1017455068170048

import sys

def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()

如果启动Python交互环境,再导入hello模块, 没有运行helloworld 如果使用func.test() 就会进行运行


运行python3 hello.py获得的sys.argv就是['hello.py'];
运行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael]。

作用域

其中if name == 'main':这句估计很多和我一样的初学者都是不求甚解。 这里作一下解释:

1:name是一个变量。前后加了爽下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。 2:Python有很多模块,而这些模块是可以独立运行的!这点不像C++和C的头文件。 3:import的时候是要执行所import的模块的。 4:name就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是main,通过if判断这样就可以执行“mian:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“mian:”后面的内容。

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

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI
类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问
类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等

  • 外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
func.py:
class Student(object):
    def __init__(self,name,score):
            self.__name = name
            self.__score = score
    def print_stu(self):
            print('姓名:%s,成绩%s'%(self.__name,self.__score))

test.py
from func import Student
wc = Student('wc',66)
wc.__name  #(报错)

默认情况下,Python中的成员变量和方法都是public的,而Python中没有类似public、private等访问修饰符控制访问权限。如果要使用私有变量需要在变量名或者方法名前加上“_”双划线。这是一种name mangling技术,将_membername替换成_classname_membername,是一种伪私有化方式。为了保证class之外访问私有变量,Python会在类的内部自动将我们定义的__spam私有变量的名字替换为_classname__spam,所以在外部访问__any的时候回提示找不到该变量。不过Python中的私有变量和私有方法仍然是可以访问的,例如:私有变量:实例.类名__变量名私有方法:实例.类名__方法名()xxx 单下划线修饰的成员变量,表示只有类实例或者子类实例可以访问,
类似于protect__xxx 双下划线修饰的成员变量,表示只有类对象自己能访问,
类似于private__xxx
系统定义名字,表示特殊方法专用的标识,如__init
(),代表类的构造方法

# func 内部自己用
class Student(object):
    def __init__(self,name,score):
            self.__name = name
            self.__score = score
    def print_stu(self):
            print('姓名:%s,成绩%s'%(self.__name,self.__score))

a = Student('w' , 66)
a.print_stu() #姓名:w,成绩66

安装第三方库

pip install XXXX 包名

推荐阅读