【Python学习】——5.1函数以代码行数来衡量程序设计的进度,就好比以重量来衡量飞机的制造进度。
——比尔·盖茨
提起函数大家可能脑海出现的是这样的图片:
这是数学上所指的函数,和计算机中的函数有所不同。
在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合。定义一个函数时,需要指定函数的名称并写下一系列程序语句。之后,就可以使用名称来“调用”这个函数。可以理解函数是一段具有特定功能的、可重用的语句组。函数是功能的抽象。
函数的目的:降低编程难度和代码复用。
函数的定义
Python使用def保留字定义一个函数,语法形式如下:
def():
return
举个例子:
#计算n!
def fact(n):
s=1
for i in range(1,n+1):
s *= i
return s
def是关键字,表示接下来是一个函数的定义,这个函数名称是fact,函数名称的书写规则和变量是一样的:字母、数字、下划线是合法的,但第一个字符不能是数字。关键字不能作为函数名,而且应该尽量避免函数和变量重名。n是参数,函数定义中的参数称为形式参数是一种占位符。s是返回值。函数的定义也可以说是函数声明,如果不调用函数,则不会执行函数。
函数的调用
调用是运行函数的方式
程序调用一个函数需要执行以下4个步骤:调用程序在调用处暂停执行
在调用时将实际参数复制给函数的形式参数
执行函数体语句
函数调用结束给出返回值,程序回到调用前的暂停处继续执行。
例如对上面的函数进行调用
#计算n!
def fact(n):
s=1
for i in range(1,n+1):
s *= i
return s
a=fact(10) #计算10!
print(a)
函数的参数传递
函数可以有参数,也可以没有参数,但必须保留括号
函数定义时可以为某些参数指定默认值,构成可选参数,可选参数必须定义在非可选参数的后面。
def (,):
例如对上面的例子,我们想要计算n!//m,则可以有:
def fact(n,m=1):
s=1
for i in range(1,n+1):
s *= i
return s//m
a=fact(10,5)
print(a)
m=1就是可选参数
在函数定义时,也可以设计可变数量的参数,称可变参数,通过在参数前面加星号(*)实现。可变参数也只能出现在参数列表的最后,调用时,这些参数被当作元组类型传递到函数中。例子如下:
#计算n!乘数
def fact(n,*b):
s=1
for i in range(1,n+1):
s *= i
for item in b:
s *= item
return s
fact(10,3,5,8)
fact函数定义了可变参数b,调用fact函数时输入到(3,5,8)被当作元组传递给b,与n累乘后输出。
函数调用时,参数可以按照位置传递或者名称传递
def fact(n,m=1):
s=1
for i in range(1,n+1):
s *= i
return s//m
fact(10,5) #位置传递
fact(m=5,n=10) #名称传递
函数的返回值
return保留字用来传递返回值
函数可以有返回值,也可以没有,可以有return,也可以没有。
return可以传递0个返回值,也可以传递任意多个返回值。多个值以元组形式保存。
函数对变量的作用
局部变量和全局变量
全局变量是指在函数之外定义的变量,一般没有缩进,在程序执行中全过程有效。
局部变量是指在函数内部使用的变量,仅对函数内部有效,当函数退出时变量将不存在。
举个例子:
n,s=10,100 #n和s是全局变量
def fact(n):
s = 1
for i in range(1,1+n): #fact()中的n,s是局部变量
s *= i
return s
print(fact(n),s) #n和s是全局变量
最后运行结果是n=3628800 ,s=100
局部变量和全局变量的规则:局部变量和全局变量是不同的变量局部变量是函数内部的占位符,可与全局变量重名但不同
函数运算结束后,局部变量被释放
可以使用global保留字在函数内部使用全局变量
局部变量为组合数据类型且未创建,等同于全局变量
ls = [“F”,”f”]#通过[]创建了一个全局变量列表ls
def func(a):
ls.append(a)#此处的ls是列表类型,且未真实创建,则等同于全局变量
return
func(“C”)#全局变量ls被修改
print(ls)运行结果是[“F”,”f”,”C”]
另一种情况是在函数内部真实创建了个组合数据类型例子如下:
ls = [“F”,”f”] #通过[]创建了一个全局变量列表ls
def func(a):
ls = [] #此处的ls是列表类型,真实创建ls,则是局部变量
ls.append(a)
return
func(“C”) #局部变量ls被修改
print(ls)运行结果是[“F”,”f”]