python模块

面向过程编程(理论)

面向过程编程就好比在设计一条产品流水线

  # 用户注册功能

  1.获取用户名和密码

  2.组织成固定的格式

  3.文件操作写入文件

"""面向过程编程的缺陷在于:一旦要修改功能 那么需要整体改造(牵一发而动全身)"""
def get_name():
      name = input('请输入用户名注册:')
    password = input('请输入密码:')
        return data_saved(name,password)
def data_saved(name,password):
      data = ('%s|%s' %(name,password))
    return data_write(data)
def data_write(data):
      with open('data.txt','a',encoding = 'utf8') as f:
          f.write(data)
        
        
def get_name():
    name = input('请输入用户名注册:')
    password = input('请输入密码:')
    if len(name) == 0 or password == 0:
        print('用户名或密码不能为空')
        return
    idef_choice = {'1': 'admin',
     '2': 'user'}
    print(idef_choice)
    idef = input('选择身份:')
    if idef in idef_choice:
        id = idef_choice.get(idef)
        return data_saved(name, password,id)
    else:
        print('输入错误')
    # return name,password

def data_saved(name, password,id):
    data = ('%s|%s|%s\n' % (name, password,id))
    return data_write(data)
    # return data

def data_write(data):
    with open('data.txt', 'a', encoding='utf8') as f:
        f.write(data)
    print('注册成功')
get_name()

模块简介

  1.什么是模块?

    一系列功能的结合体

  2.为什么要用模块?

    为了提高开发效率

  3.模块三种来源

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

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

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

  4.模块的四种表现形式

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

    2.一杯编译为共享库或DLL的C或C++扩展

    3.包好一组模块的包(文件夹),包其实就是多个py文件(模块)的集合,包里面通常会含有一个__init__.py文件

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

 

import句式

  在学习模块的时候 一定要区分谁是导入文件谁是模块文件(重要)

  import md # 导入py文件模块 文件后缀一定不要加

  md.name

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

  首次导入md模块发生的事情:

    1.运行导入文件(import句式.py)产生该文件的全局名称空间

    2.运行md.py文件

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

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

  import句式导入模块之后

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

from...import...句式

  from md import money,read,name

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

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

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

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

    4.在执行文件中有一个money执行模块名称空间中money指向的值

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

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

导入模块扩展用法

  1.起别名

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

      import dsfsaf as m

      from dsfsaf import name as n

  2.连续导入

      import 模块名1,模块名2

    可以连续导入多个模块 但是只有当多个模块功能相似或者属于同一个系列

    如果功能不同并且不属于一个系列,那么推荐分行导入

      import 模块名1

      import 模块名2

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

  3.通用导入

    from md from * # 将模块中所有的名字全部导入(*表示所有)

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

判断文件类型

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

  __name__当文件是执行文件的时候会返回__main__

  如果文件是被当做模块导入的则返回文件名(模块名)

if __name__ = '__main__':
  read()   
"""在pycharm中可以直接敲,main按tab键即可自动补全if判断"""

循环导入

  不允许出现循环导入的现象!!

  一错再错

    1.调换顺序

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

    2.函数形式

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

模块导入的顺序

  1.先从内存中查找

  2.再去内置模块中查找

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

  如果都没有查找到则报错

  以后在给py文件命名的时候尽量不要与内置模块名冲突

    import sys

    print(sys.path) # 结果中第一个元素永远是当前执行文件所在的路径

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

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

      import sys

      sys.path.append(r'绝对路径')

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

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

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

posted @ 2021-11-23 19:56  skuukzky  阅读(39)  评论(0)    收藏  举报