函数(3):函数的返回值和参数
一、函数的返回值
1. 如果返回的结果有多个,可以包装成一个元组,进行返回。而且元组的小括号可以(建议)不写。【例1】 2. 如果函数返回的是元组,可以用一个变量接受,也可以用多个变量接受,但是要注意个数要保持一致。【例2】 3. 经典面试题:不用其他变量,交换两个数的值。【例3】
例1:
结果:
函数返回的是一个元组,所以x就是一个元组。
例2:
结果:
例3:交换两个数,解答
结果:
二、函数的参数1. 在函数内部,针对参数,使用赋值语句,并不会影响到实参的值。【例1】【例2】 2. 如果传递的是可变数据类型,在函数内部使用了方法来进行了修改,就会影响到外部数据。【例3】 3. 列表的"+="操作,本质上进行的是extend操作。 list1 += list2 相当于:list1.extend(list2)这一句,而不是 list1 = list1 + list2这一句。【例4】【例5】【例6】
例1:
结果: 结果gl_num的值并没有变成99。为什么呢? 因为执行完第4行后,num指向99。 但是执行第6行的时候,并不是把99的值改成100。因为99是不可变类型。会创建一个内存,里面存放100,然后用num指向100。
例2:
结果:
原因跟例1一样,虽然列表是可变数据类型,但是使用赋值语句时,是重新创建一个数据,然后用num_list指向它。并不是改变原有的数据。(见可变数据类型那一节)
例3:
结果:
发生改变了。
在开发的时候要格外注意。
例4:
结果:
num_list指向了一个新的地方。所以不改变原有的值。
例5:
结果:
非常奇怪。如果按照之前的"+="的理解,应该就跟【例4】得到相同的结果了。 但是显然并不是。而是相当于执行了 nums_list.extend(numlist)操作。
例6:
结果:
与例5的结果一致。说明了列表的+=操作相当于执行了 nums_list.extend(numlist)操作。
三、函数的缺省参数缺省参数就是有默认值,可以不传入值。这样可以简化函数的调用。缺省参数通常使用最常见的值。【例1】 注意: 1. 必须保证带有默认值的缺省参数,在参数列表的末尾。 2. 在调用具有多个缺省参数的函数时,如果想给具体某一个传递参数,可以在调用的时候把参数名写出来。【例2】
例1:
结果:
例2:
结果:
第9行代码,False传递给了title这个变量了。
四、多值参数有时候定义了一个函数,这个函数需要传入的参数个数是不确定的。这个时候,就可以使用到多值参数。 在Python中,支持两种多值参数: 1. 在参数名前,增加一个*号,这种参数可以接受一个元组。默认习惯使用*args。 2. 在参数明前,增加两个星号**,这个参数可以用来接受一个字典。默认习惯使用**kwargs。
可以只写*args【例1】,也可以只写**kwargs【例2】,也可以两个都写【例3】
例1:可以只写*args
结果:
demo("liupc",19) 执行时,args没有传入值,所以输出的是空的元组。 demo("li",20,21,22,23)执行时,"li"和20分别给了name和age,剩下的都给元组args了。
例2:也可以只写**kwargs
结果:
例3:也可以两个都写。但是*args必须在**kwargs前面。
结果:
|