十五、函数的参数

1、形参的类型

形参分为以下几种情况

  1. 没有参数,也就是说定义函数时不定义形参(这种情况自然是不用去谈论形参的类型的)
  2. 只有一个参数,传什么就是什么(即根据传入的值确定其类型)
  3. 有多个参数,与只有一个参数类似,也是根据传入时其接收的具体值来确定的

形参的具体类型有:

  1. 位置参数:必须传,且有几个只能传几个,不能多也不能少。
  2. 默认参数:不必须传,则为默认值
    定义方法:
    def 函数名(参数=默认值):
    	函数体 
  1. 动态参数:即是在定义形参时不指定传入的参数个数,而是由具体传入时确定;分为两种,一种按位置传参,一种按关键字传参,定义方法分别如下:
    def 函数名(*args,**kwargs): 
    	函数体

说明: 上例中,*args表示按位置传参的动态参数,而**kwargs表示按关键字传参的函数,两个参数的参数名不一定要叫“args”和“kwargs”,但一般都这样起名。
按位置传参的动态参数定义方法: *参数名接收的是按照位置传参的值,组织成一个元祖
按关键字传参的动态参数定义方法: **参数名接受的是按照关键字传参的值,组织成一个字典
注: 一般采用(args,**kwargs)这种方式应对各种动态参数,且args必须先定义;几种参数的定义顺序为 必须先定义位置参数,再定义动态参数(*args),然后定义默认参数,最后定义(**kwargs)

2、调用函数时传参的方法

1、按照位置传参:如函数名(a,b)
2、按照关键字传参:如函数名(p1=a,p2=b)
注: 混着用时,必须先按照位置传参,再按照关键字传参;不能给同一个变量传多个值。
实例: 计算n个数的和,并将其结果用指定的字符表示

def add(*args,result_flag = "result"):
	result = 0
	for i in args:
		result = result + i
	return result_flag,result
result = add(1,2,3,4,"结果")
print(result)

在这里插入图片描述

附1:默认参数的陷阱

如果默认参数的值是一个可变数据类型,那么每一次调用函数的时候不传值,那么就共用这个数据类型的资源。
实例:

def default1(l = []):
    l.append(1)
    print(l)
default1()#结果为:1
default1()#结果为:1,1
default1([])#结果为:1
default1()#结果为:1,1,1

这是由于l为列表,其为可变数据类型,并且后面四次调用均为传值,所以这四次共用一个列表,这就出现了上面的现象,由于每次调用都会向列表中添加“1”,所以每次调用函数时,自然会向同一个列表中添加“1”,就出现了实例中的输出结果。

附2:各种参数混用时的定义顺序

python在定义函数时,其各种类型的参数的先后顺序如下:可变参数(只有形参名的)->可变长参数(*args)->默认参数(参数名=参数值)->可变长字典型参数(**kwargs),例如下面的函数定义:
def add(num1,*numbers,num2=3,**dic):,如果形参定义不符合这种顺序,那么调用该方法时,传值会出现一些问题,造成默认参数和*args参数冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值