python--模块部分介绍和扩充

本文探讨了面向过程编程的模块化思想,通过实例说明如何利用模块和模块导入技巧提高开发效率。讲解了模块的不同来源、表现形式,以及import和from语句的使用策略,包括别名、连续导入和通用导入。还涉及了如何避免循环导入问题和解决模块查找路径问题。
摘要由CSDN通过智能技术生成

面向过程编程(理论)

即:好比设计一条产品流水线

##如:用户的注册功能:1.设计需要获取的用户name和密码,2.获取用户name和密码,3.组织成固定的格式‘name|password’等格式,4.文件操作写入文件中

# 获取用户的用户名和密码
def get_info():
    username = input('username:  ').strip()
    password = input('password:  ').strip()
    # 获取用户名和密码为空的状态
    if len(username) == 0 or len(password) == 0:
        print('用户名或密码不能为空')
        return
    # 用户选择身份,管理员或者用户两者身份
    user_id = {
        '1': ['admin','吃海鲜'],
        '2': ['user','吃米线'],
    }
    print(user_id)
#用户填完信息选择身份
    choice = input('请选择你的身份: ').strip()
    if choice in user_id:
        id = user_id.get(choice)
        return de_data(username, password, id)
    else:
        print('输入不合法')
        return


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


def file(data):
    with open(r'a.txt', 'a', encoding='utf8') as f:
        f.write(data)

    print('注册成功')


get_info()

面向过程编程的缺陷:一旦要修改功能,则会导致整体需要改造

模块介绍

什么是模块:一系列功能的集合体

为什么使用模块:提升开发效率

模块的三种来源:内置(解释器自带),第三方(别人写好的),自定义的(自己写的)

模块的四种表现形式:1.使用python编写的代码(.py),2.已被编译为共享库或dll的c或c++扩展,3.包好一组模块的包(文件夹),包里面通常会含有一个__init__.py文件,4.使用c编写并链接到python解释器的内置模块

##遇到复杂的功能可以优先考虑是否有相应的模块可以调用

import句式

第一种:import 模块(导入py文件模块时文件后缀一定不要加)

第二种:from(模块)  import(功能)

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

import  模块。首次导入模块发生的事情

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

        2.运行模块文件

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

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

        5.执行时改变不了模块中的原值

 from(模块)    import 。。。   句式,首次导入模块发生的事情

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

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

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

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

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

 

导入模块扩展用法

1.起别名

既可以给模块名其别名也可以给模块中某个名字起别名,可用于模块名太长或者不好记

import mddddddd as m(取名为m)

from  mddddddd  import name as n(取名为n)

2.连续导入

import 模块名1,模块名2

‘,’隔开模块名,可导入多个功能相似的模块或者属于同一个系列的

3.通用导入

‘*’将模块中所有的名字全部导入(*表示所有)

__all__【‘name’,‘age’,‘。。。’】指被导入的模块文件中使用all表示模块中可导入的名字

判断文件类型

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

模块文件;import。。。导入文件

执行文件:if__name__==‘main’:  read()

循环导入

最好不要出现循环导入的情况,否则会报错或无限循环,如果出现了这种情况,解决方法两个

1.一错再错:调换顺序,将彼此导入的句式放在代码的最后

2.函数形式:将导入的句式放入函数体代码,等待所有的名字加载完毕之后在调用。

模块导入的顺序

1.先从内存中查找

2.再从内置模块中查找

3.最后去sys.path系统路径中查找,如果没有查到则报错

##再给py文件命名时尽量不要与内置模块名冲突,避免查找出错

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

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

eg:import sys

sys.path.append(r'D:\py20\day18\aaaa')

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

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

from 文件夹名称。文件夹名称 import 名字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值