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)、类的实例

  • 相关阅读:
    测试开发进阶——spring boot——MVC——@RequestMapping 和 @GetMapping 和@PostMapping 区别
    测试开发进阶——spring boot——MVC——请求注解@RequestMapping各个属性值
    测试开发进阶——spring boot——MVC——设置请求方式——参数校验——示例
    测试开发进阶——spring boot——MVC——HttpServletRequest获取请求header、请求cookie、请求入参
    一本通1025
    mysql数据库密码修改
    异常处理总结
    [BZOJ] 书堆
    今天,当中国的老百姓已开始用手机付钱买烤红薯的时候,美国大部分老百姓还在用支票付水电费。这种看似很小的差异让中国拥有了独特的竞争力。我们的城市数据资源的积累将比世界任何一个国家都快,这给我们一个重要的机会,用比发达国家更先进的办法解决城市发展问题。
    微信小程序开发
  • 原文地址:https://www.cnblogs.com/Lival/p/4391024.html
Copyright © 2011-2022 走看看