Python函数

全球变量 < 局部变量

传参方法:

  1. 位置传参 和 关键字传参(常用关键字传参)

函数里定义参数默认值需放在最后

错误的

Def func_name(arg=100arg1arg2arg,3):    

正确的

Def func_name(arg1arg2arg,3arg=100):


可变位置函数(所谓的可变是指传参数量可变)Def func_name(*arg):    打包-->元组可变关键字函数    Dfe func_name(**kwarg):    打包-->字典

 

可变位置传参:  解包-->func_name(*li)

#!/usr/bin/env python

 

def func_name(*args):

       print args

       func2_name(args)

       li.append(5)

def func2_name(b):

       global li        ###若不加global则会报错

       for i in range(len(li)):

                print b[i]

                li = [1,2,3,4]

 

li = [1,2,3,4,5,6,7,8,9]

 

func_name(*li)           ###解包,若不加*则函数打印出来的a为一个元素,元素为列表

 

print li



可变关键字传参:

1.

#!/usr/bin/env python

 

def func_name(**kwargs):

       For k,v in kwargs.items():
                            print k,v

 

d = {'name':'nick','age':20,'sex':'male'}

func_name(**d)          ###解包,将一个字典解包到函数里,d = kwargs

 

2. 

#!/usr/bin/env python

 

def func_name(**kwargs):

       name = kwargs['name']

       sex = kwargs['sex']

       age = None

       print name

       print sex

       if kwargs.has_key('age'):

                age = kwargs['age']

                print age

 

func_name(name='tom',sex='male',age=20)

 

混合函数:可变参数应放在不可变参数后面

错误的

def func_name(*arg,x,y):

       print x,y

       print arg

 

有副作用的函数指的是带print的函数,所以函数中尽量不出现print语句

return语句

def func_name(x,y):

       if x>y:

                return x-y

       else:

                return y-x

 

a = func_name(1832/32.0,77)   ###此处需要将函数的返回值赋给a,否则执行不会返回数值

print a

 

return返回两个值则需要两个变量来接,若只有一个变量则return返回值会打包成元组,如:

def func_name(x,y):

       if x>y:

                return x-y,x

       else:

                return y-x,y


若a = func_name(88,77),则a = (11,88)

若a,b = func_name(88,77),则a = 11,b = 88

 

递归函数:函数体内直接或间接调用自身

两个点:1、最深1000 2、有退出条件(e.g. return

#!/usr/bin/env python

 

def func_name(n):

       if n <= 1:

                return n

       return func_name(n-1)*n

a = func_name(10)

print a

 

def func_name1(n):

       ret = 1

       for i in range(1,n+1):

                ret = ret * i

       return ret

 

b = func_name1(10)

print b

两个函数都是求阶乘,但是for循环比递归函数好

 

a = func_name a = func_name()是不一样的,前者a是函数,后者是a是函数输出的值

 

#!/usr/bin/env python

 

def func_name(f):

       print 'this is func1'

       f(6,25)                ###在哪调用在哪里传参!!!

def func2_name(x,y):

       print 'this in func2'

       print x+2*y

 

func_name(func2_name)

 

高阶函数:

过滤函数filter(函数,列表)

#!/usr/bin/env python

 

li = [5,7,32,72,6,235,6,2532,632,1]

def func_name(f,l):

       li = []

       for i in l:

                if f(i):

                        li.append(i)

       return li

 

def func_name1(n):

       return (n+1)%2==0

 

a = func_name(func_name1,li)

print a

 

 

 

分布过程map(函数,列表)

#!/usr/bin/env python


li = [5,7,32,72,6,235,6,2532,632,1]


def func_name2(f,l):

       li2 = []

       for i in l:

                li2.append(f(i))

       return li2

 

def func_name3(n):

       return n*2+1

 

b = func_name2(func_name3,li)

print b

 

总结过程reduce(函数,列表)

#!/usr/bin/env python


def func_name(x,y):  
        return x+y  
sum=reduce(func_name,(1,2,3,4,5,6,7))  
        print sum


另外可以使用lambda表达式


sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))  
        print sum