我有一个关于Python最佳实践的一般性问题。我试着在谷歌上搜索答案,但没有找到任何相关的东西。问题是:显式地将全局已知参数传递给函数是最佳实践吗?
那么,这是最佳实践吗?
a = 1
def add_one(a):
b = a + 1
或者这个?
a = 1
def add_one():
b = a + 1
发布于 2020-09-14 03:22:24
下面是我关于将a
设置为类属性,而不是使用global
的评论。
简短的回答是:
global
时要小心控制;或者使用安全措施...别说了。通常有更好的办法。在(适用)opportunity
class
时,传递变量是可以的
类示例:
这是一个简单的、精简的类结构,没有任何装饰。您将注意到没有任何全局变量,也没有传递任何变量。
这是而不是,意思是传递的变量是不被鼓励的,如果没有必要,它们是有用的。然而,这个是,以表明不需要全局变量,并且通常有更好的方法。不管它值多少钱...(就我个人而言,我从未见过它们在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
https://stackoverflow.com/questions/63869749
复制相似问题