什么是函数
在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块 ,组织为一个小模块,这就是函数
函数定义和调用
格式:
def
hello
():
print
(
"hello word"
)
hello
()
定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
调用函数很简单的,通过 函数名
()
即可完成调用
每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了
当然了如果函数中执行到了
return
也会结束函数
函数参数
引入
:
参数传递
位置参数
格式:
def
函数名
(
参数
1
,
参数
2
):
代码块
函数名
(
值
1
,
值
2
)
定义时小括号中的参数,用来接收参数用的,称为
“
形参
”
调用时小括号中的参数,用来传递给函数用的,称为
“
实参
”
关键字参数
格式:
def
函数名
(
参数
1,
参数
2):
代码块
函数名
(
参数
1=
值
1,
参数
2=
值
2)
参数调用时
,
可以改变传参顺序,如果有位置参数需要位置参数放在关键字参数前面
如果关键字参数传参要在位置参数之前,将会报错
缺省参数
在形参中默认有值的参数,称之为缺省参数
调用函数时,缺省参数的值如果没有传入,则取默认值(形式参数),如果传入,则取实际参数
缺省参数一定要位于位置参数的最后面
不定长参数
格式:
def
printinfo
(
*
args
,
**
kwargs
):
print
(
"args:"
,
args
)
print
(
"kwargs:"
,
kwargs
)
printinfo
(
参数
)
加了星号(
*
)的变量
args
会存放所有未命名的变量参数,
args
为元组
而加
**
的变量
kwargs
会存放命名参数,即形如
key=value
的参数,
kwargs
为字典
参数位置顺序
格式
def
fun
(
位置参数
,
*
args
,
缺省参数
,
**
kwargs
):
代码块
fun
(
参数值
)
•
如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到
*args
的后面, 但如果有
**kwargs
的话,
**kwargs
必须是最后的
函数返回值
格式
def
sum
():
代码块
return
值
sum
()
多个
return
def
create_nums
(
num
):
print
(
"---1---"
)
if
num
==
100
:
print
(
"---2---"
)
return
num
+
1
print
(
"return
执行之后不会继续执行
"
)
print
(
“1231223
")
else
:
print
(
"---3---"
)
return
num
+
2
print
(
"---4---"
)
result1
=
create_nums
(
100
)
print
(
result1
)
#
打印
101
result2
=
create_nums
(
200
)
print
(
result2
)
#
打印202
一个函数中可以有多个
return
语句,但是只要有一个
return
语句被执行到,那么这个函数就会结束
了,因此后面的
return
没有什么用处
返回多个数据
代码
def
divid
(
a
,
b
):
shang
=
a
//
b
#
取模
yushu
=
a
%
b
#
取余
return
shang
,
yushu
#
默认是元组
result
=
divid
(
5
,
2
)
print
(
result
)
return
后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据
函数类型
分类:
1.
无参数,无返回值
此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数
2.
无参数,有返回值
此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数
3.
有参数,无返回值
此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数
4.
有参数,有返回值
此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函 数
函数的嵌套
一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用
写一个函数打印一条横线
打印自定义行数的横线
匿名函数、
lambda
函数也叫匿名函数,即函数没有具体的名称
格式:
g
=
lambda
x
:
x
+
1
print
(
g
(
1
))
def
g
(
x
):
return
x
+
1
print
(
g
(
1
))
lambda
函数可以赋值给变量,默认是返回的,所以不用再加
return
关键字
例如
g = lambda x:x+1,
可以看成如下函数,冒号前是参数,可以有多个,用逗号隔开,冒号右边的
返回值
变量
局部变量
局部变量,就是在函数内部定义的变量
约束
其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了
全局变量
定义 在函数外边定义的变量叫做全局变量
约束
全局变量能够在所有的函数中进行访问
全局变量和局部变量名字相同
代码
a
=
100
#
全局变量
def
test1
():
a
=
300
print
(
"
修改后的
a:"
,
a
)
def
test2
():
print
(
a
)
#
调用函数
test1
()
test2
()
函数中的变量修改不会导致全局变量改变
全局变量的修改
global的使用
在函数中出现
global
全局变量的名字 那么这个函数中即使出现和全局变量名相同的变量名
=
数据 也理解为对全局变量进行修改,而不是定义局部变量