Python 我想要在代码中不使用全局变量的变通方法

Python 我想要在代码中不使用全局变量的变通方法,python,function,global-variables,Python,Function,Global Variables,下面是我的示例,我想要一个不在函数中使用全局变量的解决方法 Legend = ''' <style> table { font-family: Times New Roman, sans-serif; border-collapse: collapse; width: 100%; } td, th { border: 1px solid #000000; text-align: center; height: 20px; ove

下面是我的示例,我想要一个不在函数中使用全局变量的解决方法

Legend = '''
<style>
table {
    font-family: Times New Roman, sans-serif;
    border-collapse: collapse;
    width: 100%;
}
td, th {
    border: 1px solid #000000;
    text-align: center;
    height: 20px;
    overflow: hidden;
    padding: 2px;
}
tr:nth-child(even) {
    background-color: #ffffff;
}
</style> '''
for i in ts:
    Legend+= '<th>' + i + '</th>'
Legend += '''</tr>'''

def get_data_legend(value,name,sym=None):
    global Legend
    L1 = []
    for i in value:
       L1.append('{:,.0f}'.format(i))
    Legend += '''<tr><th>'''+name+'''</th>'''
    for i in gt:
        if sym is not None:
             Legend+= '<td>' + sym + str(i)  + '</td>'
        else:
             Legend += '<td>' + ' ' + str(i)  + '</td>'
    Legend += '''</tr>'''

get_data_legend(update_datapoints,'Update metrics')
get_bus_metrics(update_address,'Update address')
Legend += '''</tr></table><br><br>'''
我在函数中使用的全局变量不好用,也不好用。我正在寻找一种解决方法,这样我就不需要在函数中使用全局变量。我是python新手,有人能帮我一下吗

>>> something = 'something'
>>> def bad():
...:    global something
...:    something += ' bad'
...:
>>> bad()
>>> something
>>> 'something bad'
你应该

>>> def good(something):
...:    something += ' good'
...:    return something
...:
>>> something = good('something')
>>> something
>>> 'something good'
你有

>>> something = 'something'
>>> def bad():
...:    global something
...:    something += ' bad'
...:
>>> bad()
>>> something
>>> 'something bad'
你应该

>>> def good(something):
...:    something += ' good'
...:    return something
...:
>>> something = good('something')
>>> something
>>> 'something good'

让你的函数使用一个参数图例并让它返回一个值?@timgeb很抱歉,我是python新手,不懂。请详细说明或给我一个小例子。我想@timgeb的意思是,通常避免这种情况的方法是将数据作为命名参数传递给函数。这种情况有点棘手,因为函数修改了值,因此它需要返回变量的最终值。@timgeb抱歉再次购买,我用这种方式定义上述函数def get_data_legendvalue,name,Legend,sym=None它应该返回Legend+get_data_Legend吗?不要放弃删除全局Legend语句。调用函数时,您还需要执行类似操作:Legend=get_data\u legendupdate_datapoints,Legend,'updatemetrics'。但是,问题是,图例将不再具有其初始值,因此如果将函数作为参数再次调用,则结果可能会错误。请让您的函数获取参数图例并使其返回值?@timgeb抱歉,我是python新手,我想@timgeb的意思是,通常避免这种情况的方法是将数据作为命名参数传递给函数。这种情况有点棘手,因为函数修改了值,因此它需要返回变量的最终值。@timgeb抱歉再次购买,我用这种方式定义上述函数def get_data_legendvalue,name,Legend,sym=None它应该返回Legend+get_data_Legend吗?不要放弃删除全局Legend语句。调用函数时,您还需要执行类似操作:Legend=get_data\u legendupdate_datapoints,Legend,'updatemetrics'。但是,问题是Legend将不再具有其初始值,因此,如果将函数作为参数再次调用,则结果可能会错误。这是可行的,谢谢你提供的信息,我真的很感激。@martineau请注意,只有当我们假设像OP案例中的字符串这样的不可变对象被传递给good as+=时,原始版本和你对这个答案的编辑才是等价的。timgeb:我知道……在这里和OP的问题中就是这样。@martineau是的,但是这里解释的概念并不取决于参数的数据类型,所以我想我们至少应该有一个注释,其中提到+=的行为,以防这个问题的未来读者想要修改代码来处理列表;-这很有效,谢谢你提供的信息,我真的很感激。@martineau请注意,只有当我们假设像OP案例中的字符串这样的不可变对象被传递给good as+=时,原始版本和你对这个答案的编辑才是等价的。timgeb:我知道……在这里和OP的问题中就是这样。@martineau是的,但是这里解释的概念并不取决于参数的数据类型,所以我想我们至少应该有一个注释,其中提到+=的行为,以防这个问题的未来读者想要修改代码来处理列表;¬