zoukankan      html  css  js  c++  java
  • python函数(二)

    一:函数对象:函数是第一类对象,即函数可以当作数据传递

    =================================
    1 可以被引用
    2 可以当作参数传递
    3 返回值可以是函数
    4 可以当作容器类型的元素

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

    1.函数可以被引用

    1 def foo():
    2     print('from foo')
    3 func=foo
    4 
    5 print(foo)
    6 print(func)
    7 func()

    执行结果

    <function foo at 0x00000000006FF598>
    <function foo at 0x00000000006FF598>
    from foo

    函数名本身表示的就是内存地址,可以被其他对象引用

    2.被当做参数传递

    def foo():
        print('from foo')
    
    def bar(func):
        print(func)
        func()
    
    bar(foo)
    View Code

    执行结果

    <function foo at 0x000000000082F598>
    from foo

    3.返回值可以是函数

    def foo():
        print('from foo')
    
    def bar(func):
        return func
    
    f=bar(foo)
    
    print(f)
    
    f()

    执行结果

    <function foo at 0x0000000000A6F598>
    from foo

    bar(foo)返回的就是foo本身,所有f和foo都指向同一块内存地址

    4.可以当做容器类型的元素

    def select(sql):
        print('==========select')
    
    def delete(sql):
        print('==========delete')
    
    def insert(sql):
        print('==========insert')
    
    def update(sql):
        print('==========update')
    
    
    func_dict={
        'select':select,
        'update':update,
        'insert':insert,
        'delete':delete
    }
    
    while True:
        in_sql=input('sql>').strip()
        sql=in_sql.split()
        cmd=sql[0]
        if cmd in func_dict:
            func_dict[cmd](sql)
        else:
            print('error')
    View Code

    二、函数嵌套

    1.函数的嵌套定义

    def f1():
        def f2():
            print('from f2')
            def f3():
                print('from f3')
            f3()
        f2()
    
     f1()
    View Code

    2.函数的嵌套调用

    def max2(x,y):
        return x if x > y else y
    
    def max4(a,b,c,d):
        res1=max2(a,b)
        res2=max2(res1,c)
        res3=max2(res2,d)
        return res3
    
    print(max4(10,99,31,22))
    View Code

    三、名称空间与作用域

    (一)名称空间包含有三种

    1.内置名称空间

    2.全局名称空间

    3.局部名称空间

    引:名字(名称)的定义

    变量

    name='larry'

    函数

    def func():

       pass

    class human:

      pass

    1.内置名称空间

    随着解释器的启动而产生

    import builtins
    for i in dir(builtins):
      print(i)

    2.全局名称空间

    文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入该空间

    3.局部名称空间

    调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束解绑定

    x=10000
    def func():
        x=1
        print(x)
    
    func()
    print(x)
    View Code

    执行结果

    1

    10000

    (二)作用域

    1.全局作用域:内置名称空间,全局名称空间

    2.局部作用域:局部名称空间

    名字的查找顺序:局部名称空间---》全局名层空间---》内置名称空间

    x=1
    def func():
        x=2
        print(x)
        sum=123123
        print(sum)
    func()
    View Code

    执行结果

    2

    123123

    #查看全局作用域内的名字:gloabls()
    #查看局局作用域内的名字:locals()

    x=1000
    def func():
        x=2
    print(globals())
    print(locals())
    print(globals() is locals())
    View Code

    执行结果

    {'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000556C18>, '__spec__': None, '__package__': None, '__file__': 'C:/Users/larry/PycharmProjects/python/day04/fun_exc.py', '__cached__': None, '__name__': '__main__', '__doc__': None, 'func': <function func at 0x000000000071D6A8>, 'x': 1000, '__builtins__': <module 'builtins' (built-in)>}
    {'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000556C18>, '__spec__': None, '__package__': None, '__file__': 'C:/Users/larry/PycharmProjects/python/day04/fun_exc.py', '__cached__': None, '__name__': '__main__', '__doc__': None, 'func': <function func at 0x000000000071D6A8>, 'x': 1000, '__builtins__': <module 'builtins' (built-in)>}
    True

    x=1000
    def func():
        x=2
        print(globals())
        print(locals())
        print(globals() is locals())
    
    func()
    View Code

    执行结果

    {'func': <function func at 0x000000000102D6A8>, '__name__': '__main__', '__doc__': None, '__package__': None, '__spec__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000006B6C18>, '__file__': 'C:/Users/larry/PycharmProjects/python/day04/fun_exc.py', '__cached__': None, '__builtins__': <module 'builtins' (built-in)>, 'x': 1000}
    {'x': 2}
    False

    #全局作用域:全局有效,在任何位置都能被访问到,除非del删掉,否则会一直存活到文件执行完毕
    #局部作用域的名字:局部有效,只能在局部范围调用,只在函数调用时才有效,调用结束就失效

    x=1
    
    def f1():
        print(x)
    
    def foo():
        print(x)
    
    def f(x):
        x=4
        def f2():
            x=3
            def f3():
                x=2
                print(x)
    
            f3()
        f2()
    
    f(4)
    View Code

    函数调用时局部有效

  • 相关阅读:
    字节流
    类File
    try...catch语句
    Collections工具类
    类TreeMap
    类HashMap
    类TreeSet
    jquery 选择器加变量
    bootstrap 事件shown.bs.modal用于监听并执行你自己的代码【写hostmanger关联部门遇到的问题及解决方法】
    jquery中append、prepend, before和after方法的区别(一)
  • 原文地址:https://www.cnblogs.com/geek-ace/p/6906569.html
Copyright © 2011-2022 走看看