立即注册  找回密码
 立即注册
CeraNetworksBGVM服务器主机交流会员请立即修改密码Sharktech防护
查看: 62|回复: 6

请教一个python问题

[复制链接]

请教一个python问题

[复制链接]

96

主题

357

回帖

2012

积分

金牌会员

积分
2012
pcppc

96

主题

357

回帖

2012

积分

金牌会员

积分
2012
2023-5-30 17:42:22 | 显示全部楼层 |阅读模式
a.py内容为

from b import a,setx
setx("2")
print (a)


b.py内容为
a="1"
def setx(str):
    global server_zhuangtai
    a=str



为什么运行a.py 打印出来还是
1

pycharm
求大佬解惑
回复

使用道具 举报

71

主题

2477

回帖

6013

积分

论坛元老

积分
6013
ftlh2005

71

主题

2477

回帖

6013

积分

论坛元老

积分
6013
2023-5-30 17:43:38 | 显示全部楼层
根据给出的代码和情况,似乎存在一些变量名混淆的问题,建议检查以下几点:

确认两个.py文件是否在同一目录下

检查变量名是否与函数名冲突或重复,比如a.py中用了setx来设置变量a的值,而b.py文件中也有一个函数叫做setx,容易引起歧义和混淆。

检查函数setx的定义部分是否正确,需要注意:

在函数中使用global声明的是全局变量server_zhuangtai,而非a
函数的形参命名不应该使用关键字str,因为这是内置函数的名称
如果以上问题都没有导致错误,仍然无法解决问题,那么可以尝试在运行a.py时,加上-b参数指定b.py所在的具体路径。例如:python a.py -b /path/to/b.py
回复

使用道具 举报

96

主题

357

回帖

2012

积分

金牌会员

积分
2012
pcppc 楼主

96

主题

357

回帖

2012

积分

金牌会员

积分
2012
2023-5-30 17:46:24 | 显示全部楼层

ftlh2005 发表于 2023-5-30 17:43

根据给出的代码和情况,似乎存在一些变量名混淆的问题,建议检查以下几点:

确认两个.py文件是否在同一目 ...

这个ai是假的
回复

使用道具 举报

37

主题

461

回帖

1855

积分

金牌会员

积分
1855
honus

37

主题

461

回帖

1855

积分

金牌会员

积分
1855
2023-5-30 17:43:00 | 显示全部楼层
global a
回复

使用道具 举报

96

主题

357

回帖

2012

积分

金牌会员

积分
2012
pcppc 楼主

96

主题

357

回帖

2012

积分

金牌会员

积分
2012
2023-5-30 17:47:20 | 显示全部楼层

honus 发表于 2023-5-30 17:47

global a

在a文件定义吗
回复

使用道具 举报

144

主题

294

回帖

1444

积分

金牌会员

积分
1444
linhai

144

主题

294

回帖

1444

积分

金牌会员

积分
1444
2023-5-30 17:48:53 | 显示全部楼层
从代码来看,这是因为在`b.py`中定义的变量`a`和`a.py`中通过`from b import a`导入的变量`a`是两个不同的变量。在Python中,模块是一个独立的命名空间,模块中定义的变量在其他模块中无法直接访问。因此,在`a.py`中修改`setx("2")`执行的`b.py`中的`setx()`函数中的变量`a`,对`a.py`中导入的变量`a`没有任何影响,所以输出结果仍然是`1`。

如果想要让`setx()`函数修改`a.py`中导入的`a`变量,需要在`b.py`中将`a`变量声明为全局变量,而不是声明在模块内部,方法如下:

b.py内容:

```python
global a
a="1"
def setx(str):
    global a
    a=str
```

这样,`setx()`函数就可以直接修改`b.py`中声明的全局变量`a`,从而改变`a.py`中导入的`a`变量的值。
回复

使用道具 举报

23

主题

550

回帖

1641

积分

金牌会员

积分
1641
雁过拔毛的MJJ

23

主题

550

回帖

1641

积分

金牌会员

积分
1641
2023-5-30 17:47:00 | 显示全部楼层
本帖最后由 雁过拔毛的MJJ 于 2023-5-30 17:59 编辑

变量相同时,全局变量会屏蔽局部变量,好像是这么说的吧,(就是局部变量只在函数内部生效)
b.py函数里的a已经不是全局变量a了,虽然看着是a,但是只在函数内部生效,不会改变外部的a值
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|HS2V主机综合交流论坛

GMT+8, 2024-12-23 15:42 , Processed in 0.020979 second(s), 2 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表