那个tagNameF为什么总是出错??
if tagNameF != LinameF: print(LinameF,liwu) tagNameF = LinameF
代码是这样的,我发现一点。去掉“tagNameF = LinameF就不出错了,为什么?
我在最上面已经定义变量并赋空值 了啊
首先你需要明白作用域。
在python中只有模块、类、函数会引入新的作用域。
tagNameF = '' def flagF(): if tagNameF != LinameF: print(LinameF,liwu) tagNameF = LinameF
在你的程序中tagNameF = ''是全局变量
函数定义def flagF(),产生新的作用域,函数中的内容就在局部作用域里。
在局部作用域外的变量是只读的,如果在局部作用域内为其赋值,那么python会认为是创建一个新的变量。
回到你的程序,在if判断里面,首先将tagNamfF与另一个变量进行比较,然后再对其赋值,python认为tagNameF是在函数中定义的一个新变量,在定义这个变量之前就使用它(将它和另一个变量比较),于是编译器告诉你出错了。
看提示我想到是”未定义先引用“问题,但没想到你说的作用域。
这个函数的用处是:判断LinameF是否重复。
首先tagNameF是空的,不等,那么打印出LinenameF的值 。
然后tagNameF被赋的值 和LinenameF一样。
在次调用函数的时候,就不会打印出来了。(避免了重复输出)
如果把tagNameF=‘’放到函数里面,就不对了。
这要怎么办?
@还没有: python是面向对象语言!所以你需要理解面向对象的思想,首先把你写的封装成一个类,然后使用self.tagNameF来引用这个变量,就不会出错了。
@恋恋风尘Ming: 嗯。谢谢。。
不过关于转成exe。32位正常,64位就出错,你有办法吗
https://q.cnblogs.com/q/90418/ 这个我问的
@还没有: 程序打包这方面我不太懂,以前python也只是因为兴趣学的,只是入门。不过看了你的问题好像是代码中有错的地方
@恋恋风尘Ming: 不是代码有错,同样的那个程序。我在32位的python下就可以正常打包 并且运行。
但 换成64位python 就是那个贴子里的错误了
图片看不见!