目录
参数传递
- 声明函数时声明的形式参数等同于函数体中的局部变量,在函数体中的任何位置都可以使用。
- Python参数传递方法是传递对象引用,而不是传递对象的值。
- 局部变量和形式参数变量的区别在于局部变量在函数体中绑定到某个对象,而形式参数变量则绑定到函数调用代码传递的对应实际参数对象。
实参传递不可变对象
-
在调用函数时,若传递的是不可变对象(int,float,str,bool)的引用,如果函数体中 修改对象的值,在函数内部直接修改形参的值不会影响实参。
a=0
b=0
def add(a,b):
a=a+1
b=b+4
return a
print(add(1,3))
print(a)
如上述代码所示, a的数值不会因为函数内部数值的改变而改变。
实参传递可变对象
若传递给函数的实参是可变序列,并且在函数内部使用下标或可变序列自身的 方法增加、删除元素或修改元素时,修改后的结果是可以反映到函数之外的,实参也得到相应的修改。
def modify(v, item):
#增加元素
v.append(item)
a = [2]
modify(a,3)
print(a)
#[2, 3]
def modify(v):
#修改列表元素值
v[0] = v[0]+1
a = [2]
modify(a)
print(a)
#[3]
位置参数和命名参数
默认值参数必须出现在函数参数列表的最右端,且任何一个默认值参数右边不 能有非默认值参数。
默认参数的灵活性
调用带有默认值参数的函数时,可以不对默认值参数进行赋值,也可以赋值, 具有较大的灵活性。
![](https://img-blog.csdnimg.cn/93caae2f5f0a4487aabefb0279eb87e0.png)
动态参数
位置动态参数
*形参 #形参列表的最后一位
def add(sax,*ass):
print(ass)
add(45,312,45,78)
关键字动态参数
**形参 #形参列表的最后一位
def add(sax,**ass):
print(ass)
add(sax=132,y=45,s=12,q=45)
序列解包
序列:字符串,列表,元组,字节流。
传递参数时,序列中的元素按照位置参数的方式传入函数。
>>> def demo(a, b, c):
>>> print(a+b+c)
>>> lis = [1, 2, 3] #列表
>>> demo(*lis) 6
>>> tup = (1, 2, 3) #元组
>>> demo(*tup) 6
序列元素的个数与形参个数一致。
序列解包顺序
序列解包相当于位置参数,需要优先处理
>>> def demo(a, b, c):
>>> print(a,b,c)
>>> demo(a=1, *(2, 3))
#Traceback (most recent call last):
#File "<pyshell#26>", line 1, in <module>
demo(a=1, *(2, 3))
#TypeError: demo() got multiple values for argument 'a'
>>> demo(b=1, *(2, 3))
#Traceback (most recent call last):
#File "<pyshell#27>", line 1, in <module>
demo(b=1, *(2, 3))
#TypeError: demo() got multiple values for argument 'b'
>>> demo(c=1, *(2, 3))
#2 3 1
序列解包在关键参数解包之前
>>> def demo(a, b, c):
>>> print(a,b,c)
>>> demo(**{'a':1, 'b':2}, *(3,))
#SyntaxError: iterable argument unpacking follows keyword
#argument unpacking
>>> demo(*(3,), **{'a':1, 'b':2})
#Traceback (most recent call last):
#File "<pyshell#30>", line 1, in <module>
demo(*(3,), **{'a':1, 'b':2})
#TypeError: demo() got multiple values for argument 'a'
>>> demo(*(3,), **{'c':1, 'b':2})
#3 2 1
return语句
相关概念
return语句用来从一个函数中返回一个值,同时结束函数。
如果函数没有return语句,或者有return语句但是没有执行到,或者只有
return而没有返回值,Python将认为该函数以return None结束。
若有多个返回值,多个返回值以逗号相隔。
def maximum( x, y ):
if x>y:
return x
if x==y:
return y
def info(a_list):
a=len(a_list)
b=min(a_list)
c=max(a_list)
return a,b,c
return类型
根据函数的参数和返回值,函数可以分为四种类型:
• 无参数,无返回值的函数:输出错误说明
• 无参数,有返回值的函数:返回时间
• 有参数,无返回值的函数:
• 有参数,有返回值的函数