面向过程编程(理论)
即:好比设计一条产品流水线
##如:用户的注册功能: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 名字