全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1399|回复: 11
打印 上一主题 下一主题

请教一个python问题

[复制链接]
跳转到指定楼层
1#
发表于 2023-5-30 17:42:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pcppc 于 2023-5-30 18:10 编辑

a.py内容为

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


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



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

pycharm
求大佬解惑
2#
发表于 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
3#
 楼主| 发表于 2023-5-30 17:46:24 | 只看该作者
ftlh2005 发表于 2023-5-30 17:43
根据给出的代码和情况,似乎存在一些变量名混淆的问题,建议检查以下几点:

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

这个ai是假的
5#
 楼主| 发表于 2023-5-30 17:48:53 | 只看该作者

在a文件定义吗
6#
发表于 2023-5-30 17:49:20 | 只看该作者
从代码来看,这是因为在`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`变量的值。
7#
发表于 2023-5-30 17:56:36 | 只看该作者
本帖最后由 雁过拔毛的MJJ 于 2023-5-30 18:04 编辑

变量相同时,全局变量会屏蔽局部变量,好像是这么说的吧,(就是局部变量只在函数内部生效)
b.py函数里的a已经不是全局变量a了,虽然看着是a,但是只在函数内部生效,不会改变外部的a值
你要是想要改变a的值,你就要在b.py声明a是全局变量
8#
 楼主| 发表于 2023-5-30 18:10:32 | 只看该作者
雁过拔毛的MJJ 发表于 2023-5-30 17:56
变量相同时,全局变量会屏蔽局部变量,好像是这么说的吧,(就是局部变量只在函数内部生效)
b.py函数里的a ...

global a  这句声明了   还是不行
10#
发表于 2023-5-30 18:22:54 | 只看该作者
本帖最后由 雁过拔毛的MJJ 于 2023-5-30 18:34 编辑
pcppc 发表于 2023-5-30 18:10
global a  这句声明了   还是不行


因为你的代码写的有问题啊,from b import a,这里导入的a值是从b.py文件的a值,导入时setx函数并未运行,所以你希望怎么变?他就永远是1啊

这么说吧,标准导入格式应该这样写的,from b import a as c,你导入了a的值并赋给c,可以简写成from b import a,但是你要明白,这个a和b.py里的a没关系了,你在a.py已经重新定义一个变量a,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-10 16:17 , Processed in 0.062471 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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