Python变量在函数外部初始化,在函数中赋值,并在函数外部重用

Python变量在函数外部初始化,在函数中赋值,并在函数外部重用,python,function,variables,Python,Function,Variables,嗨,我正在和python一起做一个小的keras项目。我有一个给字符串赋值的函数。但是,我希望在函数之外使用该值。因此,我在函数之前初始化了这个值,给它赋值,然后使用它,如下所示 已初始化变量: predictedLabelString = '' 函数中的变量赋值: def predict_image_util(finalPredictedInv): predictedLabelString = 'Crack' plt.title(predictedLabelString) 函数

嗨,我正在和python一起做一个小的keras项目。我有一个给字符串赋值的函数。但是,我希望在函数之外使用该值。因此,我在函数之前初始化了这个值,给它赋值,然后使用它,如下所示

已初始化变量:

predictedLabelString = ''
函数中的变量赋值:

def predict_image_util(finalPredictedInv): 
    predictedLabelString = 'Crack'
plt.title(predictedLabelString)
函数外部使用的变量:

def predict_image_util(finalPredictedInv): 
    predictedLabelString = 'Crack'
plt.title(predictedLabelString)
但是,这不会返回任何结果。请问我做错了什么?感谢

您的predict\u image\u util函数基本上创建了一个局部变量,因此在同名的全局变量中没有发现任何更改

按如下方式修改您的函数:

def predict_image_utilfinalPredictedInv: 全局预测标签字符串 predictedLabelString='Crack' 这将更改变量predictedLabelString的全局值

您的predict\u image\u util函数基本上创建了一个局部变量,因此在同名的全局变量中没有发现任何更改

按如下方式修改您的函数:

def predict_image_utilfinalPredictedInv: 全局预测标签字符串 predictedLabelString='Crack'
这将更改变量predictedLabelString的全局值

设置全局变量会使调试变得困难,我建议在局部函数上下文中使用函数和返回值

def predict_image_utilfinalPredictedInv: predictedLabelString='Crack' 返回predictedLabelString 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: predictedLabelString=Predicted\u image\u util printpredictedLabelString
如果您仍然希望使用在模块级别定义的变量并在方法中操作该变量,我建议仅在python3上使用nonlocalvalid设置全局变量会使调试变得困难,我建议在本地函数上下文中使用函数和返回值

def predict_image_utilfinalPredictedInv: predictedLabelString='Crack' 返回predictedLabelString 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: predictedLabelString=Predicted\u image\u util printpredictedLabelString
如果您仍然希望使用在模块级别定义的变量并在方法中操作该变量,我建议在python将其视为另一个局部变量的函数中赋值时,仅在python3上使用nonlocalvalid。 您不能从函数外部访问它,也不能从函数内部修改它。 您需要在函数的前面添加一个全局字来修改该全局变量。 但是,如果您希望以最好、最干净的方式实现这一点,可以使用如下类:

class MyClass(object):

    def __init__(self, predictedLabelString=''):
        self.predictedLabelString = predictedLabelString

    def predict_image_util(self, finalPredictedInv):
        self.predictedLabelString = 'Crack'

    def another_function(self):
        plt.title(self.predictedLabelString)
a = MyClass()
a.predict_image_util(finalPredictedInv='something')
a.another_function()
然后像这样使用它:

class MyClass(object):

    def __init__(self, predictedLabelString=''):
        self.predictedLabelString = predictedLabelString

    def predict_image_util(self, finalPredictedInv):
        self.predictedLabelString = 'Crack'

    def another_function(self):
        plt.title(self.predictedLabelString)
a = MyClass()
a.predict_image_util(finalPredictedInv='something')
a.another_function()

在函数中赋值时,python会将其视为另一个局部变量。 您不能从函数外部访问它,也不能从函数内部修改它。 您需要在函数的前面添加一个全局字来修改该全局变量。 但是,如果您希望以最好、最干净的方式实现这一点,可以使用如下类:

class MyClass(object):

    def __init__(self, predictedLabelString=''):
        self.predictedLabelString = predictedLabelString

    def predict_image_util(self, finalPredictedInv):
        self.predictedLabelString = 'Crack'

    def another_function(self):
        plt.title(self.predictedLabelString)
a = MyClass()
a.predict_image_util(finalPredictedInv='something')
a.another_function()
然后像这样使用它:

class MyClass(object):

    def __init__(self, predictedLabelString=''):
        self.predictedLabelString = predictedLabelString

    def predict_image_util(self, finalPredictedInv):
        self.predictedLabelString = 'Crack'

    def another_function(self):
        plt.title(self.predictedLabelString)
a = MyClass()
a.predict_image_util(finalPredictedInv='something')
a.another_function()
在函数中,在为其赋值之前写入全局predictedLabelString在函数中,在为其赋值之前写入全局predictedLabelString