- 函数就是能够完成特定功能的一段代码。通过函数可以实现代码的复用、实现细节的隐藏、提高可维护性与可读性。
def function(parameter):
parameter = 1
return parameter
result = function(2)
- 函数的参数传递。函数定义是的参数为形参,函数调用时的参数是实参。参数传递是指将实参传递给形参,有两种方式:位置传递与关键字传递(关键字指的是形参)。
函数参数传递时,如果传入的是不可变对象,那么不论函数中如何修改该对象,函数调用结束后,该对象依然不变。如果传入的是可变对象,若函数中改变该对象,则函数调用结束后,该对象会发生相应的改变。因为传入的可变对象会发生改变,若不想让原对象发生变化,应传入原对象的copy()。
def func1(para1, para2):
answer = para1 + para2
return answer
result1 = func1(2, 3)
result2 = func1(para1=2, para2=3)
def func2(a, b):
a = a + 1
b.append(a)
return
a, b = 1, [1, 2, 3]
func2(a, b.copy())
print(a, b)
func2(a, b)
print(a, b)
- 函数的返回值有三种情况:
(1)如果没有返回值,return可以省略;
(2)如果只有一个返回值,则返回相应的类型;
(3)如果有多个返回值,则返回的是一个元组,元组内是各个返回值。
def func1():
print('hello')
def func2():
return 'hello'
def func3():
return 'hello','world'
print(func3())
- 函数参数定义。可以为函数形参提供默认值,形参有默认值时,可以不给该形参传入实参;若给其传入实参,则实参会替换掉默认值。
不确定传入参数的个数时,可以使用可变个数参数,有两种形式:*args或 **args。*args指的是可变个数的位置参数,**args指的是可变个数的关键字形参。
两者可以一起使用,一同使用时两者的形参名不能相同,一同使用时可变位置形参需要在可变关键字形参之前;但不能重复。也可以与普通形参一起使用。
def func1(para1, para2=2):
return para1 + para2
def func2(*args):
print(args)
func2(1, 2)
def func3(**args):
print(args)
func3(a=1, b=2)
def func4(a, *args1, b, **args2):
print(a, args1, b, args2)
func4(1, 2, 3, b=4, c=5, d=6)
- 递归函数,就是函数自己调用自己,因此需要在函数体内给予函数终止条件,避免无限套娃。
def func1(n):
if n==1 or n==2:
return 1
else:
return func1(n-2) + func1(n-1)
print(func1(6))