1.函数基础
函数是程序中不可或缺的一部分,之前也已经学了很多python的内置函数。
def my_func(message):
print('Got a message: {}'.format(message))
# 调用函数 my_func()
my_func('Hello World')
# 输出
Got a message: Hello World其中:
- def是函数的声明
- my_func 是函数的名称
- 括号里的message则是函数的参数
- 而print那行则是函数的主体部分,可以执行相应的语句
- 在函数最后,你可以返回调用结果(return或yield),也可以不返回
如果在函数内部调用其他函数,函数间哪个声明在前、哪个在后就无所谓了,因为def是可以执行语句,函数在调用之前都不存在,只需保证调用时,所需的函数都已声明定义,而且函数的参数可以设定默认值。
python是dynamically typed的,可以接受任何数据类型(整型、浮点型、字符串等)对函数参数来讲,这一点同样适用。如果两个参数的数据类型不同,两者是无法相加的,那么会报错。
python不用考虑输入的数据类型,让代码去判断执行,同样一个函数,可以同时应用在整型、列表、字符串等操作中,这叫做多态,必要时可以在开关加上数据的类型检查。
python函数的另一个特性,是python支持函数的嵌套,所谓的函数嵌套,就是指函数里面又有函数。
def f1():
print('hello')
def f2():
print('world')
f2()
f1()
# 输出
hello
world而函数的嵌套主要有两个作用,一是函数能够保证内部函数的隐私,内部函数只能被外部函数所调用和访问, 不会暴露在全局作用域。因此,如果你的函数内部有一些隐私,不想暴露在外,那就可以使用函数的嵌套,将其封装在内部函数中,只通过外部函数来访问;第二,合理的使用函数嵌套,能够提高程序的运行效率。
2.函数变量作用域
如果变量在函数内部定义的,就称为局部变量,只在函数内部有效,一旦函数执行完毕,局部变量就会被回收,无法访问。可以在文件内的任何地方访问,,当然在函数内部也是可以的,不过,我们不能在函数内部随便改变全局变量的值。
对于嵌套函数来讲,内部函数可以访问外部函数定义的变量,但是无法修改,若要修改,必须加上nonlocal这个关键字。如果不加,而内部函数的变量又和外部函数变量同名,内部函数变量会覆盖外部函数的变量。
3.闭包
闭包其实和刚刚讲的嵌套函数类似,不同的是,这里外部函数返回的是一个函数,而不是一个具体的值。返回的函数通常赋于一个变量,这个变量可以在后面被继续执行调用。
使用闭包的一个原因,可以让程序更简洁易读。
而且闭包常常和装饰器一起使用。
4.总结
- python中函数的参数可以接受任意的数据类型,使用起来需要注意,必要时请在函数开头加入数据类型的检查
- 和其他语言不同,python中函数的参数可以设定默认值
- 嵌套函数的使用,能保证数据的隐私性,提高程序运行效率
- 合理地使用闭包,则可以简化程序的复杂度,提高可读性
















