• 函数可以被当做数据处理


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

    def func(): #func=<function func at 0x0584BA50>
    print('from func')

    # print(func)


    x='hello'
    #1、引用
    # y=x
    # f=func
    # print(f)
    # f()


    #2、当作参数传给一个函数
    # len(x)
    # def foo(m):
    # # print(m)
    # m()
    #
    # foo(func)


    #3、可以当作函数的返回值
    # def foo(x): #x=func
    # return x #return func
    #
    # res=foo(func)
    # print(res)
    # res()

    #4、可以当作容器类型的元素
    # l=[x,]

    # l=[func,]
    # # print(l)
    #
    # l[0]()

    # def qWithdraw():
    # print("取款..")
    # def zTransfer():
    # print("转账..")
    # def zpayment():
    # print("支付")
    # def cpayment():
    # print("存款")
    # def shopping():
    # print("购物")
    # def yue():
    # print("看余额")
    # dic={
    # "1":qWithdraw,
    # "2":zTransfer,
    # "3":zpayment,
    # "4":cpayment,
    # "5":shopping,
    # "6":yue
    # }#留意数字是否是字符串还是数字,避免报错
    #
    # while True:
    # msg='''
    # 1 取款
    # 2 转账
    # 3 支付
    # 4 存款
    # 5 购物
    # 6 看余额
    # 7 退出
    # '''
    #
    # print(msg)
    # choice = input(">>:").strip()
    # if choice == "7":break
    # if choice not in dic:
    # print("选择不正确")
    # continue
    # dic[choice]()

    #函数的嵌套定义
    def f1():
    def f2():
    print('from f2')
    f2()
    f1()


    from math import pi #调用pi 圆周率
    def circle(radius,action="area"):#默认参数action
    def area(): #嵌套函数计算面积
    return pi * (radius ** 2)
    def perimeter():#嵌套函数计算面积
    return pi * radius *2
    #内部两个函数
    if action == "area":
    return area() #计算后的返回值
    elif action == "perimeter":
    return perimeter() #计算后的返回值
    print(circle(11)) #输入值获得反馈

    print(circle(12,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(1,2,3,4))

    '''


    1、名称空间namespaces
    存放名字与值绑定关系的地方

    2、名称空间分为三大类
    内置名称空间:
    作用:存放python解释器自带的名字
    生命周期:
    在解释器启动时生效,在解释器关闭时失效

    全局名称空间:
    作用:除了内置的与局部的名字外,其余都是全局名字
    生命周期:
    在文件执行时生效,在文件执行完毕时失效

    例如:x,func,y,l,z都是
    x=1
    def func():
    a=1

    y=2
    l=[1,2]

    if 3 > 2:
    if
    if
    if
    z=3
    局部名称空间:
    作用:用于存放函数调用期间函数体产生的名字
    生命周期:
    在文件执行过程
    如果调用了某个函数才会临时生效,在函数执行完毕后失效

    三种名称空间的加载顺序是:
    内置-》全局-》局部

    名称空间就是用来存放名字与值的绑定关系的,所以但凡要查找名字
    一定是从三者之一找到,查找顺序:
    从当前所在的位置倒着查找,如果当前所在的位置是局部名称空间,
    则查找顺序是:
    局部-》全局-》内置

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

    全局作用范围,全局作用域(内置名称空间与全局名称空间)
    全局有效,全局存活
    局部作用范围,局部作用域(局部名称空间)
    局部有效,临时存活

    '''

    # x=1
    # # len=100
    # def func():
    # y=2
    # len=1000
    # # print(len)
    # print(a)
    # # func()
    #
    # print(len)


    # def func():
    # y=2
    # print(x)
    #
    # x=1
    # func()
    #
    # x=10

    # x=1
    # def f1():
    # def f2():
    # def f3():
    # zzz=333
    # print(x)
    # # x = 22222
    # f3()
    # # x=111111
    # f2()
    #
    # def bar():
    # print(x)
    #
    # f1()
    # bar()


    # 作用域关系是在函数定义阶段就固定死了,但凡调用函数都需要跑到定义阶段去找作用域关系
    # x=1
    # def f1():
    # print(x)
    #
    # # f1()
    # x=1000000000000000000000000000000000000000000000000000000000000000
    # def f2():
    # # print(f1)
    # x=11111111111111111111111111111
    # f1()
    #
    # f2()

    #函数对象+作用域:******
    # def f1():
    # x=1
    # def inner():
    # print('from inner',x)
    # return inner
    #
    # f=f1()
    #
    # # print(f)
    #
    # def bar():
    # x=111111111111111111111111111111111111111111111
    # f()
    #
    # bar()


    #
    # x=1
    # def foo():
    #    global x
    #    x=2
    #
    # foo()
    # print(x)等于2

    # x=1
    # def f1():
    # def f2():
    # x=22222222
    # def f3():
    # global x
    # x=11111111111111111
    # f3()
    # f2()
    #
    # f1()
    # print(x)


    # x=1
    # def f1():
    # # x=33333
    # def f2():
    # # x=22222222
    # def f3():
    # nonlocal x
    # x=20000000000
    # f3()
    # print(x)
    # f2()
    #
    # f1()
    # print(x)

    # 在局部如果想要修改全局的可变类型,不需要借助任何声明,可以直接修改
    # 在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量就可以直接修改了

    x=[]
    def f1():
    x.append(1)
    f1()#不是可变类型会在局部空间内额外增加,在列表可变类型不会改变而是继续往里面加
    f1()#额外再增加1个
    print(x)

  • 相关阅读:
    ES6 学习记录
    Windows 服务开发 以及 重启IIS应用池
    IIS部署.net core 3.1踩坑总结
    VS 2019背景全透明以及插件、特效
    深拷贝和浅拷贝的区别
    Vue全家桶以及常用知识点
    C#设计模式
    博客园装扮教程
    Exp5 单元测试
    Exp4 代码评审
  • 原文地址:https://www.cnblogs.com/yf18767106368/p/9151201.html
Copyright © 2020-2023  润新知