Python学习(八)--函数

        函数是可以调用的,它执行某种行为并且返回一个值。       
 
  • 创建函数
    def functionname( parameters ):
         "函数_文档字符串”
       function_suite
       return [expression]
        使用def语句定义一个函数,可以在函数名后面的圆括号里定义参数,但是入参是非必要的。
        return语句从函数中返回值。当然return后面也可以不跟任何值,那就是默认None。也可以有多个值,用逗号(,)隔开,最终返回的就是一个元组。
        在def语句后面加上字符串,它会作为函数的一部分进行存储,这部分称为文档字符串。通过functionname.__doc__就可以获取函数的文档字符串。所以文档字符串内容通常是对函数进行说明。
 
  • 函数参数
        关于参数有几点说明:写在def语句中函数名后面的变量通常叫做函数的形参,而调用函数时提供的值是实参。在函数内为参数赋予新值,不会改变外部变量的值。但是如果参数是列表,当两个变量同时引用一个列表时,函数内改变列表,会引起外部列表的改变。所以函数的默认参数必须指向不可变对象。如果非要使用可变对象,那么作为函数的实参之前,最好能拷贝一个副本。
关键字参数
        当函数的入参比较多时,参数的顺序比较难记。可以在调用函数时,提供参数的名字,比如:fun(par1 = xx,par2 = xxx)。当然也可以在定义函数的时候,给参数提供默认值,def fun(par,par2,par3 = default)。当参数有默认值时,调用的时候就不用提供参数了。
任意数量的参数
        def fun(*params)
        参数前的星号将所有值放置在同一个元组中。如果不提供任何元素,params就是个空元祖。这样可以实现任意数量参数的函数。但是这个只能处理普通参数,不能处理关键字参数。
        def fun(**params)
        用于接受关键字参数,即调用fun(par1 = xx,par2 =xxx),会将所有值放在一个字典里。
        从上面可以看出*和**可以收集参数。使用它们也可以执行相反的过程。比如add(*params),就相当于将params这个元组里的元素进行分配。以此类推,add(**params),就是把params这个字典进行分割。
 
  • 中高阶函数
        我们可以定义一个变量,然后给变量赋值。其实函数名是指向函数的变量,函数名和普通变量没有区别,只是指向函数。所以可以定义一个变量可以指向函数,然后对变量进行调用和对函数调用的效果是一样的。比如下面这个例子:
>>> abs
<built-in function abs>
>>> abs(-20)
20
>>> f=abs
>>> f(-20)
20
        那么高阶函数就是能接收函数做参数的函数,通过下面这个例子可以简单了解高阶函数:
>>> def add(x,y,f):
...    return f(x)+f(y)
… 
>>> add(-1,-3,abs) 
 
  • 作用域
        在函数内部声明的变量的作用域就是函数内的代码块。将函数内的变量称为局部变量。参数的工作原理类似于局部变量。如果要在某个函数内部使用全局变量,可以通过global x来声明,表示接下来使用的是全局变量。
        
 
最后讲一下函数编写的一些规范,可以提高代码的可读性:
1.函数的名称只使用小写字母和下划线
2.每个函数最好都包含注释,就是函数文档字符串。
3.在给形参指定默认值时以及调用函数中关键字实参,等号两边不要有空格。
4.定义函数时,两个函数之间最好有两个空行。 
posted @ 2017-11-14 14:14  木九九  阅读(140)  评论(0编辑  收藏  举报