zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    php的date对象与javascript的Date对象区别
    window.open的popup-only-once问题(document.cookie)
    window.open详解
    顶级窗口问题window.top
    javascript中的this用法
    问题1:javascript的函数对象问题
    javascript中this的用法
    javacsript:在函数内访问全局变量
    bzoj1934
    bzoj1433
  • 原文地址:https://www.cnblogs.com/littlesky1124/p/9000645.html
Copyright © 2011-2022 走看看