首页 新闻 会员 周边

python这个变量怎么会出错?

0
[已解决问题] 解决于 2017-02-25 23:03

那个tagNameF为什么总是出错??

 

if tagNameF != LinameF:

    print(LinameF,liwu)

    tagNameF = LinameF

 

代码是这样的,我发现一点。去掉“tagNameF = LinameF就不出错了,为什么?

我在最上面已经定义变量并赋空值 了啊

还没有的主页 还没有 | 小虾三级 | 园豆:531
提问于:2017-02-25 18:39
< >
分享
最佳答案
1

首先你需要明白作用域。

在python中只有模块、类、函数会引入新的作用域。

tagNameF = ''
def flagF():
    if tagNameF != LinameF:
        print(LinameF,liwu)
        tagNameF = LinameF

在你的程序中tagNameF = ''是全局变量

函数定义def flagF(),产生新的作用域,函数中的内容就在局部作用域里。

在局部作用域外的变量是只读的,如果在局部作用域内为其赋值,那么python会认为是创建一个新的变量。

回到你的程序,在if判断里面,首先将tagNamfF与另一个变量进行比较,然后再对其赋值,python认为tagNameF是在函数中定义的一个新变量,在定义这个变量之前就使用它(将它和另一个变量比较),于是编译器告诉你出错了。

奖励园豆:5
去冰三分糖 | 菜鸟二级 |园豆:380 | 2017-02-25 21:08

看提示我想到是”未定义先引用“问题,但没想到你说的作用域。

这个函数的用处是:判断LinameF是否重复。

首先tagNameF是空的,不等,那么打印出LinenameF的值 。

然后tagNameF被赋的值 和LinenameF一样。

在次调用函数的时候,就不会打印出来了。(避免了重复输出)

 

如果把tagNameF=‘’放到函数里面,就不对了。

 

这要怎么办?

 

还没有 | 园豆:531 (小虾三级) | 2017-02-25 22:26

@还没有: python是面向对象语言!所以你需要理解面向对象的思想,首先把你写的封装成一个类,然后使用self.tagNameF来引用这个变量,就不会出错了。

去冰三分糖 | 园豆:380 (菜鸟二级) | 2017-02-25 22:43

@恋恋风尘Ming: 嗯。谢谢。。

不过关于转成exe。32位正常,64位就出错,你有办法吗

https://q.cnblogs.com/q/90418/  这个我问的 

还没有 | 园豆:531 (小虾三级) | 2017-02-25 23:06

@还没有: 程序打包这方面我不太懂,以前python也只是因为兴趣学的,只是入门。不过看了你的问题好像是代码中有错的地方

去冰三分糖 | 园豆:380 (菜鸟二级) | 2017-02-25 23:15

@恋恋风尘Ming: 不是代码有错,同样的那个程序。我在32位的python下就可以正常打包 并且运行。

但 换成64位python 就是那个贴子里的错误了

还没有 | 园豆:531 (小虾三级) | 2017-02-26 21:51
其他回答(1)
0

图片看不见!


BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-02-25 19:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册