面向过程编程+模块&导入
面向过程编程+模块&导入
一、面向过程编程(理论+简单代码)
面向过程编程就好比在设计一条产品流水线
首先我们来认识下,什么是面向过程?如果咬文嚼字的话可以这样来理解,面向过程就是面向解决问题的过程进行编程。仔细思考一下,我们在学习和工作中,当我们去实现某项功能
或完成某项任务时,是不是会不自觉的按部就班的罗列出我们要做的事情?(如果没有,建议以后试着步骤化解决问题)。而当我们按着我们罗列的步骤去解决问题时,实质上就是按
照面向过程的思想去解决问题。我们罗列的步骤就是过程,按照步骤解决问题就是面向过程。
传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化!
实现步骤如下:
- 将要实现的功能描述为一个从开始到结束按部就班的连续的步骤(过程);
- 依次逐步完成这些步骤,如果某一步的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结束得到想要的结果;
- 程序的主体是函数,一个函数就是一个封装起来的模块,可以实现一定的功能,各个子步骤往往就是通过各个函数来完成的,从而实现代码的重用和模块化编程!


1 # 用户注册功能
2 # 1.获取用户名和密码
3 # 2.组织成固定的格式
4 # 3.文件操作写入文件
5
6
7 def get_into():
8 # 1.获取用户输入信息
9 username = input('输入用户名:').strip()
10 password = input('请输入密码:').strip()
11 if username == None and password == None:
12 print('输入错误,请重新输入')
13 return
14 # 2.输入对应的账户等级
15 user_level = {
16 '1':'user',
17 '2':'admin'
18 }
19 choice_level = input('输入账户等级:').strip()
20 if choice_level in user_level:
21 level_name = user_level.get(choice_level)
22 dell_data(username,password,level_name)
23 else:
24 print('输入错误')
25 return
26
27
28 def dell_data(username,password,level_name):
29 data = f'{username}|{password}|{level_name}\n'
30 login_data(data)
31
32 def login_data(data):
33 with open(r'data.txt', 'a', encoding='utf8') as f:
34 f.write(data)
35 print('写入成功')
36
37 get_into()
面向过程编程
缺陷: 面向过程编程的缺陷在于:一旦要修改功能 那么需要整体改造(牵一发而动全身)
二、模块简介
python语言最早起源于linux运维、胶水语言、调包侠(贬义词>>>褒义词)
模块实际上就是一系列功能的结合体,模块最大的作用就是提高开发效率(站在巨人肩膀上)
2.1 模块三种来源
1.内置的(python解释器自带能够直接导入使用)
2.第三方的(别人写好的发布在网上的 需要先下载后使用)
3.自定义的(自己写的)
2.2 模块的四种表现形式
1 使用python编写的代码(.py文件)
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包(文件夹)
# 包其实就是多个py文件(模块)的集合
包里面通常会含有一个__init__.py文件
4 使用C编写并链接到python解释器的内置模块
PS:遇到复杂的功能 优先考虑是否有相应的模块可以调用
三、import句式
首次导入md模块发生的事情
1 1.运行导入文件(import句式.py)产生该文件的全局名称空间
2 2.运行md.py文件
3 3.产生md.py全局名称空间 运行md文件内代码 将产生的名字全部存档于md.py名称空间
4 4.在导入文件名称空间产生一个md的名字指向md.py全局名称空间
四、from...import...句式
from...import...多次导入也只会导入一次
1.先产生执行文件的全局名称空间
2.执行模块文件 产生模块的全局名称空间
3.将模块中执行之后产生的名字全部存档于模块名称空间中
4.在执行文件中有一个money执行模块名称空间中money指向的值
五、导入模块扩展用法
1.起别名
既可以给模块名起别名,也可以给模块中某个名字起别名。
import mdddddddd as m
from mddddddd import name as n
2.连续导入
import 模块名1,模块名2
# 可以连续导入多个模块 但是只有当多个模块功能相似或者属于同一个系列
# 如果功能不同并且不属于一个系列 那么推荐分行导入
import 模块名1
import 模块名2
from 模块名1 import 名字1,名字2,名字3
3.通用导入
六、判断文件类型
# 判断py文件是作为模块文件还是执行文件
__name__当文件是执行文件的时候会返回__main__
如果文件是被当做模块导入则返回文件名(模块名) if __name__ == '__main__':
read1()
"""在pycharm中可以直接敲 main按tab键即可自动补全if判断"""
七、循环导入
不允许出现循环导入的现象
不允许出现循环导入的现象
不允许出现循环导入的现象 >>>重说三
八、模块导入的顺序
1.先从内存中查找
2.再去内置模块中查找
3.最后去sys.path系统路径查找(自定义模块) 如果都没有查找到则报错
PS:给py文件名命名的时候尽量不要和模块名重名,后面调用时会很恶心。
1 import sys
2 print(sys.path) # 结果中第一个元素永远是当前执行文件所在的路径
3
4
5 当某个自定义模块查找不到的时候解决方案
6 1.自己手动将该模块所在的路径添加到sys.path中
7 import sys
8 sys.path.append(r'D:\py20\day18\aaa')
9 2.from...import...句式
10 from 文件夹名称.文件夹名称 import 模块名
11 from 文件夹名称.模块名称 import 名字
九、绝对导入与相对导入
在程序中涉及到多个文件之间导入模块的情况 一律按照执行文件所在的路径为准
绝对导入:始终按照执行文件所在的sys.path查找模块
1. 使用上文提到的sys.path.append( r ' 路径 ' )
2. 使用最常用的句式:from 文件名.模块名 import 模块名 例如: from yyds import my_number
PS : 注意“import” 后面只是功能名字,不要加后缀,函数也不能加括号()
相对导入:句点符(.) 不建议使用相对导入功能
. 一个点表示当前文件路径
..两个点表示上一层文件路径
相对导入方法,能够打破始终以执行文件为准的规则,只考虑两个文件之间的位置
相对导入只能用在模块文件中 不能在执行文件中使用
面向过程编程+模块&导入的更多相关文章
- 一个有趣的小例子,带你入门协程模块-asyncio
一个有趣的小例子,带你入门协程模块-asyncio 上篇文章写了关于yield from的用法,简单的了解异步模式,[https://www.cnblogs.com/c-x-a/p/10106031. ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- 面向过程编程(OPP) 和面向对象编程(OOP)的关系
面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...
- js【面向过程编程】、好、 【init()、 GetData()、 bindData()、bindDom、 bindEvent()、buyProduct()、AddProductToCart()】*****************
1. 一般页面开发方式 [可读性差.可维护性差]------初级开发工程师 一般页面编写方法 var name = 'iphone8' var description = '手机中的战斗机 ' var ...
- 面向过程编程&面向对象编程
面向过程编程 Procedure Oriented Programming C语言是面向过程编程的,面向过程编程主要使用顺序.条件选择.循环三种基本结构来编写程序. 顺序:按照时间轴顺序完成每个处理: ...
- Go项目结构和模块导入
Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...
- python 模块导入
1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导 ...
随机推荐
- [Docker] 制作并运行 Nginx 镜像
环境 操作系统(cat /etc/redhat-release):CentOS Linux release 7.6.1810 (Core) Docker:18.09.6 文件 Dockerfile F ...
- Nginx 基础入门
目录 Nginx 基础入门 1.Nginx简介 1.1.相关名词解释 2.Nginx优势 3.Nginx部署 4.Nginx配置文件 5.Nginx模块 6.Nginx配置文件 6.1.Locatio ...
- AI系统——机器学习和深度学习算法流程
终于考上人工智能的研究僧啦,不知道机器学习和深度学习有啥区别,感觉一切都是深度学习 挖槽,听说学长已经调了10个月的参数准备发有2000亿参数的T9开天霹雳模型,我要调参发T10准备拿个Best Pa ...
- 网络协议学习笔记(六)http和https
概述 之前讲解了传输层的相关知识,现在讲解一下关于应用层的知识,主要是大家所熟悉的http和https,这2中是咱们最熟悉的协议了,但是也是最不熟悉的协议. HTTP协议:看个新闻原来这么麻烦 HTT ...
- Android官方文档翻译 十六 4.Managing the Activity Lifecycle
Managing the Activity Lifecycle 管理activity的生命周期 Dependencies and prerequisites 依赖关系和先决条件 How to crea ...
- windos 安装 redis 启动闪退
本来想在linux上安装redis的,后来觉得也没必要,主要是了解使用方法,和原理,在什么平台上安装都是大同小异的 接下来简单描述下碰到的小问题:闪退和启动失败 究其原因就是端口被占用了,但是自己并没 ...
- 【linux】Ubuntu20.04使用apt下载和卸载openJDK
Ubuntu20.04使用apt下载和卸载openJDK 前言 由于最近电脑装了ubuntu和win双系统,想再ubuntu上学习.在成功配置完系统之后,开始了配学习环境的旅程.... 这次的是使用u ...
- 【记录一个问题】运算迁移到gpu后的计时问题
我把部分计算迁移到GPU后,发现以帧率计算的程序,帧率下降:但是看各个函数的时间,又比之前减少了. 很奇怪,既然各个函数的时间减少,为什么帧率反而下降? 原来计算帧率使用了 gettimeofday( ...
- gin框架中HTTP请求和参数的解析
1. 方法一: 通用的处理方法---Handle package main import ( "fmt" "github.com/gin-gonic/gin" ...
- 详解ElasticAPM实现微服务的链路追踪(NET)
前言 Elastic APM实现链路追踪,首先要引用开源的APMAgent(APM代理),然后将监控的信息发送到APMServer,然后在转存入ElasticSearch,最后有Kibana展示:具体 ...