美文网首页
2021-09-12-P86-P95-字符串-马士兵Python

2021-09-12-P86-P95-字符串-马士兵Python

作者: FFwizard | 来源:发表于2021-09-12 22:24 被阅读0次

    2021-09-10

    视频链接

    课程介绍

    1、函数的创建和调用
    2、函数的参数传递
    3、函数的返回值
    4、函数的参数定义
    5、变量的作用域
    6、递归函数

    86、函数的创建和调用

    什么是函数?

    执行特定任务和以完成特定功能的一段代码

    为什么需要函数?

    复用代码、隐藏实现细节、提高可维护性、提高可读性便于调试

    函数的创建

    deg 函数名(【输入参数】):
    函数体
    [return XXX]

    ##86、函数的创建和调用
    def calc(a,b):
        c=a+b
        return c
    calc(10,20)  # 30
    

    87、函数调用的参数传递

    位置实参:根据形参对应的位置进行实参传递
    关键字实参:根据形参名称进行实参传递


    image.png

    88、函数的参数传递的内存分析

    image.png
    ##88、函数的参数传递的内存分析
    def fun(arg1,arg2):
        print('arg1',arg1)
        print('arg2', arg2)
        arg1=100
        arg2.append(10)
        print('arg1',arg1)
        print('arg2', arg2)
    n1=11
    n2=[22,33,44]
    print('n1',n1,'n2',n2)
    print(fun(n1,n2))  #位置传参,n1,n2是实参;arg1,arg2是形参,形参可以和实参名称不等
    print('n1',n1,'n2',n2)
    '''在函数调用过程中,进行参数的传递
    如果是不可变对象,在函数体的修改不会影响实参的值 arg1的修改为100,不会影响n1的值
    如果是可变对象,在函数体的修改会影响到实参的值 arg2的修改,append(10),会影响到n2的值'''
    

    89、函数的返回值

    函数返回多个值时,结果为元祖

    image.png
    ##89、函数的返回值
    bool(0)   #0的布尔值为False
    bool(8)   #非0的布尔值为True
    def fun(num):
        odd=[]
        even=[]
        for i in num:
            if i %2:
                odd.append(i)
            else:
                even.append(i)
        return  odd,even
    #函数的调用
    lst=[10,29,34,23,44,54,55]
    print(fun(lst))
    '''函数的返回值
    (1)如果函数没有返回值【函数执行完毕之后,不需要给调用处提供数据】return可以省略不写
    (2)函数的返回值,如果是1个,直接返回原值
    (3)函数的返回值如果是多个,返回的结果为元祖'''
    def fun1():
        print('hello')
        #return  #不需要返回值可以省略
    fun1()
    def fun2():
        return 'hello'
    res=fun2()
    print(res)  # 如果一个值,则返回原值
    def fun3():
        return 'hello','world'
    print(fun3())  # 返回多个值,则返回元祖
    '''函数在定义是,是否需要返回值,视情况而定'''
    

    90、函数的参数定义

    函数定义的默认值参数

    函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参

    image.png

    91、函数的参数定义

    个数各边的位置参数

    定义函数是,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
    使用*定义个数可变的位置形参
    结果为一个元祖

    ####个数各边的位置参数
    def fun(*args):  #函数定义可变的位置参数
        print(args)
    fun(10)
    fun(10,20)
    fun(10,20,30)
    

    个数可变的关键字形参

    使用**定义个数可变的位置形参
    结果为一个字典

    ####个数各边的位置参数
    def fun(*args):  #函数定义可变的位置参数
        print(args)
    fun(10)
    fun(10,20)
    fun(10,20,30)
    ####个数可变的关键字形参
    def fun1(**args):  #函数定义可变的位置参数
        print(args)
    fun1(a=10)
    fun1(a=20,b=30,c=40)
    print('hello','world') # print即定义了个数可变的位置参数
    '''def fun2(*args,*a):
        pass
        以上代码,程序会报错,个数可变的位置参数,只能是1个
        def fun2(**args,**a):
        pass
        以上代码,程序会报错,个数可变的关键字参数,只能是1个'''
    def fun2(*arg1s,**args2):
        pass
    '''def fun3(**arg1s,*args2):
        pass
        在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参
        要求个数可变的位置形参放在个数可变的关键字形参的前面
    '''
    

    92、函数的参数总结

    image.png
    def fun(a,b,c): #a,b,c在函数定义出,是形式参数
        print('a=',a)
        print('b=',b)
        print('c=',c)
    fun(10,20,30)  #函数调用时的参数传递,成为位置传参
    lst=[11,22,33]
    fun(lst)  #报错
    fun(*lst)  #在函数调用时,将列表中的每个元素都转换为位置实参传入
    
    fun(a=100,c=300,b=200)
    dic={'a':111,'b':222,'c':333}
    fun(**dic)  #在函数调用时,将字典中的键值对都转换为关键字实参传入
    
    def fun(a,b=10):  #b是形参,而且进行了赋值,b称为默认值形参
        print('a=',a)
        print('b',b)
    def fun2(*args):
        print(args)
    def fun3(**args2):
        print(args2)
    fun2(10,20,30,40)
    fun3(a=11,b=22,c=33,d=44)
    
    def fun4(a,b,c,d):
        print('a',a)
        print('b',b)
        print('c',c)
        print('d',d)
    #调用fun函数
    fun4(10,20,30,40)  #位置实参传递
    fun4(a=10,b=20,c=30,d=40)  #关键字实参传递
    fun4(10,20,c=30,d=40)  # 前两个参数,采用的是位置实参传递,而c,d采用的是关键字实参传递
    '''需求,c和d只能采用关键字实参传递'''
    def fun4(a,b,*,c,d):  #*之后的参数,在函数调用时,只能采用关键字实参传递
        print('a',a)
        print('b',b)
        print('c',c)
        print('d',d)
    
    '''函数定义时的形参的顺序问题'''
    def fun5(a,b,*c,d,**args):
        pass
    def fun6(*args,**args2):
        pass
    def fun7(a,b=20,*args,**args2):
        pass
    

    93、变量的作用域

    变量的作用于定义:程序代码能访问该变量的区域
    根据变量的有效范围可分为
    局部变量:在函数内部有效
    全局变量:在函数内外都有效

    ##93、变量的作用域
    def fun(a,b):  # a,b为函数的形参,作用范围函数内部,相当于局部变量
        c=a+b  #c为局部变量,函数内定义的变量
        print(c)
    print(a,b,c) #均报错,a,b,c超出了起作用的范围
    name='杨老师'  #name的作用范围为函数内外部都可以使用,称之为全局变量
    print(name)
    def fun2():
        print(name)
    fun2
    
    def fun3():
        global age  #函数内部定义的变量使用global申明,就可以从局部变为全局变量
        age=20
        print(age)
    fun3()
    

    94、递归函数

    什么是递归函数?

    一个函数的函数体内调用了该函数本身

    递归函数的组成部分

    递归条件与递归终止条件

    递归函数的调用过程

    每递归调用一次函数,都会在栈内存分配一个栈帧
    没执行完一次函数,都会释放相应的空间

    递归的优缺点

    缺点:占用内存多,效率低下
    有点:思路和代码简单
    fac是阶乘函数,fac(1)的阶乘是1

    image.png
    def fac(n):
        if n==1:
            return 1
        else:
            return n*fac(n-1)
    fac(6)
    

    95、斐波拉切函数

    斐波拉切函数定义

    第一个位置的数字是1,第2个位置的数字是1,第3个位置是前两个位置的数字之和,依次类推

    ##95、斐波拉切函数\
    def fb(n):
        if n==1:
            return 1
        elif n==2:
            return 1
        elif n>2:
            return fb(n-1)+fb(n-2)
    fb(6)
    #输出这个数列的前6位数字
    for i in range(1,7):
        print(fb(i))
    

    知识点总结

    image.png

    相关文章

      网友评论

          本文标题:2021-09-12-P86-P95-字符串-马士兵Python

          本文链接:https://www.haomeiwen.com/subject/qxxzwltx.html