首页 > 其他 > 详细

函数对象,名称空间,作用域

时间:2019-07-14 17:43:56      阅读:101      评论:0      收藏:0      [点我收藏+]

# 函数是第一类对象:函数名指向的值可以被当中参数传递

 

# 1.函数名可以被传递

# name = ‘jason‘

# x = name

# print(x)

# print(id(x))

# def func():

#     print(‘from func‘)

# # print(func)

# print(id(func))

# f = func

#

# func()

# print(f)

# f()  # 其实指向的也是函数func指向函数体代码的内存地址

技术分享图片

 

 

 

2.函数名可以被当做参#数传递给其他函数

# def func():

#     print(‘from func‘)

#

# def index(args):

#     print(args)

#     args()

#     print(‘from index‘)

# # index(1)

# index(func)

 

# 3.函数名可以被当做函数的返回值

# def index():

#     print(‘index‘)

#

#

# def func():

#     print(‘func‘)

#     return index

# res = func()

# print(res)

# res()

 

 

 

 

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

 

# def func():

#     print(‘func‘)

# print(func())

# l = [1,2,func,func()]  # [1,2,<function func at 0x000001F7D79899D8>,None]

# print(l)

 

# 循环打印项目功能提示信息 供用户选择 用户选择谁就执行谁

def register():

    username = input(username>>>:).strip()

    pwd = input(password>>>:).strip()

    print(username,pwd)

    print(register ...)

def login():

    print(login ...)

def transfer():

    print(transfer ...)

def shopping():

    print(shopping...)

def pay():

    print(pay ...)

 

msg = """

1 注册

2 登陆

3 转账

4 购物

5 支付

"""

func_dict = {

    1:register,

    2:login,

    3:transfer,

    4:shopping,

    5:pay,

}

while True:

    print(msg)

    choice = input(请现在你想要执行的功能>>>:).strip()

    if choice in func_dict:

        func_dict.get(choice)()  # 函数名()

 

    # if choice == ‘1‘:

    #     register()

    # elif choice == ‘2‘:

    #     login()

    # elif choice == ‘3‘:

    #     transfer()

    # elif choice == ‘4‘:

    #     shopping()

    # elif choice == ‘5‘:

    #     pay()

    else:

        print(你输入的功能暂时没有)

# 在函数内部调用其他函数

# 可以将复杂的逻辑简单化

# def index():

#     func()

#     print(‘index‘)

#

# def func():

#     # index()

#     print(‘func‘)

# index()

 

 

def my_max(x,y):

    if x > y:

        return x

    return y

 

def my_max4(a,b,c,d):

    res1 = my_max(a,b)

    res2 = my_max(res1,c)

    res3 = my_max(res2,d)

    return res3

print(my_max4(1,2,10,4))

#函数的嵌套定义:

技术分享图片

#函数内定义函数,应用场景
#一个函数
#该函数可以通过传参数的不同控制函数执行不同的功能

def all_func(type):
    def regiter():
        print(regiter)
    def login():
        print(login)
    def shopping():
        print(shopping)
    def pay():
        print(pay)

    if type == 1:
        regiter()

    elif type == 2:
        login()
    elif type == 3:
        shopping()
    elif type == 4:
        pay()
    else:
        print(没有你输入的功能)

all_func(2)

3.名称空间

# 名称空间是什么?

# 就是放名字的地方

# 详细解释:存放的是变量名与变量值的内存地址得绑定关系的地方

# 要想访问一个变量的值 必须先去名称空间中拿到对应的名字 才能够访问变量的值

 

# name = ‘jason‘

# print(name)

 

 

 

x = 1

 

if 1 ==1 :

    y = 2

 

# print(y)

# while True:

#     z = 3

for i in [1,2,3]:

    print(i)

print(i)

 

def func():

    username = jason

print(x)

func()

 

 

名称空间的分类

    1.内置名称空间:python解释器提前给你定义好的名字(已经存放到内置名称空间中了)

                len

                max

                min

 

    2.全局名称空间:文件级别的代码

                x = 1

 

                if 1 ==1 :

                    y = 2

                

                print(y)

                while True:

                    z = 3

                    

                x,y,z都会放到全局名称空间

                if for while 无论嵌套多少层 它们内部所创建的名字都是全局名称空间的

    3.局部名称空间:函数体内创建的名字都属于局部名称空间

            username

    

    

    

    生命周期:

        

        内置名称空间:只要python解释器已启动立马创建   关闭python解释器的时候内置名称空间自动销毁

        全局名称空间:只要你右键运行py文件会自动创建   py文件程序运行结束自动销毁 

        局部名称空间:函数被调用的时候自动创建  函数指向结束立即销毁(动态创建动态销毁)

 

名称空间的查找顺序

 

名字的查找 (******)

    1.需要先确定你当前在哪(大前提)

        1.站在全局:  全局 >>> 内置

        2.站在局部:  局部 >>> 全局 >>> 内置

技术分享图片

 

 

 

# x = 111

# def f1():

#     x = 222

#     def f2():

#         x = 333

#         def f3():

#             # x = 444

#             def f4():

#                 # x = 555

#                 print(x)

#             x = 777  # 纯粹为了教学演示

#             f4()

#             x = 777  # 纯粹为了教学演示

#         f3()

#     f2()

# f1()

 

 

 

# def func():

#     x = 1

#     def index():

#         print(x)  # 获取全局找x

#     return index

#

# res = func()

# x = 999

# res()

 

 

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

 

 

# x=111

# def outer():

#     def inner():

#         print(‘from inner‘,x)

#     return inner

# f=outer()

# x = 222

# f()

 

 

 

 

 

 

# x=111

# def outer():

#     def inner():

#         print(‘from inner‘,x)

#     return inner

# f=outer()

# def func():

#     x=333

#     f()

# func()

 

 

 

 

 

# x=111

# def outer():

#     def inner():

#         print(‘from inner‘,x)

#         x = 66666666

#     return inner

# f=outer()

# f()

#函数的作用域

# global 在函数内()局部,修改全局的变量

# nonlocal 局部修改局部

x = 1
y = 2
def func():
    global x,y
    x = 999
    y = 666
func()
print(x,y)


def func1():
    a = 1
    def func2():
        nonlocal a

        a = 2
    func2()
    print(a)

func1()

 

 

 

 

 

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

函数对象,名称空间,作用域

原文:https://www.cnblogs.com/chendaodeng/p/11184904.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!