初学python,有关导入模块的问题

function模块内容在注释里。我的问题是,为什么最终结果是88而不是99?f方法为什么不起作用?... function模块内容在注释里。我的问题是,为什么最终结果是88而不是99?f方法为什么不起作用? 展开
 我来答
阳光的雷咩咩
2018-06-05 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7855万
展开全部

怪了,我运行出来的结果是11:

追问
您的x=11放错位置了。
如果您懂原理,能解释一下吗?
追答

搜了一下,global变量是模块范围内起作用的。改成下面这样就起作用了:

x=11
import  function
function.f()
print(function.x)
匿名用户
2018-06-05
展开全部
#main.py
from func import x
print(x)
from func import f
# 在其他py中导入,解释器找不到你当前的x变量,所以不会更改当前的x变量,可以理解为两个x变量在内存中,id不一样
# def f ():
#     global x #在当前py中,声明x为全局变量,才更改
#     x = 99
f()
print(x)

#func.py

x = 88

def f ():
    global x
    x = 99
    print("f")
    print(x)
追问
请问为什么id是不一样的?
我的理解就是,使用了from语句之后,在main的命名空间新建了一个指向内存88的变量x。然后使用f函数,将main的命名空间中x改为指向99。然后打印变量x。
您的说法是不是可以理解成:其实f函数是作用在func命名空间里的,改的是func里的变量x?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c6c8d38
2018-06-05 · TA获得超过109个赞
知道小有建树答主
回答量:299
采纳率:45%
帮助的人:35.8万
展开全部
有global在函数内部访问变量会先本地再全局。
追问

本地不就是99,全局是88吗?他和下面的有何不同:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式