抽象
函数
函数使用def语句来定义和创建,使用return从函数中返回值。return后也可以不加任何值,只起到结束函数的作用。
文档化函数
>>> def square(x):
'Calculates the square of the number x.'
return x*x
>>> square.__doc__
'Calculates the square of the number x.'
>>> print(square(5))
25
参数
字符串、数字和元组等是不可变的,因此在函数中作为参数也是无法被修改的,但是用列表等来作为参数,是可以被修改的。
>>> def change(n):
n[0] = 'AA'
>>> name = ['AB','BB']
>>> change(name)
>>> name
['AA', 'BB']
关键字参数
>>> def hello_1(greeting, name):
print('%s, %s!' %s (greeting, name))
>>> def hello_2(name, greeting):
print('%s, %s!' %s (name, greeting))
>>> hello_1('Hello', 'world')
Hello, world!
>>> hello_2('world', 'Hello')
Hello, world!
>>> hello_1(greeting = 'Hello', name = 'world')
Hello, world!
>>> hello_2(greeting = 'Hello', name = 'world')
world, Hello!
关键字参数可以明确的给某个参数提供值,这点在函数定义时为参数提供默认值时尤为重要。
收集参数
在定义函数时,在括号里的参数前面加上*号,表示“收集其余的位置参数”的含义,并作为元组打印:
>>> def print_params_2(title, *params):
print(title)
print(params)
>>> print_params_2('Params:', 1, 2, 3)
Params:
(1, 2, 3)
如果没有提供任何共收集的元素,params就是个空元组。
也可以收集关键字参数,在参数前使用**即可:
>>> def print_params_3(**params)
print(params)
>>> print_params_3(x=1, y=2, z=3)
{'z': 3, 'x': 1, 'y': 2}
注意到这里返回的不是元组而是字典。
值得注意的是,在调用函数时也可以使用或者*来传递元组或者字典。
作用域
函数内部的变量为局部变量,外部的变量为全局变量,如果要在函数内读取全局变量,可以使用globals()[‘parameter’]来获取,如:
>>> def combine(parameter):
print(parameter + globals()['patameter'])
>>> parameter = 'berry'
>>> combine('Shrub')
Shrubberry
刚刚提到了,函数内部的变量为局部变量,如果想要将它作为全局变量并进行修改,则需要在函数内部声明其为全局变量:
>>> x = 1
>>> def change_global():
global x
x = x + 1
>>> change_global()
>>> x
2
递归
即自己调用自己,如:
>>> def factorial(n)
if n == 1:
reuturn 1
else:
return n*factorial(n-1)
以上代码实现了阶乘的功能。除此之外还可以使用递归实现幂、二分查找等操作。