python函数

  首先我们为什么要用函数式编程

  

  我们使用函数总结了三点好处:

    代码重复利用

    可扩展性

    保持一致性

  学了函数式编程,我们以后要把逻辑和业务区分离出来,这样以来让程序变的容易扩展,当需求要添加或者改变我我们就变的容易改变。

  有了这么多了好处那我们看看怎么写函数式编程:

    定义函数用关键字 :  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')
   def func(name, age = 18):
    
    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

  

原文地址:https://www.cnblogs.com/littlesky1124/p/9000645.html