Python学习笔记四(函数)

作者: DragonFangQy | 来源:发表于2018-04-07 00:14 被阅读104次

    函数

    作用

    为了 提高编写的效率以及代码的重用,把具有独立功能的代码块组织为一个小模块,这就是函数

    格式

    def 函数名():
        代码
    

    调用函数

    函数名()  
    

    函数的文档说明

    方便了解函数的功能,便于维护

    def demo(arg1: int, arg2: str, arg3=None):
        """
    
        我是函数的文档说明
    
        :param arg1: int 参数1
    
        :param arg2: str 参数2
    
        :param arg3: 默认为None
    
        :return: None
    
        """
    
        # 鼠标左键点一下函数,Ctrl + Q
        pass
        
        
    
    函数的文档说明

    函数参数

    什么是参数?参数的作用?

    定义函数时,在小括号“()”中间的,使用的标识符,叫做参数,多个参数之间使用“,”(逗号)分隔。
    作用:为了让同一个函数可以执行出不同的结果,提高函数的灵活性

    定义带参函数

    def add2num(a, b):  # 参数根据需要数量可变,定义函数时的参数,叫做形参
        c = a+b
        print c
    

    调用带有参数的函数

     # 调用时函数的参数,叫做实参,
     # 实参的数量必须与形参的数量一样,且位置一一对应。
     # 如下 实参11 对应形参a 
    add2num(11, 22) 
    

    函数的返回值

    什么是返回值?为什么需要返回值?
    在函数中,使用return 关键字返回的数据叫做函数的返回值。
    作用:为了得到函数的处理结果,比如希望得到两个数相加的结果

    带有返回值的函数

    def add2num(a, b): 
        c = a+b
        return c
    

    接收函数的返回值

    # 调用函数,将函数的返回值赋值给变量,通过变量使用返回值
    result = add2num(100,98)  
    

    四种函数形式

    通过参数与返回值的组合,可以得到四种函数形式,可以根据需要灵活使用

    无参数,无返回值
    无参数,有返回值
    有参数,无返回值
    有参数,有返回值

    四种函数形式

    局部变量

    什么是局部变量?作用是什么?

    定义在函数内部的变量,叫做局部变量。在不同函数内部可以有相同名字的局部变量,但是他们之间互不干扰。
    作用:在函数内临时保存数据,让数据方便使用。

    # a,b,c 都是局部变量
    def add2num(a, b):
        c = a+b
        print c
    

    全局变量

    什么是全局变量?作用是什么?

    定义在函数外部的变量,叫做全局变量。
    作用:全局范围内都可以使用的变量

    # 定义全局变量
    a = 100
    
    def test1():
        print(a)  # 虽然没有定义变量a但是依然可以获取其数据
    
    def test2():
        print(a)  # 虽然没有定义变量a但是依然可以获取其数据
    

    局部变量与全局变量同名问题

    a =100  # 全局变量
    
    def add2num(a, b):   # 局部变量
        c = a+b
        return c
        
    
    • 函数内部,使用的是局部变量的值
    • 函数外部,或其他函数内部,使用的全局变量的值

    修改全局变量的值

    • 如果在函数中出现global 全局变量的名字,那么这个函数中即使出现和全局变量名相同的 变量名 = 数据,也理解为对全局变量进行修改,而不是定义局部变量。
    • 如果在一个函数中需要对多个全局变量进行修改,那么可以使用
         # 可以使用一次global对多个全局变量进行声明
         global a, b
         # 还可以用多次global声明都是可以的
         # global a
         # global b
    

    全局变量 与 局部变量的区别

    定义

    • 全局变量定义在函数外部
    • 局部变量定义在函数内部

    使用范围

    • 全局变量可以在全局范围内使用。(函数内部、函数外部)
    • 局部变量只能在定义变量的函数内部使用

    修改

    • 全局变量
    • 函数外 可以任意修改
    • 函数内 需要使用global 先声明之后,才能修改
    • 局部变量
    • 函数外 不能使用
    • 函数内 可以任意修改

    函数间共享数据

    • 全局变量
    # 全局变量
    a = 0
    
    
    def func1():
        global a  # 在 func1 里修改全局变量
        a = 100
        print('func1----a=', a)
    
    
    def func2():
        print('func2----a=', a)  # 在 func2 里可以使用 func1 的计算结果
    
    
    def func3():
        global a  # 使用全局变量,很容易被第三者修改数据,导致错误
        a = 300
        print('func3----a=', a)
    
    
    func1()
    func3()
    func2()
    
    • 函数传参
    #  函数传参
    def func1():
        a = 100
        print('func1----a=', a)
        return a  # func1 将结果作为返回值处理
    
    
    def func2(a):
        print('func2----a=', a)  # 在 func2 里可以使用参数来接收 func1 的计算结果
    
    
    def func3():
        global a
        a = 300
        print('func3----a=', a)
    
    
    tmp = func1()
    func3()
    func2(tmp) 
    
    • 函数的嵌套调用
    # 函数嵌套
    def func1():
        a = 100
        print('func1----a=', a)
        return a  # func1 将结果作为返回值处理
    
    
    def func2():
        a = func1()  # 在 func2 里直接调用 func1 并获取返回值
        print('func2----a=', a)
    
    
    def func3():
        global a
        a = 300
        print('func3----a=', a)
    
    
    func3()
    func2()
    
    

    函数多返回值以及返回多值

    多返回值

    一个函数根据情况的不同,会出现多个return。

    def demo(age):
        if age > 17:
            return "成年了"
        elif age > 12:
            return "青少年"
        else: 
            return "少年郎"
    

    返回多值

    同一个return,可以返回多个值。这里需要容器,来存放多个值。
    容器有 String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)、Set(集合),虽然有这么多容器 推荐使用List(列表)、Tuple(元组)、Dictionary(字典)

    为什么不推荐使用String(字符串)、Set(集合)
     
    因为String(字符串)可以 split() 字符串,可以产生一个列表,所以不如直接使用列表
    Set(集合)不能存储重复数据,而且不能存储列表,字典,集合

    def divid(a, b):
        quotient = a//b
        residue = a%b 
        return quotient, residue  # 默认是元组
    
    def divid(a, b):
        quotient = a//b
        residue = a%b 
        return [quotient, residue]  # 使用列表
    
    def divid(a, b):
        quotient = a//b
        residue = a%b 
        return {"quotient":quotient, "residue":residue}  # 使用字典
    

    函数参数

    缺省参数

    什么是缺省参数? 调用函数时,缺省参数的值如果没有传入,则取默认值。

    def demo(args1,args2=""):  # args2 就是缺省参数
        pass
    

    不定长参数

    • *args, 在变量args前使用一个 * (星号),表示用元组接收无人接收的位置参数
    • **kwargs,在变量kwargs前使用一个 ** (两个星号),表示用字典接收无人接收的关键字参数
    def demo(args1, *args, **kwargs):
        print(args)
    
        print(kwargs)
    
    
    demo(1, 2, 3, 4, 5, name="qwer", age=17, sex="gg")
    
    不定长参数

    拆包

    拆包

    交换变量的值

    • 中间变量
    a = 4
    b = 5
    c = 0
    
    c = a
    a = b
    b = c
    
    • 数学运算
    a = 4
    b = 5
    a = a+b  # a=9, b=5
    b = a-b  # a=9, b=4
    a = a-b  # a=5, b=4
    
    • 打包拆包
    a, b = 4, 5
    a, b = b, a
    

    引用

    变量通过数据在内存中的起始地址来读取数据


    引用

    不可变类型

    什么是不可变类型
    不可变,数据内容不可变。因为数据内容不可变,如果修改变量的值,则引用的地址会发生变化

    • Number(数字)
    不可变类型-Number
    • Boolean(布尔)


      不可变类型-Boolean
    • String(字符串)


      不可变类型-String
    • Tuple(元组)
    不可变类型-Tuple

    可变类型

    什么是可变类型

    可变,数据内容可变。因为数据内容可变,如果修改变量的值,则引用的地址不会发生变化

    • List(列表)


      可变类型-List
    • Dictionary(字典)


      可变类型-Dictionary
    • Set(集合)


      可变类型-Set

    到此结 DragonFangQy 2018.4.7

    相关文章

      网友评论

      本文标题:Python学习笔记四(函数)

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