【python | linux05】函数用法详解(二)

206 阅读2分钟

​ ​携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅
✒️个人主页:小鹏linux
💊个人社区:小鹏linux(个人社区)欢迎您的加入!

1.函数的嵌套调用及变量

1.1 函数调用函数

案例

def test1():print('---- test1 start----')                                          2print(' 这里是test1 函数执行的代码...( 省略)...')      3print('---- test1 end----')                                           4def test2():print('---- test2 start----')                                           1test1()print('---- test2 end----')                                            5test2()

1.2 函数嵌套的应用

1.2.1练一练:打印一条线和打印多条线

#打印一条直线的功能
def printOneLine():
print("-"*30)
#打印多条线
def printNumLine(num):
    i = 0
    '''
    因为已经有了打印横线的功能,
    所以不需要再重新编写此功能,
    只需要调用就可以了
    '''
    while i<num:
        printOneLine()
        i+=1
printNumLine(3)

**1.2.2练一练: **计算三个数的平均值,使用两个函数完成

def sum3(a,b,c):
    return a+b+c
#求三个数的平均值
def avg3(a1,a2,a3):
    result = sum3(a1,a2,a3)/3
    print("它们的平均值是:%.2f"%result)
avg3(10,20,34)

1.3 局部变量

局部变量,就是在函数内部定义的变量

不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响.

1.3.1 举例

def test1():    a = 100  #这个就是局部变量    print("test1()中的a == %d"%a)
def test2():    a = 10    print("a==%d"%a)test1()test2()

1.3.2 作用

为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用。

1.4 全局变量

如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量

1.4.1 举例

a = 100  #这个就是全局变量;全局变量可以被任何函数使用def test1():    a = 1      #当全局变量和局部变量名字相同时,会优先使用局部变量,谁离输出结果近就输出谁,局部变量会覆盖当前函数的全局变量     print(a)def test2():    print("test2 a == %d"%a)test1()test2()
g_a = 100  #这个就是全局变量;全局变量可以被任何函数使用def test1():    global g_a       #函数值添加global后局部变量会覆盖全局变量,推荐在使用这种方法时加g_    g_a = 1         print(g_a)def test2():    print("test2 a == %d"%g_a)test1()test2()
#可变类型的全局变量info = [100,200]name = {"name":"张三","age":30}def test1():    #print("info修改之前==",info)    #print("name修改之前==",name)    info.append(300)    name["sex"] = "男"    #info = [1, 2]    #name = {"name": "aa", "age": 11}    print("info修改之后==",info)    print("name修改之后==",name)def test2():    print("test2中调用info==",info)    print("test2中调用name==",name)test1()test2()

1.5 总结

在函数外边定义的变量叫做全局变量全局变量能够在所有的函数中进 行访问如果在函数中修改全局变量,那么就需要使用global 进行声明,否则出错如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧就近原则全局变量要定义在函数调用前,否则会报错在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。

1.6 py 文件中写代码顺序

#!/usr/bin/pythonutf-8import xxx全局变量函数的定义定义类---------下面都是调用-------调用函数创建类的实例对象执行实例对象的函数

2.匿名及递归函数

2.1 什么是递归函数

通过前面的学习知道一个函数可以调用其他函数。

如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数

2.1.1 举例

#阶乘
#一、使用循环实现计算阶乘i = 1sum = 1while i<=4:    sum =i    i+=1print("使用while循环计算4的阶乘==%d"%sum)#二、使用函数嵌套实现计算阶乘def x(num):    if num ==1:        return numdef xx(num):    # 当前num=2,计算31!  21=2    return 2x(num-1)def xxx(num):    # 当前num=3,计算32! 32=6    return 3xx(num-1)def xxxx(num):    #当前num=4,计算43!  46 = 24    return 4xxx(num-1)print("使用函数嵌套调用计算4的阶乘==%d"%xxxx(4))#三、使用递归函数实现计算4的阶乘def calcNum(num):    #当前num=4 , 计算43!    if num > 1:        res = numcalcNum(num-1)    else:        res = 1    return resa = calcNum(998)      #最大998print("使用递归函数计算4的继承==%s"%a)print(len(str(a)))

2.2 匿名函数

匿名函数定义

用lambda 关键词能创建小型匿名函数。这种函数得名于省略了用def 声明函数的标准步骤。

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression(方法)
def sum(arg1,arg2):    return arg1+arg2sum = lambda arg1,arg2 : arg1+arg2#lambda 函数能接受任何数量的参数,但只能返回一个表达式的值print(sum(10,20))

2.3 应用场合

2.3.1作为内置函数的参数- - 表达式

def fun(a,b,opt):    print("a=%d"%a)    print("b=%d"%b)    print("result=%d"%opt(a,b))#opt = lambda x,y:xyfun(1,2,lambda x,y:xy)

2.3.2作为内置参数传递- - 排序

stus = [    {"name":"zhangsan","age":18},    {"name":"lisi","age":19},    {"name":"wangwu","age":17}]print("原来的列表=",stus)#根据name排序#x = {"name":"zhangsan","age":18}stus.sort(key=lambda x:x["age"],reverse=True)print("排序后的列表=",stus)

👑👑👑结束语👑👑👑