执行及模块文件及模块文件的查找顺序

面向过程编程

面向过程编程就好比在设计一条产品流水线
# 用户注册功能
1.获取用户名和密码
2.组织成固定的格式
3.文件操作写入文件
'''面向过程编程的缺陷在于:一旦要修改功能,那么需要整体改造(牵一发而动全身)'''
def get_info()
	username = input('username>>>').strip
  password = input('password>>>').strip
  if len(username) == 0 or len(password) == 0:
    print('密码不能是空')
  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)
  daf save_data(data):
    with open(r'a.txt', 'a', encoding='utf8') as f:
      f.write(data)
      print('注册成功)
      print(data)

模块简介

python语言
 最早起源于linux运维,胶水语言,调包侠
  
1.什么是模块?
# 模块:一系列功能的结合体,而函数是一个功能的集合体,因此模块可以看成一堆函数的集合体
  
2.为什么要用模块?
为了提升开发效率(站在巨人的肩膀)

3.模块三种来源?
1.内置的(python解释器自带能够直接导入使用)
2.第三方的(别人写好发不在网上的,需要先下载后使用)

3.自定义的(自己写的)
1.使用python编写的代码(.py文件)
2.已被编译为共享库或DLL的C或者C++扩展
3.包好一组模块的包(文件夹)
 # 包就是多个py文件(模块)的集合
  包里面通常会含有一个__init__.py文件(将鼠标放置到文件夹上会显示 parkage )
  
4.使用c编写并链接到python解释器的内置模块

import句式

# 学习模块时,一定要区分谁是导入文件谁是模块文件
import md # 导入py文件模块 文件后缀一定不要加

# (1)多次导入相同模块,只会执行一次
首次导入模块发生的事情:
  1.运行导入文件(import句式.py)产生该文件的全局名称空间
  2.运行模块文件
  3.产生模块全局名称空间,运行模块文件内代码,将产生的名字全部存档于模块的名称空间
  4.在导入文件名称空间产生一个模块的 名字 指向 模块全局名称空间
  
(2)import句式导入模块之后:
  通过模块名+点的方式就可以使用到模块中所有的名字,并且肯定不会产生冲突(模块名.(指名道姓))
  • import句式>插图(1):

  • import句式>插图(2):

form...import句式

form 模块 import money, reda1, read2
# form...import... 多次导入也只会导入一次
1.先产生执行文件的全局名称空间
2.执行模块文件 产生模块的全局名称空间
3.将模块中执行之后产生的名字全部存档于模块名称空间中
4.在执行文件中有一个money执行模块名称空间中money指向的值
(1)
'''
form...import... 指名道姓的导入某个名字
	在使用的时候直接写名字即可 但是当当前名称空间有相同名字的时候
  	就会产生冲突 使用的就变成当前名称空间
'''
  • form...import句式>插图(1)

导入模块拓展用法

1.起别名
即可以给模块名起别名也可以给模块中某个名字起别名
	    import mdddddddd as m
      from mddddddd import name as n
    
2.连续导入
import 模块名1,模块名2
# 可以连续导入多个模块,但是只有当多个模块功能相似或者同一个系列
# 如果功能不同并且不属于一个系列, 那么推荐分行导入
 import 模块名1
 import 模块名2
form 模块名1 import 名字1,名字2,名字3

3.通用导入
form 模块 import * # 将模块中所有名字全部导入(*表示所有)
    print(money)
    print(read1)
    print(read2)
    print(change)
   # __all__ = ['money', 'read1']
   # 在被导入的模块文件中可以使用__all__指定可以被导入使用的名字

判断文件类型

# 判断py文件是作为模块文件还是执行文件
print(__name__) 
当文件是执行文件的时候返回__main__
如果文件是被当作模块导入则返回文件名(模块名)

if __name__ == '__main__':
	read1()
  read2()
# 当目前文件为执行文件是才会调用if下面的函数,当目前文件是导入文件时不执行.
'''在pycharm中可以直接敲main按tab自动补全if判断'''

循环导入

"""以后我们在导入模块的时候如果出现了循环导入的情况 说明你程序设计的不合理"""
# 记住在以后的编程生涯中不允许出现循环导入的现象!!!

一错再错
	1.调换顺序
    	将彼此导入的句式放在代码的最后
    2.函数形式
    	将导入的句式放入函数体代码 等待所有的名字加载完毕之后再调用

模块导入的顺序

'''
1.先从内存中查找
2.再去内置模块中查找
3.最后去sys.path系统路径查找(自定义模块)
如果都没有找到会报错
'''
# 给py文件命名时不要和内置模块名冲突

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

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

(1)当某个自定义模块查找不到的时的解决方案(不在同一路径下)
1.手动将该模块所在路径添加到sys.path中
sys.path.append(r'/Users/macintoshhd/Desktop/pythonxiangmu/老男孩第21天/模块的查找顺序')

2.from...import...(m3)
form 模块的查找顺序 import m3
# from 文件夹名称.文件夹名称 import 模块名
# from 文件夹名称.模块名称 import 名字
  form aaa.bbb import m3
  print(m3.name)
# m3在aaa的子文件bbb中

# 或者
import sys
sys.path.append(aaa的绝对路径)
from bbb import m3
print(m3.name)
# 这样也可以在不使用第二种方法来读取到模块中文件
'''
准则:执行文件的当前文件夹名称为第一顺位
'''

模块导入的顺序>>>插图(1)

模块导入的顺序>>>插图(1)

添加文件夹的绝对路径就可以找到

溜了溜了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值