本文已参与「新人创作礼」活动,一起开启掘金创作之路
函数的定义与使用
函数的理解与定义
函数是一段代码的表示
- 函数是一段具有特定功能的、可重用的语句组
- 函数是一种功能的抽象,一般函数表达特定功能
- 两个作用:降低编程难度和代码复用
函数的定义
类似与c的函数定义
def<函数名>(<参数(0个或多个)>):
<函数体>
return <返回值>
案例:计算n!
def jiecheng(n):
s=1
for i in range(1,n+1):
s*=i
return s
- 函数定义时,所指参数是一种占位符
- 函数定义之后,如果不经调用,不会执行
- 函数定义时,参数时输入,函数体是处理、结果是输出(
IPO)
函数是完整代码的封装
函数的使用及调用过程
调用是运行函数代码的方式
- 调用时要给出实际参数
- 实际参数替换定义中的参数
- 函数调用后得到返回值
示例:计算10!
def fact(n):
s=1
for i in range(1,n+1):
s*=i
return s
a= fact(10)
print(a)
函数的调用过程
输入变量给函数——>函数接受变量将值代入函数体中进行运算——>返回一个结果——>输出结果
总结:函数调用就是将实际参数给形式参数
函数的参数传递
参数个数(函数可以有参数,也可以没有,但必须保留括号)
def <函数名>():
<函数体>
return<返回值>
#eg:
def fact():
print("我也是函数")
可选参数
函数定义时可以为某些参数指定默认值,构成可选参数
def <函数名>(<非可选参数>,<可选参数>):
<函数体>
return<返回值>
- 注意所有的可选参数必须放在非可选参数之后
def fact (n,m=1):
s=1
for i in range(1,n+1):
s*=i
return s//m
这个函数可以选择计算n!也可以计算n!//m
可变参数
在定义函数时,可以设计函数接收的参数个数时可变的,即不确定参数总数量
def <函数名>(<参数>,*b):
<函数体>
return<返回值>
- 确定参数放在前面,不确定的用
*b,*c,*a表示
def fact(n,*b):
s=1
for i in range(1,n+1):
s*=i
for item in b:
s*=item
return s
参数传递的两种方式
函数调用时,参数可以按照位置或名称方式传递
1.按照位置的方式 2.按照名称的方式
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) #名称传递
函数的返回值
函数可以返回0个或多个结果
- return保留字用来传递返回值
- 函数可以有返回值,也可以没有,可以有return,也可以没有
- return可以传回0个返回值,也可以返回n个返回值
def fact (n,m=1):
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,2,3,4]
- 元组类型:(1,2,3,4)
局部变量和全局变量
程序全局变量叫全局变量,函数体中的变量叫局部变量
n,s = 10,100 <——n和s是全局变量
def fact(n):
s=1 <——fact()函数中的n和s是局部变量
for i in range(1,n+1):
s*=i
return s
print(fact(n),s) <——n和s是全局变量
规则1.局部变量和全局变量是不同变量
- 局部变量是函数内部的占位符,与全局变量可能重名但不同
- 函数运算结束后,局部变量被释放(变量不再存在)
- 可以使用global保留字在函数内部使用全局变量
n,s = 10,100
def fact(n):
s=1
for i in range(1,n+1):
s*=i
return s
print(fact(n),s)
>>>>>>>>>>>>>>>>>>>>>>>>>>
n,s = 10,100
def fact(n):
global s <————fact()函数中使用global保留字声明此处s是全局变量s
for i in range(1,n+1):
s*=i
return s <————此处是指全局变量s
print(fact(n),s) <——此处全局变量s被函数修改
规则2.局部变量为组合数据类型且未创建,等同于全局变量
- 组合类型就是多个数组成的一个类型(在python中组合类型是由指针体现的)
ls = ["F","f"] <——通过使用[]真实创建了一个全局变量和列表ls
def func(a):
ls.append(a) <——在ls列表中增加一个元素 此处ls是列表类型,未真实创建则等同于全 局变量
return
func("c") <——全局变量ls被修改
print(ls)
结果:["F","f","C"]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ls = ["F","f"]
def func(a):
ls = [] <——真实创建了这个组合数据类型(不等于全局变量)
ls.append(a)
return
func("c")
print(ls)
结果:["F","f"] "C"被释放了
总结:如果在内部没有创建这个组合数据,那么指针会指向外部的组合变量,即全局变量
lambda函数
lambda函数返回函数名作为结果
- lambda函数是一种匿名函数,即没有名字的函数
- 使用lambda保留字定义,函数名是返回结果
- lambda函数用于定义简单的、能够在一行内表示的函数
<函数名> = lambda <参数>:<表达式>
<=>
def<函数名>(<参数>):
<函数体>
return<返回值>
>>>>>>>>>>>>>>>>>>>>>>
>>>f = lambda x,y : x+y
>>>f(10,15)
25
>>>f=lambda : "lambda函数"
>>>print(f())
lambda函数
慎用lambda函数
- lambda函数主要用作一些特定函数或方法的参数
- lambda函数有一些固定使用方式,建议逐步掌握
- 一般情况下,建议使用def定义的普通函数