Python基础06-函数
2017-02-17 16:24:33我们创建一个函数来输出任意边界的斐波那契数列
>>> def fib(n):
... """打印一个斐波那契数列到n"""
... a, b = 0, 1
... while a < n:
... print(a, end= ' ')
... a, b = b, a+b
... print()
...
>>> fib(100)
0 1 1 2 3 5 8 13 21 34 55 89
首先,def
这个关键字通知Python:我在定义一个函数,fib是函数名,可以随便定义。括号里的n
是参数,参数可以没有或者有多个,用,
连接,没有参数为def name():
,括号不能省略。整个缩进部分为函数体。第一行是DocumentionString,可以不写,不过有些工具使用DocumentionString生成在线文档等,为了提高函数的可读性,建议写上。
>>> f = fib # 函数名可以赋值给另外的变量,然后该变量可以作为函数调用,相当于函数改了个名字
>>> f(10)
0 1 1 2 3 5 8
>>> def square_sum(a, b):
... c = a ** 2 + b ** 2
... return c
...
>>> square_sum(3, 5)
34
这里给函数加了返回值,return 可以返回多个值,比如return a, b, c
,也可以返回单个值return c
,或者不写返回值,这时候函数的默认返回值是None。
>>> def fun3(a, b = 2, text = "结果是"):
... print(text , a ** b)
...
>>> fun3(3)
结果是 9
>>> fun3(4, 3)
结果是 64
>>> fun3(2, 6, "最新结果是")
最新结果是 64
上边展示的是参数默认值,当参数没有被传值的时候,对应参数会使用默认值。
注意:默认值只会被求值一次,这在默认值是引用类型的时候,比如list, dictionary或大部分类的对象,函数会在接下来的调用里对传递给他的参数累加。
>>> def fun4(a, L = []):
... L.append(a)
... return L
...
>>> fun4(1)
[1]
>>> fun4(2)
[1, 2]
>>> fun4(3)
[1, 2, 3]
>>>
如果不想参数在以后的调用里累加,可用下边的方式定义。
>>> def fun4(a, L = None):
... if L is None:
... L = []
... L.append(a)
... return L
...
函数可以通过关键字传递参数。
>>> def fun(a, b = "bbb", c = 3):
... print("a = ", a)
... print("b = ", b)
... print("c = ", c)
...
>>> fun(1)
a = 1
b = bbb
c = 3
>>> fun(1, b="aaa", c = 6)
a = 1
b = aaa
c = 6
>>> fun(1, c = 8)
a = 1
b = bbb
c = 8
>>> fun(2, c = 9, b="aaa")
a = 2
b = aaa
c = 9
有时可能会不确定参数的个数,这时候使用可变参数列表,列表使用 星号加变量名*name
,字典使用两个星号加变量名**name
。
>>> def fun(*keys):
... print("keys is ",keys);
...
>>> fun("a", "b", "c")
keys is ('a', 'b', 'c')
>>> fun(1, 2)
keys is (1, 2)
>>> def fun2(**dic):
... print("dic is ", dic)
...
>>> fun2(key1 = "value1", key2 = "value2")
dic is {'key1': 'value1', 'key2': 'value2'}