Dan*_*aga 8 python variables module function global-variables
在 Python 中,函数可以按如下方式访问模块变量:
def pow(a):
return a**b
a = 3
b = 2
print(pow(a))
Run Code Online (Sandbox Code Playgroud)
这被认为是不好的做法吗?
明显的替代方案是将所有参数显式传递给函数:
def pow(a, b):
return a**b
a = 3
b = 2
print(pow(a, b))
Run Code Online (Sandbox Code Playgroud)
我使用第一种形式来限制传递给函数的参数数量,我想知道这是否被认为是不好的做法。
有可能的; 但如果这样做,请使用globalor关键字。nonlocal
LOGGER = logging.getLogger('FooLogger')
LOGGER.setLevel(logging.INFO)
def log_this(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
global LOGGER # this is in the global namespace
nonlocal func # this is from the parent function
retval = func(*args, **kwargs)
LOGGER.info('%s(*%s, **%s)=%s', func.__name__, args, kwargs, retval)
return retval
return wrapper
@log_this
def cube(base, *, mod=None):
return pow(base, 3)
>>> cube(4)
INFO:FooLogger:cube(*(4,), **{})=64
64
>>> cube(4, mod=7)
INFO:FooLogger:cube(*(4,), **{'mod': 7})=1
1
Run Code Online (Sandbox Code Playgroud)
但通常最好将变量显式传递给函数。这增强了可读性,并减少了函数用途的模糊性。考虑以下:
MIN_SIZE = 5
def check_size(collection):
global MIN_SIZE
return len(collection) > MIN_SIZE
>>> check_size([1, 2, 3])
False
Run Code Online (Sandbox Code Playgroud)
乍一看,我看到它check_size被称为,但它检查的尺寸是多少?如果我不知道,我就得去寻找。这是一个可读性问题,随着程序的增长,只会造成更多的混乱。
MIN_SIZE = 5
def check_size(collection, size):
return len(v) > n
>>> check_size(range(10), MIN_SIZE)
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1569 次 |
| 最近记录: |