zoukankan      html  css  js  c++  java
  • (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)、类的实例

  • 相关阅读:
    Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
    文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets
    文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write
    嵌入式linux应用程序调试方法
    version control system:git/hg/subversion/cvs/clearcase/vss。software configruation management。代码集成CI:Cruisecontrol/hudson/buildbot
    最值得你所关注的10个C语言开源项目
    如何记录linux终端下的操作日志
    CentOS 5.5 虚拟机安装 VirtualBox 客户端增强功能
    sizeof, strlen区别
    C/C++嵌入式开发面试题
  • 原文地址:https://www.cnblogs.com/Lival/p/4391024.html
Copyright © 2011-2022 走看看