目录
一、函数的定义
1.函数是一段具有特定功能的、可重用的语句组:每次使用函数可以提供不同的参数作为输入,以实现对不同数据的处理;函数执行后,还可以反馈相应的处理结果。
有些函数是用户自己编写的,称为自定义函数;python安装包也自带了一些函数和方法,包括Python内置的函数(如abs()、eval()、Python标准库中的函数(如math库中的pow())等。
2.函数是一种功能的抽象,一般函数表达特定功能
3.使用函数主要有两个功能:降低编程难度和代码复用。
函数可以在一个程序中的多个位置使用,也可以用于多个程序,当需要修改代码时,只需要在函数中修改一次,所有调用位置的功能都更新了,这种代码重用降低了代码行数和代码维护的难度。
4.函数是一段代码的表示,格式如下:
def <函数名>(<参数(0个或多个)>):
<函数体>
return <返回值>
注意:
函数定义时,所指定的参数是一种占位符
函数定义后,如果不经过调用,不会被执行
函数定义后,参数是输入,函数体是处理,结果是输出(IPO)
二、函数的调用
调用是运行函数代码的方式
程序调用一个函数需要执行以下4个步骤
1.调用程序在调用处暂停执行
2.在调用时将实参复制给函数的形参
3.执行函数体语句
4.函数调用结束给出返回值,程序回到调用前的暂停处继续执行
调用时要给出实际参数
实际参数替换定义中的参数
函数调用后得到返回值
def fact(n) #函数的定义 fact 函数名
s=0 #函数体
for i in range(n+1)
s +=i
return s #返回值
fact(100) #函数的调用
三、函数的参数传递
1.参数个数
函数可以有参数,也可以没有,但必须保留括号
例:
def happy() #函数的命名
print("Happy birthday to you!")
happy() #函数的调用
2.可选参数传递
函数定义时可以为某些参数指定默认值,构成可选参数,格式如下:
def <函数名>(<非可选参数>,<可选参数>)
<函数体>
return <返回值>
例:
def fact(n,m=1): #该函数是计算n!//m,n为非可选参数,m为可选参数
s=1
for i in range (1,n+1)
s *= i
return s//m
fact(10) #函数的调用
3628800 #该函数调用的结果,如果没有加入可选参数,可选参数为函数的默认值
fact(10,5) #函数的调用
725760 #调用结果,可以看出,如果输入了可选参数,可选参数在调用过程中即使用输入值
3.可变参数传递
函数定义时可以设计可变数量参数,即不确定参数总数量,格式如下:
def <函数名>(<参数>,*b):
<函数体>
return <返回值>
例:
#计算n!乘数
def fact(n,*b) #函数的定义 *b为可变参数(为不确定参数的个数)
s=1
for i in range(1,n+1):
s *= i
for n in *b:
s *=n
return s
fact(10,3) #函数的调用,此次调用,*b代表一个参数
725760
fact(10,3,5,8) #函数的调用,此次调用*b代表三个参数,即for n in *b:此处*b=[3,5,8]
435456000
4.参数传递的两种方式
函数调用时,参数可以按照位置或名称方式传递
def fact(n,m=1): #该函数是计算n!//m,n为非可选参数,m为可选参数
s=1
for i in range (1,n+1)
s *= i
return s//m
fact(10,5) #(10,5)为位置传递
725760
fact(m=5,n=10) #(m=5,n=10)为名称传递
725760
四、函数的返回值
函数可以返回0个或多个结果
return保留字用来传递返回值
函数可以有返回值,也可以没有,可以有return,也可以没有
return可以传递0个返回值,也可以传递任意多个返回值
函数调用时,参数可以按照位置或名称方式传递
def fact(n,m=1): #该函数是计算n!//m,n为非可选参数,m为可选参数
s=1
for i in range (1,n+1)
s *= i
return s//m,n,m
fact(10,5)
(725760,10,5) #元组类型
a,b,c = fact(10,5)
print(a,b,c)
725760 10 5
五、局部变量和全局变量
<语句块1>
def <函数名>(<参数>):
<函数体>
return <返回值>
<语句块2>
#程序全局变量即从语句1到语句块2一直存在的变量
#函数局部变量即只存在于从def到return所构成的函数中
规则1:局部变量和全局变量是不同变量
(1)局部变量是函数内部的占位符,与全局变量可能重名但不同
(2)函数运算结束后,局部变量被释放
(3)可以使用global保留字在函数内部使用全局变量
n,s = 10,100 #n,s为全局变量
def fact(n)
s=1 #fact()函数中的n,s是局部变量
for i in range(n+1)
s *=i
return s
print(fact(n),s) #n,s是全局变量
运行结果
3628800 100
n,s = 10,100 #n,s为全局变量
def fact(n)
s=1 #fact()函数中的n,s是局部变量 ,此处s是局部变量,与全局变量s不同
for i in range(n+1)
s *=i
return s #此处局部变量s是3628800
print(fact(n),s) #此处全局变量s是100
运行结果
3628800 100
n,s = 10,100
def fact(n) #fact()函数中使用global保留字声明
global s #此处s是全局变量s
for i in range(n+1)
s *=i
return s #此处s是全局变量s
print(fact(n),s) #此处全局变量s被函数修改
运行结果
362880000 362880000
规则2:局部变量为组合数据类型且未创建,等同于全局变量
使用规则
(1)基本数据类型,无论是否重名,局部变量与全局变量不同
(2)可以通过global保留字在函数内部声明全局变量
(3)组合数据类型,如果局部变量未真实创建,则是全局变量
Is = ["F","f"] #通过使用[]真实创建了一个全局变量列表Is
def func(a):
Is.append(a) #此处Is是列表类型,未真实创建,则等同于全局变量
return
func("C") #全局变量Is被修改
print(Is)
运行结果
['F','f','C']
Is = ["F","f"] #通过使用[]真实创建了一个全局变量列表Is
def func(a):
Is = [] #此处Is是列表类型,真实创建,Is是局部变量
Is.append(a)
return
func("C") #局部变量Is被修改
print(Is)
运行结果
['F','f']