Python基础14
第八章 函数
8.1 函数是什么
这一小节可以不看
从这一篇教程开始,我会让你明白Python没有你想象中的那么简单。
注意:Python的函数不同于数学函数。
数学函数:
定义:函数(function)的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。函数的近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示,函数概念含有三个要素:定义域A、值域B和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。
也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。
形式:
f(x) = kx
f(x) = kx + b #直线
f(x) = ax² + bx + c #抛物线
f(x) = ax³ + bx² + cx + d #回归式抛物线
...
计算机函数:
定义:函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
形式:
int main(){
#C
}
public static void main(String[] args){
#Java
}
def main():
#Python
我们可以看出,Python中的函数定义是最简单的。
为什么要使用函数?百度百科中给出了如下结论:
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。
说句人话:函数有利于增强程序可读性,让程序更简洁。
8.2 定义函数的内容
在Python中,我们使用def()语句来定义函数,即:
def 函数名(*参数1,参数2...):
函数的内容
正常的程序
例41:输出五个hello world:
#方法1:
print("hello world")
print("hello world")
print("hello world")
print("hello world")
print("hello world")
#方法2:
for i in range(0,5):
print("hello world")
#方法3:
def hw(count):
for i in range(0,count):
print("hello world")
hw(5)
我觉得第3种方法更可读,你呢?
8.3 global和nonlocal关键字,内联和闭包函数
def f1():
print("this is f1!")
def f11():
print("this is f11!")
这时我们可以通过f1()
调用,显示正常,但是我们调用f11时,却不会成功。因为Python无法在一级函数里找到f11()
。
这时,我们称f11()
是f1()
的内联函数(Inline function)。
但如果我们的函数内有变量呢?我们可以使用nonlocal和global关键字。
它们的区别在哪里呢?我们来看一张图。
如果二级函数内有一个变量h,那么使用
nonlocal h
之后,我们可以在一级函数内使用h,使用global h
之后,我们可以在主程序内使用h。接着我们继续使用上面的例子,f1对f11内部作用域函数。使用一个变量赋值调用的方法称为闭包(closure)
不懂也没有关系,我们以后会举例子使你明白。