Установите стандарты компании, к которым может получить доступ каждый код на Python

Итак, есть элементы фирменного стиля, такие как цвета, шрифты и т. д., которые редко меняются, но когда они меняются, все должны реализовывать их одинаково. Например, я хочу написать отдельную подпрограмму, которую все будут вызывать для импорта цветов, чтобы все отчеты имели одинаковый вид. Вопрос в том, как лучше всего передать эти переменные?

Вариант 1: обычная передача переменных

def main():
company_BLUE          = "#015b95"
company_GREEN         = "#3D8B37"
company_GREY          = "#656565"
company_RED           = "#8F2D22"
return company_BLUE, company_GREEN, company_GREY, company_RED

Импортируйте, а затем вызовите его, используя:

import getColors
[Blue, Green, Grey, Red] = getColors.main()

Это становится утомительным, если есть много переменных, которые нужны не всем.

Вариант 2: использование глобальных переменных

def main():
    global company_BLUE
    global company_GREEN
    global company_GREY
    global company_RED
    company_BLUE = "#015b95"
    company_GREEN = "#3D8B37"
    company_GREY = "#656565"
    company_RED = "#8F2D22"

Это раздражает, когда приходится всегда ставить глобальный. Или вы пишете новую переменную, например:

Blue = global company_BLUE

но это просто добавляет ненужные переменные.

Вариант 3: как-то использовать классы, но я не знаю, как это адаптировать здесь.

Каково ваше мнение или есть еще лучшее решение?

Blue = global company_BLUE — неверный синтаксис, и у меня возникает подозрение, что вы думаете, что global гораздо более глобально, чем есть на самом деле — global просто на уровне модуля, так же, как если бы вы присвоили переменную вне какого-либо класса или функции.
user2357112 13.08.2024 11:04

Почему бы просто не сделать его модулем, определяющим глобальные константы? Почему это должна быть функция? Кроме того, называть переменные «зелеными» и т. д. — плохая семантика. Что, если вы сделаете редизайн и все, что было зеленым, теперь станет желтым? Вам следует назвать переменные примерно так: «основной» и «акцент», что описывает их использование, а не внешний вид.

deceze 13.08.2024 11:16

Итак, вы планируете хранить фирменный стиль в файле main.py? И вы ищете лучший способ использования глобальных переменных? Что это за корпоратив?!? Поместите их в какую-нибудь общекорпоративную вики. Или файл JSON, если вам действительно нужно.

Jeyekomon 13.08.2024 11:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Все ваши реализации/подходы на самом деле жизнеспособны, но вы можете спросить или узнать, как можно вызвать функцию Python таким образом, чтобы она не меняла значение каждой переменной.

Ниже приведен пример, который можно легко адаптировать для вашего случая:

 def my_function():
   return 1, 2, 3, 4, 5

 #Suppose you only need the first two outputs
 a, b, *_ = my_function()

 print(a)  # 1
 print(b)  # 2

прямо сейчас я использую много элифов и добавляю результат, который затем выводится, но, как я уже сказал, это будет долго, утомительно и в конечном итоге медленно, хотя, вероятно, все еще незначительно

spikelucky 13.08.2024 11:22

Что делать, если мне нужно только четвертое значение?

Jeyekomon 13.08.2024 11:25

это плохая идея. Используйте список, если хотите сделать это таким образом. Представьте, что вам нужно вернуть 1000 значений. Это было бы очень длинное заявление о возврате.

Elerium115 13.08.2024 11:26

@Jeyekomon *_ называется оператором «все кроме», который доступен только в Python 3. Итак, чтобы получить доступ только к четвертому значению, вы можете написать *_,fourth_value = my_function(). Тема раскрыта linkedin.com/pulse/unpacking-underscore-python-kaushik-t-d-r‌​oy и stackoverflow.com/questions/13726155/…

Naveed Ahmed 13.08.2024 11:41

@ Elerium115 Elerium115, вы пытаетесь бесполезно усложнить ситуацию, ОП, похоже, владеет Python и хорошо знает, как взвешивать различные варианты.

Naveed Ahmed 13.08.2024 11:43

@NaveedAhmed Ваш код *_,fourth_value = my_function() возвращает пятое значение 5. Я хочу четвертое значение 4. Как это сделать?

Jeyekomon 13.08.2024 11:49

Я не пробовал, но думаю, это должно быть *, четвёртое_значение, * = my_function()

Naveed Ahmed 13.08.2024 12:02

Я не пробовал, но думаю, это должно быть обновление *, four_value, * = my_function(), теперь я протестировал его и понял проблему, которую вы хотите выделить. Возможно, эта конструкция не будет работать без какой-либо магической оговорки.

Naveed Ahmed 13.08.2024 12:09
Ответ принят как подходящий

Вы можете использовать простой класс данных:

from dataclasses import dataclass
@dataclass
class Color:
    BLUE = "#015b95"
    GREEN = "#3D8B37"
    GREY = "#656565"
    RED = "#8F2D22"
company_color = Color()    
print(company_color.RED)

дает:

#8F2D22

Мне нравится этот вид. Кажется, это очень интуитивно понятно для использования в дальнейшем. Большое спасибо.

spikelucky 13.08.2024 11:35

Я предлагаю создать config.ini для хранения цветов, а затем использовать configparser (который является частью стандартной библиотеки). Простой пример: пусть config.ini контент будет

[company]
Blue = #015b95
Green = #3D8B37
Grey = #656565
Red = #8F2D22

затем получите к нему доступ следующим образом

import configparser
config = configparser.ConfigParser()
config.read("config.ini")
print(config["company"]["Blue"])  # prints #015b95

Таким образом, вы можете позволить кому-то без знания языка Python, и config.ini ограничено хранением только настраиваемых значений, нет способа заставить его выполнять произвольный код Python, что может произойти, если вы скажете «создать config.py», а затем скажете «сделать» from config import blue.

Это кажется более сложным и на самом деле немного менее интуитивным, чем вариант класса выше. Хотя я подумаю об этом еще немного, но пока я склоняюсь к тому, чтобы вариант класса был самым плавным.

spikelucky 13.08.2024 11:49

Другие вопросы по теме