training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Константы Python

Создано: 14 сентября 2017Автор: Егор Астапов10728 просмотровСложность: легкий

Хочу вам рассказать о константах Python. Константы в питоне ничем не отличаются от простых переменных. Константы пишут с больших букв. Например IP_SERVER='111.11.11.11'. Вы можете налету переписать значение константы и потом ваш питоновский скрипт не выдаст ошибку. В языке PHP константа объявляется один раз и попытка изменения значения константы приводит к ошибке.


#!/usr/bin/python3
NAME_SERV='MAIN'
print(NAME_SERV)
'''
вывод:
MAIN
'''

# случайное изменение значения
NAME_SERV='MAIN2'
print(NAME_SERV)
'''
вывод:
MAIN2
'''

# обязательно поставьте запятую
NAME_SERV = ('MAIN3',)
print(NAME_SERV[0])
NAME_SERV[0] = 'MAIN4'
'''
вывод:
Traceback (most recent call last):
  File "./constant.py", line 22, in 
    NAME_SERV[0] = 'MAIN4'
TypeError: 'tuple' object does not support item assignment

'''

При такой попытке изменения значения (NAME_SERV[0] = 'MAIN4') возникает ошибка, но при таком таком изменении NAME_SERV = ('MAIN4',) ошибки не возникает. Значение переменной полностью заменяется другим значением. Будьте внимательны!

Предлагаю более сложный вариант. Тут словарь с кортежами. В примере показано как можно обращаться к значениям словаря. При попытке изменения кортежа происходит ошибка. Вы можете использовать этот способ. Подробнее о кортежах читайте на странице кортежи Python


#!/usr/bin/python3

SERVER = {'name': ('main',), 'ip': ('128.11.11.11',)}
print(SERVER)
'''
вывод:
{'ip': ('128.11.11.11',), 'name': ('main',)}
'''
print('server name:', SERVER['name'][0], 'ip:', SERVER['ip'][0],)
'''
вывод:
server name: main ip: 128.11.11.11
постараемся изменить значение name 
'''
SERVER['name'][0] = 'main2'
'''
вывод:
Traceback (most recent call last):
  File "./constant.py", line 44, in 
    SERVER['name'][0] = 'main2'
TypeError: 'tuple' object does not support item assignment
'''

Какой способ выбрать решать вам. Использовать кортежи надёжнее.

Комментарии

Tfotda : 25 июня 2018 07:40:24
Есть ещё больше изысканный способ через якобы приватную переменную и @property у которого setter сделать ничего не делающим

реклама