zoukankan      html  css  js  c++  java
  • 一:函数的基础知识

    今日 重点知识

    一:函数是第一类对象

      1.函数名可以被传递

    name = 'jason'
    x = name
    print(x)
    print(id(x),id(name))
    def func():
    print('func123')
    print('func')
    print(id(func))
    f=func #在函数定义阶段
    func()# 在函数调用阶段
    print(f,id(f),id(func))
    f() #其实指向的也是函数fun从指向航叔体代码的内存地址
    2.函数名可以被当做参数传递给其他函数
    def func():             # 第五步
    print('from func') #第六步
    def index(args): #第二步 func=args
    print(args) # 第三步 ====>print(func) 此时就是func中存的地址
    args() # 第四步
    print('from index') # 第七步
    index(func) # 第一步
    '''
    结果: <function func at 0x00000239C8223E18>
        from func
        from index
    3.函数名可以被当做函数的返回值
    def index():        #第七步
    print('index') #第八步
    def func(): #第二步
    print('func') #第三步 打印func
    return index #第四步 把index作为返回值返回给res
    res = func() # 第一步
    print(res) #第五步 res 相当于 index 就是答应他的地址
    res() #第六步 相当于index()
    结果为:func
    <function index at 0x000002A2459A3E18>
    index

    4.函数名可以被当做容器类型的参数

    def func():         #第二步
    print('func1') #第三步
    print(func()) #第一步
    l = [1,2,func,func()] #第四步
    print(l) #第五步
    结果为:func1
    None
    func1
    [1, 2, <function func at 0x000001F579AA3E18>, None]

     二:名称空间

      名称空间是什么?
         就是放名字的地方
         详细解释:存放的是变量名与变量值的内存地址得绑定关系的地方
        要想访问一个变量的值 必须先去名称空间中拿到对应的名字 才能够访问变量的值

        1,名称空间的分类:

          1,内置名称空间

            即python自身内部创建好的,提前定义好的,例如 len, max, min

          2,局部名称空间

            在函数内部的,函数体内创建的名字都属于局部名称空间

          3,全局名称空间

            相对于文件级别的,在for while,中创建的名字都是全局名称空间的

        2,生命周期(名称空间)

          1,内置名称空间:在python解释器启动时就已经创建好的,关闭解释器立马销毁

           2,全局名称空间:右键运行执行文件时创建,执行结束完立马销毁

           3,局部名称空间:函数调用时,自动创建,函数执行完毕,立马销毁,自动销毁

        3,名称空间的查找顺序:

            名字的查找顺序:

              1,首先要确定你当前在那(全局还是局部)

                1,站在全局:首先在全局找,找不到再去内置名称空间找

                2,站在局部:首先在局部找,找不到再去全局找,全局无就去内置找。

    +     总结:函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变(******) 

              局部与局部之间是并列关系,站在全局找,只有全局和内置

            作用域作用

    作用域

             全局作用域:   全局有效,:

                  内置名称空间

                  全局名称空间

      局部作用域:  局部有效

              局部作用域

      在局部修改全局的变量:global   

      global 在局部修改全局的不可变数据类型

          局部修改全局 如果想修改多个 逗号隔开

       nonlocal:局部修局部 如果想修改多个 逗号隔开

               
  • 相关阅读:
    [luogu p1164] 小A点菜
    [luogu p5018] 对称二叉树
    [luogu p1305] 新二叉树
    [luogu p1030] 求先序排列
    [luogu p1087] FBI树
    [luogu p1449] 后缀表达式
    [luogu p1160] 队列安排
    [luogu p1057] 传球游戏
    有趣的问题系列-主元素问题
    [luogu p1192] 台阶问题
  • 原文地址:https://www.cnblogs.com/Fzhiyuan/p/11167246.html
Copyright © 2011-2022 走看看