首页 > 解决方案 > Python 最佳实践:是否将全局已知变量显式传递给函数?

问题描述

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

那么,这是最佳实践吗?

a = 1

def add_one(a):
 b = a + 1

或这个?

a = 1

def add_one():
 b = a + 1


标签: python

解决方案


这是扩展我关于设置a为类属性而不是使用global.

简短的回答:

类示例:

这是一个简单、精简的类结构,没有多余的装饰。您会注意到没有任何全局变量以及没有传递的变量。

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

class Demo():
    """Class attribute demonstration class."""
    
    def __init__(self):
        """Demo class initialiser."""
        self._a = 73
        
    def add_one(self):
        """Add one to the `a` attribute."""
        self._a += 1
        
    def times_two(self):
        """Multiply the `a` attribute by two."""
        self._a *= 2

用例:

我将首先指出,这个例子在现实世界中几乎没有用处,因为 1) 从外部访问一个“私有”类属性和 2) 的持续更新_a;这只是针对您的问题的一个示例。

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

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

推荐阅读