• 函数的参数


      一、形参和实参

      函数定义过程中的参数叫做形参(parameter),因为它只是一个形式,表示占据一个参数位置。

      函数调用过程中传递进来的值就做实参(argument),因为它是具体的参数值。

    >>> def func(name):#此处的"name"就是形参
    	print(name)
    
    >>> func('Ginson')#此处的“Ginson”就是实参
    

      

      二、函数文档

      函数文档是在定义函数时,写在函数体之前的文字,这段文字不会跟函数以其被保存,但在函数被调用时不被打印。主要作用是对函数功能加以说明,使代码更易维护。

    >>> def func1(name):
    	'此函数的作用是打印参数'
    	print(name)
    
    >>> func1('Christina')
    Christina            #看,此处函数文档并未被打印
    
    >>> func1.__doc__
    '此函数的作用是打印参数'        #可调用函数的属性来显示函数文档,doc前后为双下横线
    

      PS:help(函数名称) 也可以显示函数文档,并且排版更易阅读

      三、关键字参数

    >>> def fun2(name,age):
    	print(name+'今年'+age+'岁')
    
    >>> func2('Ginson','18')
    Ginson今年18岁
    
    >>> func2('18','Ginson')
    18今年Ginson岁        #函数默认是按顺序匹配实参与形参的
    
    >>> func2(age='18',name='Ginson')
    Ginson今年18岁        #当参数过多时,可以直接用关键字参数来告诉函数,哪个实参对应哪个形参

      

      四、默认参数

      默认参数是定义了默认值的参数 

    >>> def func3(name='Ginson',age='18'):
    	print(name+'今年'+age+'岁')        #定义函数时定义默认参数值
    
    >>> func3()        #调用函数时如果参数为空则函数使用默认参数
    Ginson今年18岁
    
    >>> func3('Christina','16')        #如果给了参数则使用参数值
    Christina今年16岁
    

      注意,默认参数不能放在必选参数前面,否则函数在调用参数时会产生歧义,比如下面这个例子

    >>> def func5(a,b=0,c):
    	return 0
    #假如有函数如上(正常情况下是没办法这样定义函数的,解释器会报错)
    
    >>>func5(1,2)
    #当我调用函数并给出2个参数时,python怎么判断1、2对应a b c中哪个参数呢?

      五、收集参数

      收集参数就是在定义参数时,给参数名字前加上*号,表示这个参数为收集参数。收集参数的值会用一个元组打包起来。

    >>> def func4(*params):
    	print('参数长度为:',len(params));
    	print('第二个参数为:',params[1]);
    
    >>> func4(1,'字符串',3.1415)
    参数长度为: 3
    第二个参数为: 字符串
    

      注意,如果函数中除了收集参数还有其他参数,调用函数时需要用关键字参数来给其他参数传递值,否则就会出错。

    >>> def func4(*params,exp):
    	print('参数长度为:',len(params),exp);
    	print('第二个参数为:',params[1]);
    
    >>> func4(1,'字符串',3.1415)
    Traceback (most recent call last):
      File "<pyshell#42>", line 1, in <module>
        func4(1,'字符串',3.1415)
    TypeError: func4() missing 1 required keyword-only argument: 'exp'
    
    >>> func4(1,'字符串',3.1415,exp='啦啦啦')
    参数长度为: 3 啦啦啦
    第二个参数为: 字符串
    

      

     ###更新 2016-08-04 22:47:19###

      看廖雪峰大大的教程发现,还有一种收集参数使用两个**号表示的,这种从意义上来说应该是关键词参数的收集参数,这种参数的值会作为一个dict储存起来

    #函数person除了必选参数name和age外,还接受收集参数kw
    def person(name, age, **kw):
        print('name:', name, 'age:', age, 'other:', kw)
    
    #在调用该函数时,可以只传入必选参数:
    >>> person('Michael', 30)
    name: Michael age: 30 other: {}
    
    #也可以传入任意个数的关键字参数,传入时要指定参数名称和值,传入后数据会作为一个dict储存起来:
    >>> person('Bob', 35, city='Beijing')
    name: Bob age: 35 other: {'city': 'Beijing'}
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    

      

      还有一种说法时位置参数,这种实际上是根据传入值的方式来称呼的。

    >>> def a(x,n):
        return x,n
    
    >>> a(1,2)
    (1, 2)
    >>> a(n=1,x=2)
    (2, 1)

      比如上面这个函数,传入值时如果没有指明参数名,那就会按照定义函数时参数的顺序来赋值,1赋给x,2赋给n,这种情况下这两个参数就叫位置参数。

      但是如果赋值时指定了参数名,那顺序就无所谓了。

    ###更新 2016-08-06 ###

    关键词可变参数和命名关键词参数,之前看的鱼c教程跟廖雪峰的教程叫法不一样,搞得我开始有点蒙,总是分不清。

    参数这一章看了3遍总算能理解了,但我估计之后还会出现搞不清的状况,所以最好再看几遍。

    位置参数好理解

    默认参数也OK一般的关键词参数OK

    可变参数,需要注意传入参数的方式

    命名关键字参数同样要注意传入参数的方式

    PS:有疑惑时再多看看这一章评论中的实例http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000?t=1470492809400#0

  • 相关阅读:
    Stl源码剖析读书笔记之Alloc细节
    Lua热更系统
    Linux C++线程池
    linux sort,uniq,cut,wc.
    (转)Linux grep
    用LogParser分析IIS请求压力
    (转)MySQL主从复制的常见拓扑、原理分析以及如何提高主从复制的效率总
    AIS相关资料
    python学习笔记
    (转)MySQL InnoDB修复笔记
  • 原文地址:https://www.cnblogs.com/ginsonwang/p/5164781.html
Copyright © 2020-2023  润新知