python学习笔记day 3

文章介绍了Python中模块和包的概念,模块用于组织代码,提高可维护性,而包则是多级模块的管理方式,通过__init__.py防止命名冲突。文中还提到了如何导入和使用模块,如sys模块的argv变量,以及如何通过__name__判断模块是否作为主程序运行。此外,讨论了作用域规则,区分了公开和非公开的变量与函数。
摘要由CSDN通过智能技术生成

廖雪峰的网站https://www.liaoxuefeng.com/wiki/1016959663602400/1017454145014176

模块

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,一个.py文件就称之为一个模块(Module)

  1. 提高了代码的可维护性
  2. 还可以避免函数名和变量名冲突
    不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)

mycompany
├─ init.py
├─ abc.py
└─ xyz.py

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz

每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany
可以有多级目录,组成多级层次的包结构

使用模块
'a test module'#表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
__anthor__='michael liao'#使用__author__变量把作者写进去

import sys#导入sys模块后,我们就有了变量sys指向该模块,利用sys这个变量,就可以访问sys模块的所有功能

def test():
    args=sys.argv#sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,第一个参数永远是该.py文件的名称
                    #运行python3 hello.py获得的sys.argv就是['hello.py']
                    #运行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael']
    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()
#当在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__
#而如果在其他地方导入该hello模块时,if判断将失败
#因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试

$ python3 hello.py
Hello, world!
$ python hello.py Michael
Hello, Michael!
#即导入时,没有打印Hello, word!,因为没有执行test()函数。
#调用hello.test()时,才能打印出Hello, word!
>>> import hello
>>> hello.test()
Hello, world!
作用域

正常的函数和变量名是公开的(public),可以被直接引用,比如:abcx123
类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如__author__
类似_xxx__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc
“不应该”被直接引用,而不是“不能”,python并没有一种方法可以完全限制访问private函数或变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值