面向过程编程和模块

模块简介

  1、什么是模块

    一系列功能的结合体

  2、为什么要使用模块

    为了提升开放效率

  3、模块的三种来源

    1、内置的(python解释器自带能够直接导入使用的)

    2、第三方的(别人写好的发布在网上的,需要先下载好后使用)

    3、自定义的(自己写的)

  4、模块的四种表现形式

    1、使用python编写的代码(.py文件)

    2、已被编译为共享库或DLL的C或C++扩展

    3、包好一组模块的包(文件夹)

    4、使用C编写并链接到python解释器的内置模块

    注:第三种包其实就是多个py文件的集合;包里面通常会含有一个__init__.py文件

import句式

  1、格式:

    import+文件名  导入py文件模块,文件后缀一定不要加

  2、首次导入模块发生的事情(文件名以md为例)

    1、运行导入文件产生该文件的全局名称空间

    2、运行md.py文件

    3、产生md.py全局名称空间,运行md文件内代码,将产生的名字全部存档于md.py名称空间

    4、在导入文件名称空间产生一个md的名字指向md.py全局名称空间

  3、import句式导入模块之后

    1、通过模块名点的方式就可以使用到模块中所以的名字,并且肯定不会产生冲突(指名道姓)

    2、多次导入相同模块,只会执行一次

from.....import....句式

  1、运行过程

    1、先产生执行文件的全局名称空间

    2、执行模块文件,产生模块的全局名称空间

    3、将模块中执行之后产生的名字全部存档于模块名称空间中

    4、在执行文件中有一个money(举例)执行模块名称空间中的money指向的值

  2、from...import....句式导入模块之后

    1、在使用的时候直接写名字即可,但是当当前名称空间有相同名字的时候就会产生冲突,使用的就变成了当前名称空间

    2、from...import....指名道姓的导入某个名字

    3、from...import....多次导入也只会导入一次

导入模块的一些扩展用法

  1、起别名

    既可以给模块名起别名也可以给模块中某个名字起别名

  2、连续导入

    import  模块名1, 模块名2

    from 模块名1 import  名字1, 名字2, 名字3

    注意:只有当多个模块功能相似或者同属于一个系列的,可以连续导入模块;如果功能不同,并且不属于一个系列的,那么推荐分行导入

  3、通用导入 *

    from 模块名 import *  表示将模块中所以的名字全部导入*代表所有

    __all__=[ 模块名]  在被导入的模块文件中可以使用__all__指定可以被导入的名字

判断文件类型

  1、目的

    判断py文件是作为模块文件还是执行文件

  2、格式

      __name__

  3、结果

    当文件是执行文件的时候会返回__main__;如果文件是被当做模块导入则会返回文件名(模块名)

  4、if __name__ == '__main__' 当文件是运行的时候才可以运行,当时导入文件的时候只会显示模块名。

    在pycharm中直接敲main按tab键就可以自动补全if判断

循环导入

    如果在文件导入模块的时候出现了循环导入的情况,说明程序设计的不合理。在以后的编程过程中不允许出现循环导入的现象

  怎么修改(只做了解,这种错不要犯)

  1、调换顺序

    将彼此导入的句式放在代码的最后

  2、函数形式

    将导入的句式放入函数体代码,等所有的名字加载完毕之后再调用 

  

 导入模块的顺序

  1、查找顺序

    1、先从内存中查找

    2、再去内置模块中查找

    3、最后去sys.path系统路径查找(自定义模块)

    4、如果都没有就会报错

  2、当某个自定义模块查找不到的时候的解决方案

    1、自己手动将该模块所在的路径添加到sys.path中

    2、from...import...句式

      from 文件夹名称.文件夹名称 import 模块名

      from 文件夹名称.模块名称 import 名字

  注意:在给py文件命名的时候尽量不要和内置模块名发生冲突

绝对导入与相对导入

  在程序中涉及到多个文件之间导入模块的情况,一律按照执行文件所在的路径为准

  绝对导入:始终按照执行文件所在的sys.path查找模块

  相对导入:能够打破始终以执行文件为准的规则,只考虑两个文件之间的位置。相对导入只能用在模块文件中,不能在执行文件中使用。

    句点符(.)

      . 表示当前文件路径

      .. 表示上一层文件路径

 面向过程编程(理论)

  1、概念

    面向过程编程就好比设计一条产品流水线,有相应的设计思路

  例:

    写用户注册功能思路

      1、获取用户名和密码

      2、组织成固定的格式

      3、文件操作写入文件

  2、缺点

    一旦修改功能,那么需要整体改造(牵一发而动全身)

def get_info():
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    if len(username) == 0 or len(password) == 0:
        print('用户名或密码不能为空')
        return
    user_idf = {
        '1':'admin',
        '2':'user',
    }
    print(user_idf)
    choice = input('请选择您的身份>>>:').strip()
    if choice in user_idf:
        id = user_idf.get(choice)
        return deal_data(username, password,id)
    else:
        print('输入不合法')
        return

def deal_data(username,password,id):
    data = '%s|%s|%s\n'%(username,password,id)
    return save_data(data)

def save_data(data):
    with open(r'userinfo','a',encoding='utf8') as f:
        f.write(data)
    print('注册成功')


get_info()

 

 

    

posted @ 2021-11-23 15:54  那就凑个整吧  阅读(49)  评论(0编辑  收藏  举报