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

  • 相关阅读:
    WPF开发经验
    权限管理系统项目心得
    《鸟哥的Linux私房菜》笔记——02. 关于Linux
    《鸟哥的Linux私房菜》笔记——01. 计算机概论
    「JavaSE 重新出发」02.02 引用数据类型
    「JavaSE 重新出发」02.01 基本数据类型
    「JavaSE 重新出发」02. 数据类型与运算符
    「JavaSE 重新出发」01. Java介绍
    cmd 与 网卡(netsh 命令)
    Python 基础总结
  • 原文地址:https://www.cnblogs.com/Lival/p/4391024.html
Copyright © 2011-2022 走看看