python - Python 最佳实践:是否将全局已知变量显式传递给函数?
问题描述
我有一个关于 Python 最佳实践的一般性问题。尝试在谷歌上搜索答案,但没有找到任何相关信息。问题是:将全局已知参数显式传递给函数是最佳实践吗?
那么,这是最佳实践吗?
a = 1
def add_one(a):
b = a + 1
或这个?
a = 1
def add_one():
b = a + 1
解决方案
这是扩展我关于设置a
为类属性而不是使用global
.
简短的回答:
global
谨慎使用s;或安全游戏......只是不要。通常有更好的方法。- 参考 1:PEP-8
- 参考 2:这篇关于 SO 的有趣帖子,强调需要谨慎
- 传递变量是可以的
- 使用
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
推荐阅读
- vue.js - vuejs条件渲染留下额外的html标记
- powershell - 如何在 iis 中删除 web.config 文件
- google-apps-script - 执行该操作所需的授权
- html - 在 css bootstrap 中覆盖锚标记样式
- linux - 使用shell脚本中的函数测试文件是否存在
- mysql - Restify:复制文件并使用承诺链查询数据库时出现套接字挂断错误
- angular - 如何将 locationId 数组传递给服务 getLocationData?
- sql - 如何在 BigQuery 中最小化每次 SQL 查询执行的成本
- java - java:注解处理器+代码生成
- python - pool.apply_async 和全局变量