对于Python的函数,我们需要记住的是:
1. 函数的默认返回值是None。
2. python是一个自上而下逐行解释并执行的语言。因此,函数的定义必须在函数被调用之前。同名的函数,后定义的会覆盖前面定义的。
3. 程序执行的时候,遇到函数定义只会先将函数整体读进内存,并不立刻执行。等到函数被调用的时候才执行函数体。
4. python函数的参数传递的是一个引用而不是值。这点很重要。这一点可以用下面的例子证明:
def f1(a_list): s = id(a_list) a_list[0] = 5 print(s) print(a_list) li = [1,2,3,4,] f1(li) print(id(li)) print(li)
运行结果:
11797576 [5, 2, 3, 4] 11797576 [5, 2, 3, 4]
对于函数,最重要的知识点莫过于参数了。Python中的参数有以下几种:
一、普通参数:
也叫位置参数,它们在参数列表中的位置固定,集体排在最左边,必须根据其顺序进行参数传递。例如:
def f1(a,b,c): print(a,b,c) f1(1,2,3)
对于每个参数,在函数引用时,我们可以指定参数,这是一种参数的传值方法。使用这种方式的时候,参数可以不按顺序,但它必须位于参数序列的最后部分。例如:
def f1(a,b,c): print(a,b,c) f1(1,c=3,b=2)
但这样不行:
def f1(a,b,c): print(a,b,c) f1(c=3,1,b=2)
二、默认参数:
默认参数是为某些参数设定一个默认值,既可以减少参数传入量,也可以享受使用默认值的便利。默认参数必须位于参数列表的最后部分!例如:
def f1(a,b,c=3): print(a,b,c) f1(1,2)
上面的例子也可以这么引用:f1(1,2,4),这时我们指定了c的值为4,而不使用默认值。
但在混合使用普通参数和默认参数的时候要注意一个问题,下面这个例子,a、b为普通参数,c、d为默认参数。我们希望c使用默认值,但是d另外指定值。正确的做法是:
def f1(a,b,c=3,d=4): print(a,b,c,d) f1(1,2,d=8)
此处要明确的使用“d=8”的传递形式。如f1(1,2,,8),f1(1,2,8)之类的方式都不行。
三、动态参数
Python的动态参数有两种,分别是*args和**kwargs,这里面的关键是一个和两个星号,而不是args和kwargs,实际上你可以使用*any或**whatever的方式,但就如self一样,潜规则我们使用*args和**kwargs。