• Python学习笔记11—函数


      定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

    Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

    建立第一个函数

    /usr/bin/env Python
    #coding:utf-8
    def add_function(a,b):
        c = a+b
        print c
    if __name__=="__main__":
        add_function(2,3)

    在定义函数的时候,参数可以像前面那样,等待被赋值,也可以定义的时候就赋给一个默认值。例如

    >>> def times(x,y=2): #y的默认值为 2
    ... print "x=",x
    ... print "y=",y
    ... return x*y
    ...
    >>> times(3) #x=3,y=2
    x= 3
    y= 2

    全局变量和局部变量

    x = 2
    def funcx():
    global x #全局变量
    x = 9
    print "this x is in the funcx:-->",x funcx()
    print "--------------------------" print "this x is out of funcx:-->",x

    结果:

    this x is in the funcx:--> 9
    --------------------------
    this x is out of funcx:--> 9

    参数收集

    函数的参数的个数,当然有不确定性,函数怎么解决这个问题呢?

    #/usr/bin/env python
    #encoding=utf-8
    def func(x,*arg):
        print x #输出参数 x 的值
        result = x
        print arg #输出通过 *arg 方式得到的值
        for i in arg:
          result +=i
        return result
    
    print func(1,2,3,4,5,6,7,8,9) #赋给函数的参数个数不仅仅是 2个

    运行此代码后,得到如下结果:

    1 #这是函数体内的第一个 print,参数x得到的值是 1
    (2, 3, 4, 5, 6, 7, 8, 9) #这是函数内的第二个 print,参数 arg 得到的是一个元组
    45 #最后的计算结果

    *args 这种形式的参数接收多个值之外,还可以用 **kargs 的形式接收数值

    >>> def foo(**kargs):
    ... print kargs
    ...
    >>> foo(a=1,b=2,c=3) #注意观察这次赋值的方式和打印的结果
    {'a': 1, 'c': 3, 'b': 2}

    不知道参数到底会可能用什么样的方式传值呀,这好办,把上面的都综合起来。

    >>> def foo(x,y,z,*args,**kargs):
    ... print x
    ... print y
    ... print z
    ... print args
    ... print kargs
    ...
    >>> foo('qiwsir',2,"python")
    qiwsir
    2
    python
    ()
    {}
    >>> foo(1,2,3,4,5)
    1
    2
    3
    (4, 5)
    {}
    >>> foo(1,2,3,4,5,name="qiwsir")
  • 相关阅读:
    (转载)VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)
    (转载)VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
    (转载)VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
    (转载)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)
    Android笔记之ImageView
    Activity的四种launchMode
    Eclipse使用技巧
    ubuntu下使用MyEclipse以及MyEclipse Tomcat
    Android笔记之Json数据解析
    【转】[Android_机制]_Http和Socket连接区别
  • 原文地址:https://www.cnblogs.com/zydev/p/5852322.html
Copyright © 2020-2023  润新知