python3 模块

  在Python中,一个.py文件就称之为一个模块(Module),包含所有你定义的函数和变量的文件。

  好处:最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。模块可以被其他地方引用。使用模块还可以避免函数名和变量名冲突。

  自己创建模块时要注意命名,不能和Python自带的模块名称冲突。模块名要遵循Python变量命名规范,不要使用中文、特殊字符;

  标准模块文件:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

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()

  第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;

  第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;

  第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;

  _name__属性来使该程序块仅在该模块自身运行时执行。每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。若是被引入,下面的代码则不运行。

  import sys:导入sys模块。

  from fibo import fib, fib2  两种导入模块的方法

  内置的函数 dir(xx) 可以找到模块内定义的所有名称。没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称:

  作用域:

  正常的函数和变量名是公开的(public),可以被直接引用,比如:abcx123PI等;

  类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,我们自己的变量一般不要用这种变量名;

  类似_xxx__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc__abc等;(只是不应该,从编程习惯上不应该引用private函数或变量。)

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

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)

 

  为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

  可以有多级目录,组成多级层次的包结构。

  若在pycharm中,导入包有问题,可能的一个问题,请参考:https://blog.csdn.net/whalefall/article/details/88317715,每一个包都做一下Mark Directory as Sources Root。

  用户可以每次只导入一个包里面的特定模块,比如:  import sound.effects.echo

  这将会导入子模块:sound.effects.echo。 他必须使用全名去访问:  sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

  还有一种导入子模块的方法是:  from sound.effects import echo

  这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用:  echo.echofilter(input, output, delay=0.7, atten=4)

  还有一种变化就是直接导入一个函数或者变量:  from sound.effects.echo import echofilter

  同样的,这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数:  echofilter(input, output, delay=0.7, atten=4)

  注意当使用 from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。

  import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。

  反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。

 

  安装第三方模块,可以使用pip: pip install Pillow

  也可以安装Anaconda,若每次要激活,参考这个:

  解决办法:

  1,在命令行输入conda info --envs后有如下提示:

  E:\python\Conda>conda info --envs

  # conda environments:

  base  *  E:\python\Conda

  2,在命令行输入conda activate +(base后面的路径),按照我的就是输入conda activate  E:\python\Conda,回车解决问题!!!

 

  __name__属性

 

#!/usr/bin/python3
# Filename: using_name.py

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

 

  说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

  说明:__name__ 与 __main__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。

 

 

 

 参考自:菜鸟python3和廖老师的python3

 

posted @ 2020-03-31 16:52  云long  阅读(156)  评论(0编辑  收藏  举报