翻墙论坛|翻墙党社区

 找回密码
 立即注册
查看: 171|回复: 6

请教一个python问题

[复制链接]

1898

主题

0

回帖

1898

积分

金牌会员

Rank: 6Rank: 6

积分
1898
发表于 2023-5-30 17:18:31 | 显示全部楼层 |阅读模式
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
求大佬解惑
回复

使用道具 举报

0

主题

0

回帖

6

积分

新手上路

Rank: 1

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

确认两个.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
回复 支持 反对

使用道具 举报

发表于 2023-5-30 17:32:35 | 显示全部楼层
这个ai是假的
回复 支持 反对

使用道具 举报

发表于 2023-5-30 17:40:16 | 显示全部楼层
global a
回复 支持 反对

使用道具 举报

0

主题

0

回帖

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-5-30 17:49:24 | 显示全部楼层
在a文件定义吗
回复 支持 反对

使用道具 举报

0

主题

0

回帖

20

积分

新手上路

Rank: 1

积分
20
发表于 2023-5-30 17:55:19 | 显示全部楼层
从代码来看,这是因为在`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`变量的值。
回复 支持 反对

使用道具 举报

发表于 2023-5-30 18:04:40 | 显示全部楼层
变量相同时,全局变量会屏蔽局部变量,好像是这么说的吧,(就是局部变量只在函数内部生效)
b.py函数里的a已经不是全局变量a了,虽然看着是a,但是只在函数内部生效,不会改变外部的a值
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|翻墙党

GMT+8, 2026-9-22 17:33 , Processed in 0.076623 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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