python3 函数参数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/sinat_36188088/article/details/80787652

python函数参数包括五种类型:位置参数、默认参数、可变参数、关键字参数以及命名关键字参数。

位置参数例如 def ex(y): y就是位置参数 例子:

def ex(y):
        print(y)
ex(2)

默认参数可以简化函数的调用,设置默认参数时,要注意:

一 必选参数在前,默认参数在后

二当函数有多个参数时,把变化大的参数放在前面,变化小的参数放后面

举个例子:

def information(name,gender,age=18,city='beijing'):
        print(name,gender,age,city)
information('xiaoming','9',city='hebei')

结果如下:

information()中age和city是默认参数,当全部输入时,默认参数可以不用写参数名输入,如果不是按照默认顺序参数输入,就要输入相应的参数名,当不对默认参数做处理时,输出就会输出默认参数,如果输入给定值,就会输出给定值。

定义默认参数时,默认参数必须指向不变对象

可变参数:可变参数就是指传入的参数个数是可变的,即可以是1个,2个到任意个,也可以是0个。

可变参数主要运用于在不知道参数个数的情况下使用。

例如计算一组数字的平方和a^2+b^2+c^2+.....

函数可以这样定义:

def sq(*number):
        sum=0
        for x in number:
                sum=sum+x*x
        return sum
a=sq(1,2,3)
print(a)

可变参数是用*args定义的,如sq(*number)

可变参数传值还有一个方法,即

b=[1,2,3]
sq(*b)

*b表示把b这个列表里面的所有参数作为可变参数传进去。

可变参数允许传入0个或者任意个参数,这些可变参数在函数调用时自动组装为一个元组。

关键字参数:关键字参数允许传入0个或者任意个包含参数名的参数,这些关键字在函数内部自动组装成为一个字典。示例如下

def student(name,grade,**kw):
        print(name,grade,kw)

这表示student这个函数参数接收关键字参数kw,关键字参数表示时使用**kw来表示

def student(name,grade,**kw):
	print(name,grade,kw)
>>> student('xiaoming','5',age="9",address="北京")
xiaoming 5 {'address': '北京', 'age': '9'}

age="9",address="北京"就是关键字参数,它是用字典显示出来的,使用关键字参数可以使函数有良好的扩展功能,

命名关键字参数:命名关键字可以限制关键字参数的名字,这样可以保证一定的安全性。

命名关键字参数有两种方法:一是在参数前面加一个*,用逗号隔开:如下

def per(name,age,*,city,job):
	print(name,age,city,job)

*后面的city和job即是命名关键字参数,调用方式如下:

per("xiaohong",12,city="北京",job="学生")
xiaohong 12 北京 学生

第二种方法是如果函数参数中已经有了可变参数,那么可变参数后面的参数即为命名关键字参数:

def per(name,age,*args,city,job):
	print(name,age,args,city,job)

即*args后面的city,job为关键字参数

要注意的是:命名关键字一定传入参数名,否则会出错,命名关键字也可以有默认值。

参数组合:在python中可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数组合使用,参数定义顺序为:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。示例如下:

def ex(a,b,c=1,*args,**kw):
	print(a,b,c,args,kw)

a和b为必选参数,c为默认参数,args为可变参数,**kw为关键字参数

还有一种为

def ex(a,b,c=1,*args,d,**kw):
	print(a,b,c,args,kw)
a和b为必选参数,c为默认参数,args为可变参数,d为命名关键字参数,**kw为关键字参数。



猜你喜欢

转载自blog.csdn.net/sinat_36188088/article/details/80787652