zoukankan      html  css  js  c++  java
  • Python 基础之返回值与函数使用与局部变量和全局变量locals() 和 globals()

    一.函数的返回值 return

    return: 自定义返回值,返回到哪里? 返回到函数的[调用处]
    1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return,默认返回None
    2.return 如果执行了return,意味着,return后面的所有代码,通通不执行,函数终止了
    #(1)return 后面的数据类型
    #:

    def func():
        #return 1        #整型
        #return 3.14     #浮点型
        #return True     #bool类型
        #return 4j       #复数
        #return [1,2,3,4]  #列表
        return {"a":1,"b":2} #字典

    res = func() # res = {"a":1,"b":2}
    print(res)

    #(2)如果不写return,默认返回None
    def func():
        a = 1
    res = func()
    print(res)  #None

    #(3) 执行完return之后,函数立刻终止,后面的代码不执行

    #:
    def func():
        print("执行到1")
        print("执行到2")
        return 1
        print("执行到3")
        print("执行到4")
        return 2
    res = func()
    print(res)
    结果:

    执行到1

    执行到2

    1


    #(4)计算器

    #:
    print("<------------------->")
    def calc(sign,num1,num2):
        if sign == "+":
            res = num1 + num2
        elif sign == "-":
            res = num1 - num2
        elif sign == "*":
            res = num1 * num2
        elif sign == "/":
            if num2 == 0:
                return "大兄弟,除数不能为0"
            res = num1 / num2
        else:
            return "不会,别问我!!!!!!你是个有趣的灵魂."
        return res
    res2 = calc("^",5,0)
    print(res2)
    print("=============")
    res3 = calc("+",5,32)

    print(res3)

    结果为:

    不会,别问我!!!!!!你是个有趣的灵魂.

    =============

    37

     

    二.函数的使用

    #python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为返回值,叫第一类对象,其他语言功能有限
    #:
    def func():
        print(1)
     #输出:1

    1.函数名是个特殊的变量,可以当做变量赋值

    #变量的赋值操作
    func2 = func
    func2() #func()

    #动态的销毁变量
    del func2 #del 关键字 用来删除变量的
    #func2() #error

    2.函数名可以作为容器类型数据的元素

    print("<=============>")
    def func1():
        print(1)
    def func2():
        print(2)
    def func3():
        print(3)
    def func4():
        print(4)

    #也可以这样:法一:
    #lst = [func1(),func2(),func3(),func4()]
    #for i in lst:
    #     i

    结果为:

    1

    2

    3

    4

    #法二:
    lst = [func1,func2,func3,func4]
    for i in lst:
        #print(i)
        i()  #函数的调用

    结果为:

    1

    2

    3

    4

    3.函数名可以作为函数的参数

    #1:

    def func(a): #a = func2
        res = a()
        print(res)

    def func2():
        return 123
    func(func2)

    #结果解析:

    #func2 => 123 => res = 123

    4.函数名作为函数的返回值

    #:
    def func(a): #a =>
        return a

    def func2():
        return 456

    #函数的调用
    res = func(func2) #func2是一个函数地址
    print(res)   #的地址
    total = res() #res() ==> func2()
    print(total)

    结果为:

    <function func2 at 0x00000000027310D0>

    456

    #__doc__或者help查看文档
    #(1)help
    #help (print)
    #(2)__doc__魔术属性
    res = print.__doc__
    print(res)

    #(3)自定义函数文档
    print("-==================")
    def kao_qiezi(qimin):
        '''
        功能:告诉你如何做茄子
        参数:是一个器皿
        返回值:返回烧烤状态
        '''
        print("从中间抛开,扔到烧烤架子上面")
        print("扔胡椒面,扔孜然,扔蒜蓉,扔香菜")
        print("用一个%s来盛放" %(qimin))
        return "这个茄子做好了"
    kao_qiezi("盘")
    print("====-------=======")
    help(kao_qiezi)
    print('4567==============')
    res =kao_qiezi.__doc__
    print(res)

    结果为:(第一个输出函数的结果,第二和第三输出都是帮助文档内容)

    从中间抛开,扔到烧烤架子上面

    扔胡椒面,扔孜然,扔蒜蓉,扔香菜

    用一个盘来盛放

    ====-------=======

    Help on function kao_qiezi in module __main__:

     

    kao_qiezi(qimin)

        功能:告诉你如何做茄子

        参数:是一个器皿

        返回值:返回烧烤状态

     

    ==================

     

        功能:告诉你如何做茄子

        参数:是一个器皿

    返回值:返回烧烤状态

     

    三.局部变量 与 全部变量

    局部变量:在函数内部声明的变量就是局部变量
    全局变量:在函数外部声明的变量或用global关键字在函数内部声明的变量
    作用域:作用的范围
    局部变量:作用范围在函数的内部
    全局变量:作用范围横跨整个文件

    1.局部变量的获取和修改

    def func():
        a = 1
        #获取局部变量
        print(a)
        #修改局部变量
        a = 2
        print(a)
    func()

    2.全局变量的获取和修改

    #1:

    c = 15
    #获取
    #修改
    c = 78
    print(c)

    #在函数内部通过global 修改全局变量

    def func():
        #如果不加global c 只能获取 不能修改
        #加了global c 告诉系统在函数内部允许修改全局变量c
        global c
        print(c)
        c = 90
    func()
    print("======全局变量=====")
    print(c)
    结果:

    78

    78

    ======全局变量=====

    90

     

    #2:
    #在函数内部通过global 定义全局变量
    def func():
        global ff
        ff = 908
        print(ff)
    func()
    print(ff)

     

    输出:

    908

    908

    python特有:
    如果外部存在该全局变量,那么利用golbal关键字,可以允许在函数内部修改全局变量
    如果外部不存在该全局变量,那么利用global关键字,可以允许在函数内部定义全局变量
    在使用global 关键字的时候,一般写在函数内部的第一行

     

    四.locals()  globals()

    #locals  globals

    1.locals 获取当前作用域的所有变量

    locals 如果在函数外面,获取locals()返回值打印之前,所有的内容
    locals 如果在函数的里面,获取locals调用之前,所有的内容
    #1:
    #获取打印返回值之前的所有内容
    a = 10
    b = 20
    res = locals()
    c = 20
    print(res) 
    d = 30
    运行后可知d没有被存到locals()的内存中c是有的,如下为res的打印,是一个字典,没有d的键值对:

     

    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000179AD15C2B0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/pystu/pystudy/Knight/test.py', '__cached__': None, 'a': 10, 'b': 20, 'res': {...}, 'c': 20}

     


    #2:

    #获取locals调用之前的所有的内容
    def func():
        f1 = 11
        f2 = 12
        res = locals()
        f3 = 13
        print(res)

    func()
    输出的结果:(f3没有到res内存中的)

    {'f2': 12, 'f1': 11}

    2.globals 只获取全局变量(无论在函数内外都只获取全局变量)

    globals 如果在函数的外面,获取globals() 返回值打印之前,所有内容
    globals 如果在函数的里面,获取globals调用之前,所有的内容

    #1:
    a = 15
    b = 15
    res = globals()
    c = 26
    print(res)
    d =27
    #res的结果中,c 没有d

    #2:
    z1 = 5
    z2 = 6
    def func():
        f1 = 1
        f2 = 2
        f3 = 3
        res = globals()
        f4 = 6
        print(res)
    z4 = 8
    func() #res = globals()

    z3 = 7
    #因为f1,f2,f3,f4是局部变量所以都没有,然后是获取打印之前的所以没有z3

    3.globals 动态创建全局变量

    globals 返回的是系统的 全局命名空间的字典 在空间里面放的全局变量
    #:
    dic = globals()
    print(dic,type(dic))
    dic['wangwen'] = 188
    print(dic['wangwen'])

    #已经在dic字典中了


    #2:
    #globals 可以批量创建全局变量
    def func():
        res = globals()
        for i in range(5):
            res["a%d" % (i)] = i
            '''
            "a%d" % (i) #字符串的格式化
          res['a0'] = 0
          res['a1'] = 1
          res['a2'] = 2
          res['a3'] = 3
          res['a4'] = 4        
            
            '''
    func()
    print(a0)
    print(a1)
    print(a2)
    print(a3)
    print(a4)

     

     

  • 相关阅读:
    如何在Linux下的C++文件使用GDB调试
    21天学通C++(C++程序的组成部分)
    嵌入式Linux应用程序开发
    项目部署的问题
    未解决
    报错
    随笔
    逆向工程出现的错误1
    jpa学习
    springmvc整合mybaits
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/10851282.html
Copyright © 2011-2022 走看看