在函数外部创建的Python对象在函数内部是完全可访问的吗?

2024-04-27 03:32:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在理解变量作用域时遇到了一些问题。对于正态变量,我理解它,但是如果我定义了一个对象,事情就会把我弄糊涂。请看一下这个代码:

class test():
    pass

text="hi there"
num=1

p=test()
p.var="good bye"
p.arr = []
p.num = 5

def output_before():
    print "before change: object text " ,p.var
    print "before change: object number ", p.num
    print "before change: basic text " ,text
    print "before change: basic num ", num

def output_after():
    print "after change: object text " ,p.var
    print "after change: object number ", p.num
    print "after change: basic text " ,text
    print "after change: basic num ", num



def change():
    text = "whats up"
    num=5
    p.num=10
    p.var="good night"
    p.arr.append ("sleep well")


output_before()
change()
output_after()

print p.arr

for i in range(5):
    change()
print p.arr

这给了我一个结果:

before change: object text  good bye
before change: object number  5
before change: basic text  hi there
before change: basic num  1
after change: object text  good night
after change: object number  10
after change: basic text  hi there
after change: basic num  1
['sleep well']
['sleep well', 'sleep well', 'sleep well', 'sleep well', 'sleep well', 'sleep well']

来自类测试的对象在默认情况下似乎是全局的。是这样吗?你知道吗

谢谢你, 安迪


Tags: textnumberoutputobjectbasicvarsleepchange
1条回答
网友
1楼 · 发布于 2024-04-27 03:32:04

把对象p想象成其他任何基本类型。两者的规则相同。你知道吗

由于在函数之外声明对象,因此该对象的范围不受限制。另一方面,如果在一个函数上声明它,则不能在这些函数之外访问对象,因为该对象的作用域现在仅限于此函数。(当然,您可以明确地将其全球化。但这可能超出了这个问题目前的范围)

class test():
    pass

text="hi there"
num=1

def output_before():
    #p is now local
    p=test()
    p.var="good bye"
    p.arr = []
    p.num = 5
    print("before change: object text " ,p.var)
    print("before change: object number ", p.num)
    print("before change: basic text " ,text)
    print("before change: basic num ", num)
    print(b)

def output_after():
    print("after change: object text " ,p.var) #should fail because p is not known
    print("after change: object number ", p.num)
    print("after change: basic text " ,text)
    print("after change: basic num ", num)



def change():
    text = "whats up"
    num=5
    p.num=10
    p.var="good night"
    p.arr.append ("sleep well")


output_before()
change()
output_after()

上述代码将失败,因为p在change()和output\ u after()中不是未知的。你知道吗

相关问题 更多 >