Python编程-函数编程

1、定义一个函数

有return返回值的才叫函数,没有return返回值的叫做方法过程

def test(x):
    "The function defintiions"
    x+=1
    return x

2、函数参数

形式参数与实际参数

函数参数可以分为形参和实参。
形参:形式参数,不是实际存在的参数,是虚拟的变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数、类型应于形参一一对应)
实参:实际参数、调用函数时传给函数的参数,可以是常量、变量、表达式、函数、传给形参
其两者的区别是:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参

def test(x):
    "The function defintiions"
    x+=1
    return x


test(a)

函数参数也可以分为位置参数和关键字参数,其中位置参数与参数传递的顺序要保持一致,而关键字参数则无需固定位置

def test(x,y):
    print(x)
    print(y)

test(y=2,x=1) #关键字参数,与形参顺序无关
test(1,2)   #位置参数,与形参一一对应
默认参数

python的函数中还支持给参数设置默认值,在调用的时候可以不输入这些有默认值的参数。

def test(x,y=3):        #这里y=3就是一个默认值
    return x+y

test(2)
可变参数 args和*kwargs

args:接受N个位置参数,转换成元组
*
kwargs:接受N个关键字参数,转出成字典

def test4(name,age=18,*args,**kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)

test4('alex',age=34,sex='m',hobby='tesla')

#结果打印
alex    #位置参数
34    #位置参数
()    #由于前面两个位置参数都一一对应了,因此*args无额外的参数
{'sex': 'm', 'hobby': 'tesla'}        #**kwargs将关键字参数输出为字典

3、变量

Python中变量可以分为局部变量和全局变量
局部变量:只在函数里面生效的变量,函数就是变量的作用域;除了字符串、数据灯简单的变量外,列表、字典、数组等复杂的变量均可以通过修改函数中的局部变量,已达到修改全局变量的效果。
全局变量:程序运行过程中全局生效的变量,关键字global VAR

#默认情况下,局部变量的修改不会影响全局变量的值
def change_name(name):
    print("before change",name)
    name ="Alex li" #局部变量,这个变量就是这个变量的作用域
    print("After change",name)

name = "alex"

change_name(name)
print(name)

#Alex li
#alex

4、递归函数

递归函数:
在函数的内部,可以调用其他函数,如果一个函数在内部调用自身,这个函数就是递归函数。

递归特性:
1、必须有一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3、递归效率不高,递归层次过多会导致栈移除(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,
每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多会导致栈溢出)

5、高阶函数

变量可以指向函数,函数的参数能够接受变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数





posted @ 2022-07-31 10:40  酒粒  阅读(35)  评论(0编辑  收藏  举报