在Python中使用全局数据(变量,常量和标签)

时间:2018-12-11 14:52:17

标签: python global-variables constants

从我的角度来看,共有三种类型的全局数据:

  1. 全局变量
    • 代码本身可以对其进行修改
    • 用户可以修改它们
  2. 全局常数
    • 代码本身不应该修改它们
    • 用户可以修改它们
  3. 全局标签
    • 代码本身不应该修改它们
    • 用户不应修改它们

(我不确定上面的术语,所以请随时对其进行纠正。)我设计了一个快速的虚拟示例代码,其中包含变量,常量和标签的几个示例,以证明我的意思:

"""
Paper area calculator script
"""
import requests

# variables
REQUEST_COUNT = int()

# constants
URL = {
    'login': 'https://booksonline.com/login',
    'book':  'https://booksonline.com/?book={book}',
    }
USERNAME = 'foo'
PASSWORD = '123456'

# labels
PAPER_SIZES = {
    'A4': [210, 297],
    'A5': [148, 210],
    }

def calculate_area(book: str, size: str = 'A4') -> int:
    with requests.Session() as s:
        s.post(
            URL['login'],
            data={'username': USERNAME, 'password': PASSWORD},
            )
        res = s.get(URL['book'].format(book=book))

    global REQUEST_COUNT
    REQUEST_COUNT += 2
    page_count = res.json()['PageCount']
    area = PAPER_SIZES[size][0] * PAPER_SIZES[size][1] * int(page_count)
    return area

全局变量和常量(代码应修改请求计数而不是密码)和全局常量和标签(用户应修改其密码而不是纸张尺寸)之间有明显的区别。我已经了解到全局变量的过度使用是not considered a good practice,而通常建议使用全局常量。但是我没有找到关于我称为 labels 的概念的任何信息-接近常数但应该永远不要修改的全局数据。像PI(3.14),ZIP_HEADER(504B),LOCALHOST(127.0.0.1)之类的东西。使用它们是否被认为是一种好习惯?

从我的角度来看,使用全局标签的优点和缺点:

  • [A]代码中Magic numbers的出现较少
  • [A]更好的代码整体可读性
  • [A]重复使用复杂标签时出现错字的可能性较小
  • [D]无论是常量还是标签(无论是否可以修改),用户都可能会感到困惑
  • [D]还可以通过代码内注释简单地实现更好的代码可读性

目前,我不确定是否应该在代码中使用它们。

0 个答案:

没有答案