zoukankan      html  css  js  c++  java
  • 函数的对象、嵌套及作用域

    1、函数的对象

    函数的第一类对象的含义是函数可以被当做数据处理

    # def func(): #func=<function func at 0x0584BA50>
    # print('from func')
    # print(func) #打印函数名的地址 加括号即调用函数内容
    (1)引用
    def func(): #func=<function func at 0x0584BA50>
    print('from func')
    f=func
    print(f)
    f()
    2)把自己当成个参数传给函数
    def func(): #func=<function func at 0x0584BA50>
    print('from func')
    def foo(m):
    # print(m)
    m() #现在m就等于func,加括号就返回func函数的内容
    foo(func)

    3、可以当作函数的返回值
    def func(): #func=<function func at 0x0584BA50>
        print('from func')
    def foo(x): #x=func
    return x #return func
    res=foo(func)
    print(res) #打印了func函数的内存地址
    res() #返回了func的内容

    4、可以当作容器类型的元素
    def func(): #func=<function func at 0x0584BA50>
    print('from func')
    l=[func,]
    print(l) #打印函数内存地址
    # l[0]() 通过列表的索引取到函数的内存地址,加括号,返回函数内容
    
    
    func_dic={
    '1':pay,
    '2':withdraw,
    '3':transfer,
    '4':check_balance,
    '6':shopping
    }

    while True:
    msg="""
    1 支付
    2 取款
    3 转账
    4 查看余额
    5 退出
    6 购物
    """
    print(msg)
    choice=input('>>: ').strip()
    if choice == '5':break
    if choice not in func_dic:
    print('输入的指令不存在傻叉')
    continue
    func_dic[choice]()
     
    2、函数的嵌套定义
    def f1():
    def f2():
    print('from f2')
    f2()
    f1()

    # from math import pi
    # def circle(radius,action='area'): 求面积和周长
    # def area():
    # return pi*(radius **2 )
    # def perimeter():
    # return pi *2*radius
    # if action == 'area':
    # return area()
    # if action == 'perimeter':
    # return perimeter()
    # print(circle(15))
    # print(circle(15,action='perimeter') )

    函数嵌套的调用
    def max2(x,y):
    if x>y:
    return x
    else:
    return y
    def max4(a,b,c,d):
    res1=max2(a,b)
    res2 = max2(res1,c)
    res3= max2(res2,d)
    return res3
    print(max4(2,3,4,5))

    3、名称空间与作用域
    (1)名称空间是存放名字与值绑定关系的地方
    2)名称空间分为三大类
    内置名称空间:存放python解释器自带的名字(在解释器启动时生效,在解释器关闭时失效)
    全局名称空间:除了内置与局部名字外,其余都是全局名称空间(在文件执行时生效,在文件执行完毕时失效)
    局部名称空间:用于存放函数调用期间函数体产生的名字(如果调用某个函数才会临时生效,在函数执行完毕后失效)

    (3)三种名称空间的加载顺序是:
    内置-》全局-》局部
    (4)、作用域

    作用域:
        域指的是区域、范围,作用域即作用的范围

    全局作用范围,全局作用域(内置名称空间与全局名称空间)
    全局有效,全局存活
    局部作用范围,局部作用域(局部名称空间)
    局部有效,临时存活
    
    
    (5)函数对象+作用域:******
    x=1

    def f1()
    def inner():
    # print('from inner',x)
    # return inner
    #
    # f=f1()
    #
    # # print(f)
    #
    # def bar():
    # x=1111111111111111111111111111111111 #
    作用域关系是在函数定义阶段就固定死了,但凡调用函数都需要跑到定义阶段去找作用域关系

    # f()
    #
    # bar()










     
  • 相关阅读:
    php基础之简单运算
    选择平淡
    php基础之控制结构
    关于三元运算符的初步应用及理解
    VS2015 遇到异常。这可能是由某个扩展导致的
    C#中如何去除窗体默认的关闭按钮
    (转载)SQL基础--> 约束(CONSTRAINT)
    SQL Server安装后设置SQL Server验证登录
    附加数据库 对于 ""失败,无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    SQL Server数据库操作(二)
  • 原文地址:https://www.cnblogs.com/quqinchao/p/qqc_hs.html
Copyright © 2011-2022 走看看