面向过程:根据业务逻辑从上到下写垒代码
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
函数作用是你的程序有良好的扩展性、复用性。
同样的功能要是用3次以上的话就建议使用函数。
标注:不能死记,
函数可以理解为一个一个的功能块,你把一个大的功能拆分成一块一块的,用某项功能的时候就去调用某个功能块即可!
函数可以理解为:乐高积木,给你一块一块的,你可以用这些积木块组成你想要的任何,功能!
函数可以调用函数!主函数的作用就是把函数进行串联、调用!函数本身是不能自己执行的如果你不调用就永不执行!
一、背景
在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下
上面的代码是就面向过程的编程,但是如果报警多了的话成百的代码需要添加如何操作呢?复制粘贴那会死人的!在看下下面的代码:
第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别:
面向过程:更具需求一行一行垒代码!逻辑乱、并切代码重复、不易修改重用性差!
面向对象:对函数进行分类和封装,让开发“更快更好更强...”
二、函数式编程
函数式编程最重要的是增强代码的重用性和可读性:
函数的定义主要有如下要点:
def:表示函数的关键字
函数名:函数的名称,日后根据函数名调用函数
函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
参数:为函数体提供数据
返回值:当函数执行完毕后,可以给调用者返回数据。
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
2、参数
为什么要有参数?看下下面的例子:
如果不定义参数,用函数的话:(每个有相同功能的都写个函数,说好的代码简化呢?
使用函数:(代码明显少了很多,把重复的内用改为参数调用!)
函数的有三中不同的参数:
普通参数
默认参数
动态参数
普通参数:
但是普通参数有个问题!你在定义参数的时候定义了几个参数,你在调用的时候必须给他几个参数否则就报错!
默认参数:
在你没有给他指定参数的时候他就会使用默认的参数!
动态参数:
动态参数顾名思义就是可以动态的去扩展函数参数的数量!
例子:1 (多个单个变量,整合成元组)
例子:2(整合为字典变量)
例子:3(整合了*args,**args)
扩展:发邮件实例
import
smtplib
内置函数:(就是python把各个模块中常用的一些方法给拿出来方便使用)
常用的记住之后,要知道怎么去查:
看下面的例子:
在看下面的例子:
总结:函数的作用域就是在函数里定义的变量不能被外面使用!但是外部全局定义的全局变量在函数内是可以使用的。
举个例子来说:你在房子里可以看到屋内的东西和房子歪的东西,但是你在房子外面就只能看到房子外的东西不能看到房子内的东西!
原因防止在函数调用的时候防止变量冲突!
问题:我在外面定义的全局变量在函数内可以改他吗? #看下面的例子:
但我就是想在函数里改变全局变量是否可以呢?可以!
return 一般写在函数的末尾,一般你想看函数的执行结果!然后判断后面的程序。看下面的例子
操作文件时,一般需要经历如下步骤:
打开文件
操作文件
一、打开文件
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
打开文件的模式有:
r,只读模式(默认)。
w,只写模式。【不可读;不存在则创建;存在则删除内容;】
a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
r+,可读写文件。【可读;可写;可追加】
w+,无意义
a+,同a
"u"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
ru
r+u
"b"表示处理二进制文件(如:ftp发送上传iso镜像文件,linux可忽略,windows处理二进制文件时需标注)
rb
wb
ab
二、操作
三、with方法
为了避免打开文件后忘记关闭,可以通过管理上下文,即:(建议使用此方法打开文件)
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
例子:比如要修改nginx.conf 文件然后还的回滚怎么做?