• 函数初接触2


    第十天


     

    函数对象

    函数是第一类对象

    函数名是可以被引用的

    def foo():
       print('hello wanglu')
    a = foo
    a()

    函数名可以当做参数传递


    def foo(a, b, doo):
       print(a, b, doo)
       doo()

    def coo():
       print('hello wanglu')
    foo(1,2,coo)

    函数名可以当做返回值使用

    传参的时候没有特殊需求,但一定不要加括号,不让当场执行

    def foo():
       print('hello wanglu')
    def doo(a):
       return a
    a = doo(foo)
    print(a)
    a()

    函数名可以被当做容器类型的元素

    # 例题1
    def foo():
       print('hello wanglu')
    l1 = [1, '2', foo, foo()]
    f = l1[2]
    print(f)
    f()
    # 例题2
    def register():
       print('register')
    def login():
       print('login')
    def shopping():
       print('shopping')
    def pay():
       print('pay')
    doo = {
       '1':register,
       '2':login,
       '3':shopping,
       '4':pay
    }
    def moo():
       while True:
           print('''
          1、注册
          2、登录
          3、购物
          4、付款
          5、退出
          ''')
           l1 = input('输入对应的编号:').strip()
           if l1 == '5':
               break
           elif l1 not in doo:
               continue
           else:
               doo[l1]()
    moo()

    函数的嵌套

    在函数内调用函数

    # 例题1
    def foo():
       print('hello wanglu')
    def coo():
       foo()
       print('ko ko da yo')
    coo()
    # 例题2
    def foo(x,y):
       if x > y:
           return x
       else:
           return y
    # print(foo(1,2))

    def foot(x,y,z,w):
       roo = foo(x,y)
       roo = foo(roo,z)
       roo = foo(roo,w)
       return roo
    print(foot(1,20,50,4444))

    函数嵌套的定义

    def foo():
       def coo():
           print('hello wanglu')
       coo()
    foo()

    名称空间


    什么是名称空间

    存放名字(变量名,函数名等)的空间


    如果你想访问一个变量值,必须先访问对应的名称空间,拿到名字和对应的内存地址的绑定关系


    名称空间的分类

    1、内置名称的空间

    就是存储python提前给你定义好的名字,的空间

    2、全局名称空间

    存放于文件级别的名字,就是全局名称空间

    如if、while、for内部定义的名字执行之后都存放于全局名称空间

    3、局部名称空间

    函数内部定义的所有名称都存放在当前函数的内置名称空间里


    生命周期

    1、内置名称空间

    在python解释器启动的时候生效,关闭解释器的时候失效

    2、全局名称空间

    当你启动当前py文件时生效,当页面代码执行完毕时失效

    3、局部名称空间

    当你调用当前函数时生效,函数体最后一行代码执行结束就失效


     

    名称空间的查找顺序:

    局部:局部>全局>内置

    全局:全局>内置 内置再找不到就报错

    函数内部使用的名字,在定义阶段已经规定死了,与你的调用位置无关

    x = 111
    def foo():
       x = 222
       def foo2():
           x = 333
           def foo3():
               x = 444
               def foo4():
                   x = 555
                   # print(x)
                   print('hello wanglu')
               foo4()
           foo3()
       foo2()
    foo()


    # 例题2

    x = 111
    def foo():
       print(x)
       def foo2():
           print(x)
       return foo2
    foo()

    f = foo()
    f()  # 打印三遍

    作用域


    """
    作用域的分类:
      1、全局作用域
          全局可以调用的名字就存在于全局作用域

          内置名称空间+全局名称空间
      2、局部作用域
          局部可以调用的名字就存放与局部作用域
          局部名称空间

    global:声明全局变量(***)
    nonlocal:在局部名称空间声明局部变量,在局部修改上层函数
    的变量(*)

    只有可变类型可以在局部修改外部变量的值 (*****)
    """


    # x = 1
    #
    # def index():
    #     global x
    #     x = 2
    # index()
    #
    # print(x)


    # 在局部修改外部函数的变量
    # x = 1111
    #
    #
    # def index():
    #     x = 1
    #
    #     def func2():
    #         x = 2
    #
    #         def func():
    #             nonlocal x
    #             x = 3
    #
    #         func()
    #         print(x)
    #
    #     func2()
    #     print(x)
    #
    #
    # index()
    # print(x)

    # l1 = []
    # def index(a):
    #     l1.append(a)
    #     # print(l1)
    # index(1)
    #
    # print(l1)

    # 局部变量的修改无法影响上层,上上层

    def index():
       x = 1

       def index2():
           nonlocal x
           x = 2

       index2()
       print(x)


    index()

     

  • 相关阅读:
    cordova封装h5为app,cookie不可用解决方法
    Cordova环境搭建
    HelloWorld
    《机器学习实战》-朴素贝叶斯
    《机器学习实战》-决策树
    《机器学习实战》-k近邻算法
    《机器学习实战》-机器学习基础
    单输出感知机及其梯度
    损失函数及其梯度
    激活函数及其梯度
  • 原文地址:https://www.cnblogs.com/zhangjinyi97/p/11837904.html
Copyright © 2020-2023  润新知