首先我们为什么要用函数式编程
我们使用函数总结了三点好处:
代码重复利用
可扩展性
保持一致性
学了函数式编程,我们以后要把逻辑和业务区分离出来,这样以来让程序变的容易扩展,当需求要添加或者改变我我们就变的容易改变。
有了这么多了好处那我们看看怎么写函数式编程:
定义函数用关键字 : def
定义函数 def deom(text): deom 是函数名,text是形式参数,:冒号不能少
print(‘执行语句’)
执行函数 def(a) a 是实参
现在举个代码重复利用的例子:
没有用函数。 while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 内存占用 > 80%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 用了函数以后。把写好的函数放到循环语句里面就行了,减少了代码量。
def 发送邮件(内容) #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 while True: if cpu利用率 > 90%: 发送邮件('CPU报警') if 硬盘使用空间 > 90%: 发送邮件('硬盘报警') if 内存占用 > 80%:
def 函数名(参数): ... 函数体 ... 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,想使用就根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等... 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
因为我们想要想要这个函数的执行结果,这个执行结果会在后面的程序运行过程中需要用到。
以上要点中,比较重要有参数和返回值:
def
发送短信():
发送短信的代码...
if
发送成功:
return
True
else
:
return
False
while
True
:
# 每次执行发送短信函数,都会将返回值自动赋值给result
# 之后,可以根据result来写日志,或重发等操作
result
=
发送短信()
if
result
=
=
False
:
记录日志,短信发送失败..
答:这个问题...因为有了参数函数变的更加灵活,
# ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参 def func(name): print name # ######### 执行函数 ######### # 'zhang' 叫做函数func的实际参数,简称:实参 func('zhang')
print "%s:%s" %(name,age) # 指定参数 func('wupeiqi', 19) # 使用默认参数 func('alex') 注:默认参数需要放在参数列表最后
def func(*args) print args
# 执行方式一 func(11,33,4,4454,5) # 执行方式二 li = [11,2,2,3,3,4,54] func(*li)
def func(**kwargs):
print args # 执行方式一 func(name='wupeiqi',age=18) # 执行方式二 li = {'name':'wupeiqi', age:18, 'gender':'male'} func(**li)
def func(*args, **kwargs): print args print kwargs
作用域: 1、局部变量 局部变量:顾名思义,指在局部生效,定义在函数体内的变量只能在函数里面生效,出个这个函数体,就不能找到它,这个函数就是这个变量的作用域。 2、全局变量 有了局部变量,那就肯定有全局变量,那什么是全局变量呐?全局变量又改怎么定义呢? 全局变量:指的是在整个程序中都生效的变量,在整个代码的顶层声明。 全局变量的优先级是低于局部变量的,当函数体内没有局部变量,才会去找全局变量。但是有的同学会问了,那我需要在函数体内修改全局变量咋办呢? 改前用global先声明一下全局变量 将全局变量重新赋值 也是可以的,但是我们最好不要用以上2种情况,也就是说最好不要用global这个关键字,因为你用了,其他人调你的函数时,就乱套了,而且还不好调试,
说不定还冒着被开除的危险,所以请大家忘记它吧,只是知道有这么一个东西就行了。 小结:1、只有字符串和整数是不可以被修改的,如果修改,需要在函数里面声明global。2、但是复杂的数据类型,像列表(list)、字典(dict)、集合(set),
包括我们后面即将要学的类(class)都是可以修改的。 在子程序(函数)中定义的变量称为局部变量,在程序一开始定义的变量称为全局变量。 全局变量的作用域是整个程序,局部变量的作用域是定义该变量的子程序(函数)。 当全局变量和局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其他地方,全局变量起作用。
结论:
参数分为位置参数、关键字参数、默认参数、非固定位置参数和非固定关键字参数
位置参数之前传参,位置是不能调换的,多一个或者少一个参数都是不可以的。
函数参数位置结论 def func(name,age=18,*args,**kwargs)
得出一个结论:关键字参数是不能写在位置参数前面的。
关键字传参,可以不用考虑位置的前后问题
return 返回值,返回的是什么内容,返回给谁,内容什么都可以,返回给调用者
return 返回可以返回任意对象,和任意多个,当返回多个值是python会把多个值封装在一个元组里面病返回。
return 语句后面的语句不在执行,所以代表着函数体的结束。
如果函数体没有函数默认是返回 None