一 为何要有函数?
不加区分地将所有功能的代码垒到一起,问题是:
代码可读性差
代码冗余
代码可扩展差
如何解决?
函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用
结论:函数使用必须是:先定义,后调用
二:函数的分类
1.内置函数:built-in
2.自定义函数:
def 函数名(参数1,参数2,...):
'''注释'''
函数体
可以先看个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
'''
************
************
************
hello world
************
************
************
'''
def
print_tag(tag,count,line_num):
for
i
in
range
(line_num):
print
(tag
*
count)
def
print_msg(msg):
#msg='hello world'
print
(msg)
print_tag(
'*'
,
20
,
3
)
print_msg(
'hello world'
)
print_tag(
'*'
,
20
,
3
)
|
1、定义阶段
1
2
3
4
5
6
|
def
foo():
print
(
'from foo'
)
bra()
def
bra():
print
(
'from bra'
)
|
1
2
|
def
func():
#语法没问题,逻辑有问题,引用 一个不存在的变量名
adfkgjklgnlfijg
|
2、调用阶段
调用函数的形式
语句形式
func()
表达式
res=func2(10)
res=10*func2(10)
函数调用当做参数传入另外一个函数
res=func2(func2(10))
1
|
foo()
#执行函数语句形式<br><br>================================<br><br>res=foo() #执行函数表达式形式 <br>print(res)
|
3、定义阶段:只检测语法,不执行代码
1
2
3
|
def
func():
if
1
>
2
print
(
'hahahaha'
)
|
4、定义函数的三种形式
无参函数
def func():
pass
有参函数
def func(x):
print(x)
空函数
def func()
pass
函数的使用:先定义,后调用
如何定义函数之定义函数的三种形式
1.定义无参函数:函数的执行不依赖于调用者传入的参数就能执行时,需要定义为无参函数
1
2
3
|
def
print_tag():
print
(
'*************************'
)
print_tag()
|
2.定义有参数:函数的执行需要依赖于调用者传入的参数才能执行时,需要定义为有参函数
1
2
3
4
5
|
def
func(x,y,
*
args):
print
(x,y)
print
(args)
func(
1
,
2
,
3
,
4
,
5
,
6
)
|
1
2
3
4
5
6
7
8
|
def
max2(x,y):
if
x > y:
return
x
else
:
return
y
res
=
10
*
max2(
20
,
2
)
#取大值乘10
print
(res)
|
1
2
3
4
5
6
7
8
9
|
def
max2(x,y):
if
x > y:
#如果x值比y大
return
x
#返回x值给函数max2
else
:
return
y
#否则返回y值
#11,23,100
res
=
max2(max2(
11
,
23
),
100
)
#比较x 、y的值,取大值接着比较
print
(res)
|
3 定义空函数:
1
2
3
|
#3 定义空函数:函数体为pass
# def func(x,y,z):
# pass
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def
auth():
'''用户认证'''
pass
def
get():
'''download file'''
pass
def
put():
'''upload file'''
pass
def
check_hash():
'''check file hash value'''
pass
|
总结
函数的使用必须遵循:先定义后使用的原则
函数的定义:与变量的定义是相似的,如果没有事先定义函数而直接引用,就相当于在引用一个不存在的变量名
补充:函数里没有return 默认返回none值
包含多个值,默认识别返回值成元组格式
返回值:可以返回任意类型
return的效果:只能返回一次值,终止函数的执行