Python最佳实践:是否将全局已知变量显式传递给函数?

Python最佳实践:是否将全局已知变量显式传递给函数?,python,Python,我有一个关于Python最佳实践的一般性问题。 试图在谷歌上搜索答案,但没有找到任何相关信息。 问题是:将全局已知的参数显式传递给函数是最佳做法吗 那么,这是最佳实践吗 a = 1 def add_one(a): b = a + 1 还是这个 a = 1 def add_one(): b = a + 1 下面是我关于将a设置为类属性而不是使用global的评论的答案 简单的回答是: 使用globals时要小心控制;或者安全游戏。。。别这样。通常有更好的方法。 参考文献1:

我有一个关于Python最佳实践的一般性问题。 试图在谷歌上搜索答案,但没有找到任何相关信息。 问题是:将全局已知的参数显式传递给函数是最佳做法吗

那么,这是最佳实践吗

a = 1

def add_one(a):
 b = a + 1

还是这个

a = 1

def add_one():
 b = a + 1



下面是我关于将
a
设置为类属性而不是使用
global
的评论的答案

简单的回答是:
  • 使用
    global
    s时要小心控制;或者安全游戏。。。别这样。通常有更好的方法。
    • 参考文献1:
    • 参考文献2:
  • 传递变量是可以的
  • 在任何(适用的)机会使用
    课程
课堂示例: 这是一个简单的、精简的阶级结构,没有虚饰。您将注意到没有任何全局变量,也没有传递任何变量

这是而不是说不鼓励传递变量,如果没有必要,它们是有用的。然而,这表明不需要全局变量,通常有更好的方法。为了它的价值。。。(就我个人而言,我从未见过它们在Python中的用途)

用例: 我将首先指出,由于1)外部访问“私有”类属性和2)持续更新
\u a
,这个示例在现实世界中几乎毫无用处;这只是针对您的问题的一个示例

请注意,对不同函数的每次调用都会对
\u a
产生不同但持续的影响;注意变量(class属性)既不是全局的,也不是传递的

demo = Demo()
print(f'Value of _a: {demo._a}')
>>> Value of _a: 73

demo.add_one()
print(f'Value of _a plus one: {demo._a}')
>>> Value of _a plus one: 74    

demo.times_two()
print(f'Value of _a plus one, times two: {demo._a}')
>>> Value of _a plus one, times two: 148

如果函数应该以某种方式使用变量,那么将其设置为强制参数将使以后的调试更容易。避免使用全局变量通常是最佳做法。第一个甚至不使用global
a
,而是将其隐藏起来。同意@Jan-最好不要使用globals。(FWIW;我从来没有找到它们的用途)。相反,如果您需要一个值被多个函数访问,考虑把它作为一个类属性,(例如,代码>自己。这实际上帮助了我很多的理解!非常感谢。@user2071786-我的荣幸,很高兴能帮上一点忙。因为这很有帮助,如果你能投票并接受,我将不胜感激。干杯,伙计!
demo = Demo()
print(f'Value of _a: {demo._a}')
>>> Value of _a: 73

demo.add_one()
print(f'Value of _a plus one: {demo._a}')
>>> Value of _a plus one: 74    

demo.times_two()
print(f'Value of _a plus one, times two: {demo._a}')
>>> Value of _a plus one, times two: 148