• (Python) 函数、匿名函数


    本节将学习如何用Python定义函数,调用函数,以及学习匿名函数的使用


    1.定义函数


    Python中定义函数用关键字def,如下例所示,testFun为函数名

    def testFun():

           print "hello world"


    2.函数参数


    一个函数可以有0个或多个形式参数:

    def testAdd(x,y):

           print x+y

    函数的形式参数值可以初始化,使用了初始值的参数,在调用的时候可以不需要指定该参数。

    def testSum(z,x=1,y=0):

           print x+y+z

    调用函数:

    testSum(3) #   将打印出:4

    testSum(10,y=1) # 将打印出:12

    testSum(y=1,x=2,z=10) #将打印出:13

    注意:定义函数时,没有初始化的形式参数必须放在初始化形式参数的前面,否则会报错

            调用函数时,必须指定未初始化的参数,且参数的顺序要与函数定义的参数顺序一致(除非调用时指定了参数名)


    3.函数返回值


    Python函数可以通过return语句返回函数值,如果没有return语句或者return语句后什么都没有,函数将返回:None

     def testSub(x,y):

            return x-y

    调用函数:

     x=testSub(10,2)
    print x   #将打印出:8


    4.字典和元组形式的函数参数


    Python函数的形式参数个数有时候不确定,这时候,我们可以使用*args或**args的形式参数。*args以元组的形式接收参数,而**args以字典的形式接收参数,当两者都存在时,定义函数时,*args必须定义在**args前面

    字典形参(**args)例子:

    def testDict(a,**b):

           print 'a is:',a

           print 'b is:',b

    调用函数方法一:

    tict={'x':1,'y':2,'z':3}
    testDict(10,**tict)

    调用函数方法二:

    testDict(10,x=1,y=2,z=3)

    输出结果:

    >>>
    a is: 10
    b is: {'y': 2, 'x': 1, 'z': 3}

    元组形参(*args)例子:

    def testTuple(a,*b):

           print 'a is :' ,a

           print b

    调用函数方法一:

    tup=('a',1,2,'b')
    testTuple(1,*tup)

    调用函数方法二:

    testTuple(1,'a',1,2,'b')

    输出结果:

    >>>

    a is : 1

    ('a', 1, 2, 'b')


    5.匿名函数


    Python可以用关键字lambda定义一个匿名函数,当需要一个函数类型的对象时,可以创建一个匿名函数来实现

    def testLambda(x):

           return lambda x:x+y     #这里将返回一个函数对象

    函数调用:

    f=testLambda(10)  #创建了一个函数对象:f
    print f(5)        #将会打印出:15


    6.要点记录


    当多次调用一个具有初始化参数的函数时,该参数只会在第一次调用时被初始化一次。 这使得当形式参数为可变对象,如:列表、字典或者类的实例时,其结果可能和我们预期的不一样:

    def testParam(x=[]):

          x.append(10)

          print x

    多次调用函数(可能我们希望调用函数的结果是:都打印出列表[10]):

    testParam()
    testParam()
    testParam()
    testParam()

    实际输出结果:

    >>>
    [10]
    [10, 10]
    [10, 10, 10]
    [10, 10, 10, 10]

    当形式参数为不可变对象时,又是怎样的情况呢?我们再观察另一个例子:

    def testParam(x=2):

           x=x+2

           print x

    调用函数:

    testParam()
    testParam()
    testParam()
    testParam()

    实际输出结果:

    >>>
    4
    4
    4
    4


    备注:

    python中,万物皆对象。

    python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址。

    不可变对象(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)

    可变对象(mutable):字典型(dictionary)、列表型(list)、类的实例

  • 相关阅读:
    尖峰冲击测试(spike Testing)
    mysql返回记录的ROWNUM(转)
    SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
    JUnit编写单元测试代码注意点小结
    Linux下Tomcat的启动、关闭、杀死进程
    linux下oracle11g R2的启动与关闭监听、数据库
    linux下使用yum安装mysql详解
    VC++ 实现文件与应用程序关联
    C++ 去掉字符串首尾的 x20 字符
    VC++ 线程同步 总结
  • 原文地址:https://www.cnblogs.com/Lival/p/4391024.html
Copyright © 2020-2023  润新知