(05)函数

-----------
更新时间:
17:34 2016-03-03 星期四
-----------
文件头通用写法
#!/usr/bin/python
#conding:utf8

■ 函数定义
    ● 定义  def 函数名(参数列表) 如 def fun(x,y..)   取的名字不要保留关键字冲突
    ● 调用 函数  fun(1,2)  函数定义了,要调用才会执行里面的代码

■ 函数参数
    ● 形参 在定义函数时,后面的参数列表,为形参  def fun(x,y..)   x,y 这些为形参
    ● 实参 在调用函数时,后面的参数列表,为实参  fun(1,2)   1,2 这些为实参
    ● 给定实参时,数目要和形式的数目一致,传什么类型没有规定
    ● 默认参数,在形参时指定,必须是从右开始指定,否则就要调整参数列表的顺序
        def machine(x=3,y) 不合法  def machine(x,y='合法')

■ 函数相关变量的作用域
    ● 局部变量 ,在函数定义的变量为局部变量,只能供给函数本身使用,外部不可见
    ● 全局变量, 除了在函数里定义的变量外,都是全局变量,可以供后面的代码段和函数使用
    ● 函数内声明为全局变量 用关键词 global ,声明后,后面的代码段都可以使用

■ 函数返回值
    ● 没有 return时,默认返回为None
    ● 函数返回值 ,是通retrun 返回语句
    ● 函数可以返回任何类型的值 ,数值、字符串,列表,....
    ● 函数调用retrun, 函数就会相应的结束,retrun 后面的代码不执行

■ 函数的其它应用
    ● 多类型传值
        ◆ 向函数传列表、元组、字典
            保证好形参和实参数目的一致,传一个列表,元组,字典都是一个整体,相当于一个实参,
            元组做为实参,给函数,要告诉是元组 在元组变量前面加 “*” 如 fun(*t)
            字典做为实参,给函数,要告诉是字典 在字典变量前面加 “**”如 fun(**d)   形参和字典的键要一 一对应
            若没有对应,就要分别取字典的键对应的值

    ● 处理多余的参数
          在定义形参数时,后台定义一个可接收的元组 如  def fun(x,*args)   这样就可以传多个值 fun(8,3,3,4)
          在定义形参数时,后台定义一个可接收的元组 和 字典 如  def fun(x,*args,**kwargs)   这样就可以传多个值 fun(8,3,name=toby)

■ lambda表达式 (构建的是一个对象)
    ● 匿名函数  (主要用在,执行脚本、一次函数、只有一行的函数)
       g=lambda x,y:x*y    定义:定义了x,y变量,做了一件 x*y 
       g(2,3)  调用
       阶乘  lambda 简化代码
       l=rang(1,6)
       reduce(lambda x,y:x*y,l)     reduce是取列表中每两个值作用于前面的函数

■ 内置函数
     ●  python 自己有许多内置函数,尽量使用,性能较高,不要自己发明轮子,自己定义,可以帮助文档查看 
         命令行可以用 help(命令) 查用法
     ●  常用函数列举: abs()-绝对值 max()-最大值 min()-最小值
                                 len()-长度   divmod()-除法结果(商和模) pow()-幂运算   round()-返回浮点数
                                 callable()-判断前面有没有定义过某过函数   isinstance()-判断对象的类型   cmp() 比较两个字符串
                                 rang()-用来快速形成一个序列  xrang()- 效率会比 rang()高   type()-得到变量的类型
                                 int()  long() float() complex() str() list() truple() hex() oct() chr() ord() -类型转换
     ● 字符串函数:str.capitalize()  str.replace()  str.split()  filter() zip() map() reduce()... 帮肋文档查看
    
* 文件入口
    if __name__=="__main__":
   
* 递归
    >>> def newsum(mylist):
    ...     if not mylist:
    ...         return 0
    ...     else:
    ...         return mylist[0]+newsum(mylist[1:])
    ...        
    >>>
    >>> newsum(range(1,6))
    Out[5]: 15
    >>> newsum(range(1,101))
    Out[6]: 5050   
   
* 函数是对象
   这样也可以多个引用
    >>> sec_newsum=newsum
    >>> sec_newsum(range(1,101))
    Out[8]: 5050
    相当于多加一个指针引用       

原文地址:https://www.cnblogs.com/toby2chen/p/5197376.html