函数
函数分为面向三种
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
(
)
|
函数之间的传参
扫描二维码关注公众号,回复:
1144208 查看本文章
![](/qrcode.jpg)
形参和实参的区分
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
)
|