函数
函数分为面向三种
1
2
3
4
5
6
7
|
1、面向对象
2、面向过程
3、函数式编程
函数的特点是
重用(简化代码)、保持一致性、可扩展性
函数是有返回值的方法如下面代码
|
1
2
3
4
5
6
7
8
9
|
def
demo_fuc(): #
函数有返回值
'''testing'''
print("in
the demo_fuc")
demo1()
return
0
|
1
|
过程是没有返回值的,如下面代码
|
1
2
3
4
5
6
7
|
def
demo_fuc1(): #
过程是没有返回值的函数
'''testing1'''
print("in
the demo_fuc1")
demo1()
|
函数之间的传参
形参和实参的区分
1
2
3
4
5
6
|
# 形参和实参是一一对应的
def
demo_parameter(x,
y): #
x y 代表形参
print(x)
print(y)
|
1
|
demo_parameter(1,
2) #
12是实参 这是位置参数调用 参数化与位置对应
|
参数的调用分为位置参数调用、关键字参数调用
1
2
3
|
demo_parameter(y=3,
x=4) #
关键字调用 与形参顺序无关
demo_parameter(1,
y=8) #
关键参数必须写在位置参数后面
|
Python中有默认参数的概念
1
2
3
4
5
6
7
8
9
10
11
|
# 默认参数
# 默认参数的特点:默认参数可有可无 非必填像
# 用途:默认安装值 True or false,数据库端口号
def
default(x,
y=3): #
y 有默认参数
print(x)
print(y)
|
Python中有参数组的概念
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 参数组*args
# 参数组定义完单个* 转成元组
def
parameter_group(*args): #
参数组 只接受N个位置参数 转换成元组的形式
print(args)
parameter_group(1,
2.3,
3)
def
blend_parameter(x,
*args): #
扩展参数 相传多少穿多少 args是规范
print(x)
print(*args)
|
Python中还可以传key value 这种格式的参数 在形参写为**args
1
2
3
4
5
6
7
8
9
10
|
def
dict_parameter(**args): #
将传的N个 关键字 参数转成字典的方式 关键字
print(args)
print(args['name']) #
获取字典的value
print(args['age'])
dict_parameter(name='hyf',
age=11)
|
各种参数的使用是有顺序的看下面代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 位置参数、默认参数、可变参数、关键字参数4种一起用的话,必须按照前面的顺序来使用
def
All(name,
age=18,
*args,
**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
All('houyafan',
1,
23)
|
高阶函数
1
2
3
4
5
6
7
|
def
add(a,b,f):
return
f(a)+f(b)
a=add(1,-2,abs())
# 将函数传进去去处理里面的值 没什么卵用 one day i can do it
print(a)
|
五、局部变量
1
2
3
4
5
|
1、局部变量只在函数中生效,
这个函数就是这个变量的作用域
2、全局变量是在整个程序都生效的变量
3、函数中是不更改全局变量的
如果要更改需要声明global
teacher
4、只有字符串和数字不能在函数里面更改
<strong>*****禁忌:不应该在函数里面更改全局变量*****</strong>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
teacher
=
'alxe'
def
chang_name():
global
teacher #
声明更改全局变量 禁忌:不应该在函数里面更改全局变量
teacher
=
'houyafan'
print(teacher)
chang_name()
print(teacher)
|
六、递归
递归的定义
1
2
3
4
5
6
7
8
|
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归特性:
1.
必须有一个明确的结束条件
2.
每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧<em
id="__mceDel">每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,</em>
|
1
2
|
<em>所以,递归调用的次数过多,会导致栈溢出)
</em>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 最简单的递归函数
def
calc(x):
print(x)
if
int(x/2)
>
0:
return
calc(int(x/2))
print(x)
calc(10)
|