zoukankan      html  css  js  c++  java
  • python 模块

    要先导入模块,才能调用用模块中定义的函数(才会有该模块的代码提示)。

    import  模块   #导入一个模块
    
    import  模块1,模块2,....    #同时导入多个模块
    
    from  模块  import  部分   #导入一部分
    
    from 模块  import  部分1,部分2,部分3....     #导入一个模块的多个部分
    
    from  模块  import  *    #导入整个模块

    以上的 模块 均可换为 模块.子模块 ,表示只导入子模块|从子模块中导入。

    导入之后就可以通过   模块名.方法名()   调用模块中的函数了。

    不管导入一个相同模块多少次,只会在第一次时导入。

    比如写十行 import math ,只有第一个 import math 会导入math模块,避免了重复导入模块。

    dir()函数

    import math
    print(dir(math))  
    
    """
    dir(模块名)    #列出该模块所有的成员变量、方法。需要先导入对应的模块。以字符串列表的形式返回。dir()是python的内置函数。
    """

     

    一个python文件(.py)就是一个python模块,一个模块中可以定义多个类,定义多个方法,可以有可执行代码。

    新建一个python文件:module1.py

    print("module start")  #可执行代码
    
    class Test:  #定义类
        def out(self):
            print("test class")
    
    print("module1 running")  #可执行代码
    
    def module1_test():  #定义方法
        print("test function")
    
    print("module1 over")  #可执行代码

    一个模块有2个默认属性:__main__,__name__

    __main__

    __main__即这个模块中所有的可执行代码。

    导入一个模块时,会自动执行这个模块的__main__部分:

    新建python文件module2.py

    import module1

    执行module2.py,结果如下:

    module start
    module1 running
    module1 over

    导入一个模块时,会自动执行这个模块的__main__部分(所有可执行代码)。

    所以我们常常在__main__中做一些这个模块的初始化操作,习惯把这些代码放在文件开头。

    __name__

    如果是在模块的类中、函数中,__name__表示当前执行的python文件的文件名(不带后缀.py)。

    如果是在模块的可执行代码(__main__)中,__name__表示当前的模块(.py文件)是主动执行的,还是被调用的。如果__name__的值是"__main__则表示当前模块(.py文件)是主动执行的。

    module1.py如下:

    if __name__=="__main__":
        print("主动调用")
    else:
        print("被动调用")
    
    class Test:  #定义类
        def out(self):
            print("test class")
    
    def module1_test():  #定义方法
        print(__name__)  #在模块的类、方法中使用
        print("test function")

    module2.py如下:

    import module1
    module1.module1_test()

    执行module1.py:

    主动调用

    执行module2.py:

    被动调用 
    module1
    test function

    有时候我们需要在主动执行时做一种操作,在被调用时做不同的操作,就可以这样来实现:

    if __name__=="__main__":
        #主动调用时做的操作
    else:
        #被动调用时做的操作

     

    包相当于一个命名空间,各个包中的标识符是独立的,互不干扰。

    一个包中可以有多个模块(.py文件),也可以有多个子包。

    一个包(包括子包),都要有__init__.py文件,这是这个包的索引文件(目录文件),相当于书的索引、目录,标识这本书(这个模块)有哪些章节(python文件|模块)。

    __init__.py文件有一个属性__all__,即这个包的索引、目录,我们 import 包 或者 from 包 import * 时(包可以看做一个大模块),python解释器会找到这个包的__init__.py中的__all__属性,根据其属性值导入这个包中的模块。

    比如包school中有3个py文件(模块):student.py、teacher.py、leader.py。

    __init__.py文件:

    __all__=["student","teacher"]   #字符串列表,py文件名(不带后缀)

    我们 import school 或 from school import * 导入整个包时,只会导入student、teacher这2个py文件,不会全部导入。

    一般__init__.py文件是空的,这时默认__all__的值是包下所有py文件(除去__init__.py)的字符串列表,所以会全部导入包下的py文件(模块)。

    习惯把包中的入口文件(我们要执行的py文件,程序入口,相当于c/c++、java中的main()函数),命名为__main__.py

    import的具体用法

    1、不使用包

    • 导入整个模块(py文件): import py文件名  或 from py文件名 import * 
    • 导入py文件中的某个类: from py文件名 import 类名 

    调用函数: py文件名.函数名(参数表) 

    2、使用包,不使用子模块

    • 导入整个模块(py文件): import 包名.py文件名  或 from 包名.py文件名 import * 
    • 导入py文件中的某个类: from 包名.py文件名 import 类名 

    调用函数: 包名.py文件名.函数名(参数表) 

    使用子包时,以 包名.子包 作为包名即可。

  • 相关阅读:
    收集一些关于前端的网站(持续更新)
    关于表单设计(登录)的几点感悟
    css样式表中的样式覆盖顺序(转)
    UI设计常用网站(随时更新)
    关于ps安装遇到的问题解决(转载整理)
    【工作记录】解决溢出div自适应的高度问题
    Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource. 报错处理
    [css]img垂直居中的方法
    iOS学习第三天杂记
    iOS学习第二天杂记--UI
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11300222.html
Copyright © 2011-2022 走看看