细说python函数参数


python的函数参数类型比较丰富,而且用法相对比较复杂,今天我们介绍几种简单常用的。


1、位置参数

位置参数最简单了,就是按照位置关系一一对应就好了,也是我们最最常用的,但是要注意的是各个参数必须按顺序对应,不多说,看下面这段代码就好了。


#位置参数,严格按照参数的顺序来读取 def locationParams(m,n):     print('第一个参数为:'+m)
    print('第二个参数为:'+n)

locationParams('源码来自公众号','谭某人') 

第一个参数为:源码来自公众号
第二个参数为:谭某人 



2、默认参数

默认参数及在函数的定义的时候就给了个默认值,在函数调用的时候可以不传这个默认参数,比如我们要计算 m-n 之间的正整数之和,我们可以分别给定 m 和 n 两个默认值 1 和 100,这样我们再调用该函数的时候即使不传任何参数,该函数也会使用默认值来计算 1-100 之间的正整数之和。

在使用默认参数的时候要特别注意的一点是,默认参数必须要指向不可变对象,比如数组、字典这些都是可变对象,是不能被用作默认参数的,至于为什么,这里不细说了,大家先记住就好,看下面这个例子。


#默认参数,注意不能使用list或dict等作为默认参数 def defaultParams(m=1,n=100):     sum = 0     for i in range(m,n+1):
        sum += i
    print(sum)
    return sum #如果使用list数组来作为默认参数,多次调用函数的返回值会发生变化,在使用过程要特别注意 def defaultParamsTemp(list=[]):     list.append(9)
    print(list)
    return list

defaultParams(1,3)
defaultParamsTemp()
defaultParamsTemp()
defaultParamsTemp() 

6 [9]
[99]
[999] 



3、可变参数

可变参数是指参数的个数是可变化的,可以是 0 个,可以是 1 个,也可以是多个,可变参数在定义的时候用符号 * 表示,而且在函数被调用的时候参数会被组装成一个 tuple (类似 list 数组的一种基本数据类型),比如我们要实现一个计算多个数字的平方和,多个数字即可以被当成一个可变参数传过去,具体看下面的代码。


#可变参数 def variableParams(*params):     print(params) #可变参数会被组装成一个tuple     sum = 0     for i in params:
        sum += i*i
    print(sum)
    return sum

list = [2,4]
variableParams(2,4)
variableParams(list[0],list[1]) #如果已经存在了一个list数组,我们可以使用数组中单个元素作为可变参数传入 variableParams(*list) #为了简化上面的参数调用方式,可以使用*来把参数当做可变参数传入 

(24) 20 (24) 20 (24) 20 


4、关键字参数

关键字参数和可变参数类似,参数的个数都是可变的,所以也常被称作可变关键字参数,但是和可变参数的区别在于关键字参数在调用的时候会被组装成一个字典 dict ,而且参数是带参数名的,关键字参数在定义的时候用两个符号 ** 表示,和可变参数差不多,看下下面的具体代码就行。


#关键字参数 def keyWordParams(**params):     print(params) #关键字参数会被组装成一个字典dict    dict = {'a':6,'b':3}
keyWordParams(a=6,b=3)
keyWordParams(**dict) #如果已经存在了一个dict,可以使用**来把参数当做关键字参数传入 

{'a'6'b'3}
{'a'6'b'3} 


5、其实还有一种命名关键字参数,由于用起来稍微复杂些,这里暂且不做介绍了,有兴趣的可以自行去了解下。


既然有这么多种参数类型,那么当这些参数被混合使用的时候是怎么的呢?


首先记住一个大原则,就是参数的顺序原则:位置参数、默认参数、可变参数、命名关键字参数、关键字参数,在定义函数的时候一定要严格按照这个顺序来定义函数参数,否则都不能 python 正确解析,再一个就是定义函数的时候尽量避免多个参数类型混合使用,这样对函数的调用可读性和理解性非常差,实际开发中通常用到一到两种参数类型混合使用就差不多了。


#参数混合使用 def mergeParams(name,age,city='北京',*year,**detail):     print('姓名:'+name)
    print('年龄:'+str(age))
    print('城市:'+city)
    for i in year:
        print('年份:'+str(i))
    print('其他:',detail)

year = [2017,2018]
detail = {'sex':'man','interset':'coding'}
mergeParams('谭某人',20)
mergeParams('谭某人',20,'中国',*year,**detail) 

姓名:谭某人
年龄:20 城市:北京
其他: {}
姓名:谭某人
年龄:20 城市:中国
年份:2017 年份:2018 其他: {'sex''man''interset''coding'} 



关键词: python

<< 上一篇

python函数初探

下一篇 >>

ppt一键转图片和pdf

网友留言(0条)

发表评论