1. 函数的理解和定义
① 是什么 函数是一段具有特定功能、可重用的语句组,是一种功能的抽象。
② 作用 降低编程难度和代码复用
③ 怎么用
def <函数名>(<参数(0个或多个)>):
<函数体>
return <返回值>
说明:
-函数定义时,所指定的参数是一种占位符
-函数定义后,不经调用,不会被执行
-函数定义时,参数是输入、函数体是处理、结果是输出(IPO)
2. 函数的使用及调用过程
调用:运行函数代码的方式
调用时要给出实际参数,替换定义中的参数
调用后得到实际参数运行的返回值
3. 函数的参数传递
① 无参数
函数可以无参数,但定义时括号不可省略
② 可选参数
函数定义时可以为某些参数指定默认值,构成可选参数(即调用函数时,可以不提供的参数)
注意:Python强制约定所有可选参数必须放在必选参数之后
例:
def fact(n,m=1):
s = 1
for i in range(1,n+1):
s *= i
return s//m
a = fact(4)
print(a)
b = fact(4,2)
print(b)
③ 可变参数
格式
def <函数名>(<参数>,*b):
<函数体>
return <返回值>
例
def fact(n,*b):
s = 1
for i in range(1,n+1):
s *= i
for item in b:
s *= item
return s
a = fact(10,3)
print(a)
b = fact(10,3,5,8)
print(b)
④ 参数传递的两种方式
默认:按照位置传递
另:按照名称传递
例
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)
b = fact(m=5,n=10)#名称传递
print(b)
4. 函数的返回值
函数可以返回0个或多个结果
-return后面可以不加任何返回信息,也可以不使用return
例
def fact(n,m=1):
s = 1
for i in range(1,n+1):
s *= i
return s//m,n,m
a,b,c = fact(10,5)
print(a,b,c)
d = fact(10,5)
print(d)
输出
725760 10 5
(725760, 10, 5) (该类型为元组类型)
5. 局部变量和全局变量
全局变量:函数之外的变量
局部变量:函数内部的变量
记住如下两条规则:
① 局部变量和全局变量是不同变量
-局部变量是函数内部的占位符,可能与全局变量重名,但一定不同
-函数运算结束后,局部变量被释放
-可以使用global保留字在函数内部使用全局变量
例
n,s = 10,100
def fact(n):
global s#之后函数内出现的s全都是全局变量
for i in range(1,n+1):
s *= i
return s
print(fact(n),s)
输出
362880000 362880000
② 局部变量如果是组合数据类型且未在函数内部创建,等同于全局变量
例1 组合数据类型+未创建
ls = ["F","f"]
#通过使用[]真实创建了一个全局变量列表ls
def func(a):
ls.append(a)
#此处ls是列表类型,未真实创建则等同于全局变量
return
func("C")
#全局变量ls被修改
print(ls)
输出
['F', 'f', 'C']
例2 组合数据类型+已创建
ls = ["F","f"]
#通过使用[]真实创建了一个全局变量列表ls
def func(a):
ls = []
#此处ls是列表类型,真实创建,ls是局部变量
ls.append(a)
return ls
ls1 = func("C")
#局部变量ls被修改
print(ls,ls1)
输出
['F', 'f'] ['C']
6. lambda函数
是一种匿名函数,即没有名字
-使用lambda保留字定义,返回函数名作为结果
-用于定义简单的、可以在一行内表示的函数
<函数名> = lambda <参数>:<表达式>
等价于
def <函数名>(<参数>):
<函数体>
return <返回值>
不同的是,只能使用表达式而不能使用
例1
f = lambda x,y:x+y
print(f(5,10))
输出 15
例2
f = lambda : "lambda函数"
print(f())
输出 lambda函数
建议:
lambda函数要谨慎使用,主要用作一些特定函数或方法的参数,建议使用def定义普通函数
lambda函数有一些固定使用方式,建议逐渐掌握
出处:北理工Python慕课