что делать если имя поля таблицы это зарезервированное слово питон
Как использовать имя переменной зарезервированных слов в Python
Я столкнулся с проблемой, когда использую peewee в python для извлечения данных столбца с именем ‘class’. Но ‘class’-это зарезервированное слово, и когда я запускаю код, он всегда останавливается на «SyntaxError: недопустимый синтаксис».
Вот код, который я использую, который работает, если я не включаю столбец Class.class.
И определение Class.class, которое также вызывает ту же ошибку:
Он должен дать мне запрос без ошибок. Поэтому мой вопрос заключается в том, как мне использовать переменные зарезервированного имени в python. Спасибо!
3 ответа
Существует ли рейтинг или таблица количества зарезервированных ключевых слов в различных языках программирования? Мне не нужно знать ключевые слова как таковые но сколько ключевых слов нравится языкам C, C++, C#, Perl, Python, PHP, Smalltalk, Lisp и Ruby имеют.
В общем случае вы можете использовать getattr для доступа к именам, которые являются зарезервированными ключевыми словами; для атрибута class :
Вы должны назвать атрибут класса class_ (или что-то не зарезервированное), а затем использовать параметр column_name для поля Peewee, чтобы установить его в «class.»
Таким образом, невозможно использовать зарезервированное слово, но обычно добавляется подчеркивание, чтобы избежать столкновения, такого как class_, поэтому ваш код будет использовать Class.class_ или даже Class_.class_
Похожие вопросы:
В настоящее время я нахожусь в процессе разработки interface design другого приложения Android, и снова, похоже, я пытаюсь использовать зарезервированные слова для ресурсов (будь то чертежи и.
Я пишу программу, которая генерирует стандартные псевдонимы для каждого имени таблицы. Для этого мне нужно убедиться, что я не генерирую псевдоним, который соответствует зарезервированному ключевому.
Существует ли рейтинг или таблица количества зарезервированных ключевых слов в различных языках программирования? Мне не нужно знать ключевые слова как таковые но сколько ключевых слов нравится.
Сколько ключевых слов или зарезервированных слов в MVEL, может ли кто-нибудь перечислить их? Я не нашел в официальной документации MVEL, действительно ценю любую помощь, которую вы можете оказать.
Доступен ли список Python зарезервированных слов и встроенных слов в библиотеке? Я хочу сделать что-то вроде: from x.y import reserved_words_and_builtins if x in reserved_words_and_builtins: x +=.
// date October 10 2018 pmt 10:01 date = moment(details.date).format(MMMM DD YYYY at h:mm); Как избежать моментальных зарезервированных ключевых слов, таких как a? Я хочу, чтобы выход был October 10.
Списки зарезервированных ключевых слов не включают arguments. А должны ли они? Я не понимаю, как arguments можно использовать в качестве идентификатора.
Проверка имен таблиц и полей в Python
В этом разделе
Проверка имен таблицы
Для поддержания множества таблиц, составляющих базу геоданных, используются различные реляционные системы управления базами данных (РСУБД). Имя каждой таблицы базы геоданных должно быть корректным, поэтому механизм проверки корректности имени таблицы является ключевым при создании данных в базе геоданных. С помощью функции ValidateTableName() скрипт может определить, является ли конкретное имя корректным для рабочей области.
Ниже перечислены ошибки в именах таблиц, которые будут исправлены:
Примечание:
Принимает имя таблицы и путь рабочей области и возвращает корректное имя таблицы для рабочей области.
ValidateTableName Функция
Проверка имен поля
Каждая база данных может иметь ограничения на задание имен для полей таблицы. Такие объекты, как классы пространственных объектов или классы отношений, сохраняются в виде таблиц в РСУБД. Поэтому эти ограничения действуют не только на отдельные таблицы. Ограничения могут или не могут быть общими для различных систем баз данных, поэтому скрипты должны проверять все новые имена полей, чтобы гарантировать стабильную работу инструмента.
Ниже перечислены ошибки в именах полей, которые будут исправлены:
Принимает строку (имя поля) и путь рабочей области и возвращает корректное имя поля, созданное с учетом ограничений на задание имен в выходной базе геоданных.
ValidateFieldName Функция
Следующий пример демонстрирует порядок добавления поля независимо от входного имени с помощью функции ValidateFieldName :
Справка
Проверка имен таблицы
Для поддержания множества таблиц, составляющих базу геоданных, используются различные реляционные системы управления базами данных (РСУБД). Имя каждой таблицы базы геоданных должно быть корректным, поэтому механизм проверки корректности имени таблицы является ключевым при создании данных в базе геоданных. С помощью функции ValidateTableName() скрипт может определить, является ли конкретное имя корректным для рабочей области.
Ниже перечислены ошибки в именах таблиц, которые будут исправлены:
Примечание:
Принимает имя таблицы и путь рабочей области и возвращает корректное имя таблицы для рабочей области.
Функция ValidateTableName
Проверка имен поля
Каждая база данных может иметь ограничения на задание имен для полей таблицы. Такие объекты, как классы пространственных объектов или классы отношений, сохраняются в виде таблиц в РСУБД. Поэтому эти ограничения действуют не только на отдельные таблицы. Ограничения могут или не могут быть общими для различных систем баз данных, поэтому скрипты должны проверять все новые имена полей, чтобы гарантировать стабильную работу инструмента.
Ниже перечислены ошибки в именах полей, которые будут исправлены:
Принимает строку (имя поля) и путь рабочей области и возвращает корректное имя поля, созданное с учетом ограничений на задание имен в выходной базе геоданных.
Функция ValidateFieldName
Следующий пример демонстрирует порядок добавления поля независимо от входного имени с помощью функции ValidateFieldName :
Если скрипт обновляет набор данных, например класс пространственных объектов или таблицу, старайтесь избежать ситуаций, приводящих к блокированию набора данных. Когда вы открываете персональную или файловую базу геоданных в ArcCatalog, скрипт сможет обновить какое-либо содержание базы геоданных только тогда, когда вы снимете с нее отметку и обновите папку или закроете ArcCatalog. Это также относится к инструментам-скриптам:
Именование в Python — как выбирать имена и почему это важно
Н ачинающие программисты не придают значение именованию переменных при написании кода. Особенно это касается новых проектов — есть какая-то идея, её нужно реализовать и получить результат. Нет времени на то, чтобы задумываться о названиях для переменных, функций, классов и т.п.
Но проект растёт, количество кода увеличивается, и в один прекрасный день разработчик понимает, что 80% его времени уходит на чтение кода и его модификацию (а вовсе не на написание нового кода). Код, написанный неделю назад, кажется незнакомым — приходиться тратить время и силы чтобы вспомнить, что он делает. Плохое именование усугубляет картину:
Минусы такого именования:
Основная суть программирования — это управление сложностью. Поддерживать сотни тысяч строк кода — достаточно сложно. Для уменьшения сложности приложение разбивают на модули, методы и классы. Правильное именование переменных также помогает в управлении сложностью.
Управление сложностью является сущностью компьютерного программирования.
Ниже рассмотрим, как правильно именовать переменные в Python, какую нотацию использовать + кратко рассмотрим стандарт РЕР8.
Допустимые имена переменных в Python
Вы можете придумать любые названия для переменных в Python, но есть несколько правил, которые нужно соблюдать.
Правила для переменных в Python:
Список всех зарезервированных ключевых слов можно посмотреть так:
import keyword print(keyword.kwlist)
Если нарушить правило именования, получим SyntaxError :
3r = 10 print(3r) File «test.py», line 1 3r = 10 ^ SyntaxError: invalid syntax
Нотация в Python: CamelCase или under_score?
Нотация — это соглашение об именовании. Наиболее популярные нотации в программировании — camel case и underscore.
camelCase (еще называется «верблюжья нотация») — это стиль, в котором слова пишутся слитно, а каждое слово начинается с прописной (большой) буквы. Имеется два подвида этого стиля: lowerCamelCase (все слова кроме первого начинаются с прописной буквы) и UpperCamelCase (все слова, в том числе и первое пишутся с большой буквы).
under_score (snake_case) — при использовании этого стиля в качестве разделителя используется символ подчеркивания «_», а все слова начинаются со строчной (маленькой) буквы;
В Python преимущественно используется нотация under_score
Однако under_score — не единственная нотация, рекомендуемая к использованию в Python. Вот гайдлайн по именованию, основанный на рекомендациях Гвидо ван Россума (автора языка Python):
Как выбирать имена для переменных в Python
Основной принцип хорошего именования — имена должны быть содержательными (полностью отражать своё назначение). Перед тем, как дать имя переменной, функции или классу, ответьте на вопросы:
👎 Пример плохого именования:
def area(side1, side2): return side1 * side2 d = area(4, 5)
В данном примере переменная d не обозначает ровным счётом ничего. По названию функции area не понятно, что она делает, какие параметры принимает и что возвращает.
👍 Пример хорошего именования:
def get_rectangle_area(length, width): return length * width area = get_rectangle_area(4, 5)
В примере понятно что делает функция get_rectangle_area (передав длину и ширину, функция вычисляет и возвращает площадь прямоугольника). Результат попадет в переменную area (площадь).
Содержательное имя понятно, легко читается и не требует дополнительных комментариев.
Вот еще несколько рекомендаций по выбору имён в Python:
⚡ Подбирайте имена на английском языке. Не нужно использовать русские имена переменных и писать их транслитом. Для программиста важно знать английский язык.
def proverka_zdorovya(): # плохо pass def health_check(): # хорошо pass
⚡ Для функций используйте глагол (например «купить», «получить», «распечатать»), для переменных, модулей и классов используйте существительное (например «список», «покупатели», «товары»).
Частая ошибок новичков — называть функцию существительным:
def speed_calculator(distance, time): # неправильно (калькулятор скорости) pass def calculate_speed(distance, time): # правильно (рассчитать скорость) pass
⚡ Имена функций должны быть как можно короче. Функция выполняет всего одно действие и именно оно должно отображаться в её имени.
def create_text_utf8_pipe_from_input(): # плохо pass def create_pipe(): # хорошо pass
⚡ Перед именами булевских переменных (и методов, возвращающих тип bool ), добавляйте префикс «is».
def is_goal_state(): # хорошо pass is_active = True # хорошо
⚡ Используйте удобопроизносимые имена. Людям удобно работать со словами. Часть мозга специализируется на обработке слов — нужно использовать эту часть мозга.
# пример плохого именования (имена трудно произносить вслух) class GlobalFRTEV: # плохо def get_any_mdhd(self): # плохо pass def get_any_mdhl(self): # плохо pass def get_any_mdhf(self): # плохо pass
Имена будут использоваться в обсуждении с коллегами. Рассказывать про баг в методе get_any_mdhf класса GlobalFRTEV будет достаточно проблематично.
⚡ Использовать однобуквенные переменные не рекомендуется. Их можно использовать исключительно для локальных переменных в небольших методах.
r = requests.get(‘https://pythonchik.ru’) # плохо response = requests.get(‘https://pythonchik.ru’) # хорошо
⚡ Не нужно разрабатывать и использовать свою систему кодирования имен. Такие имена трудно произносить и в них можно сделать опечатку. К тому же, каждый новый сотрудник должен будет изучать вашу систему кодирования.
tm1_word = «Hello» # плохо
⚡ Также не следует использовать юмор при выборе имени файла. Ведь шутка может быть понятна не всем. Также не рекомендуется использовать каламбуры и сленг.
⚡ Помните, что ваш код будут читать программисты, поэтому используйте слова из профессиональной области, например, названия алгоритмов, паттернов или математические термины. Также полезно использовать слова из предметной области, к которой принадлежит решаемая задача.
💭 Больше полезных сведений о выборе имен идентификаторов и другие советы, которые пригодятся при написании кода, можно найти в книгах:
Именование переменных в PEP8
В стандарте РЕР8 описаны следующие стили именования:
💁♂️ Для удобства, среды разработки (например PyCharm) автоматически проверяют, насколько код соответствует рекомендациям стандарта РЕР8. Если имя идентификатора не будет соответствовать соглашениям, то IDE подчеркнет переменную, а если навести на нее мышку, появится сообщение с подсказкой.
Хороший код документирует сам себя. При правильном именовании, не возникает вопросов по тому, что происходит в отдельных частях кода. И отпадает необходимость писать комментарии к каждой строке.
Чтобы прокачать навык именования переменных, читайте чужой код крупных проектов (например на github). Смотрите, какие имена используют опытные разработчики, анализируйте и применяйте в своих проектах.
Python переменные
Оглавление Присвоение переменной Типы переменных в Python Ссылки на объекты Идентичность объекта Имена переменных Зарезервированные слова (ключевые слова) Вывод Вот…
Вот что вы узнаете из этого руководства: вы узнаете, как каждый элемент данных в программе Python может быть описан абстрактным термином-объектом, и вы узнаете, как управлять
Присвоение переменной
Думайте о переменной как об имени, прикрепленном к определенному объекту. В Python переменные не нужно объявлять или определять заранее, как это имеет место во многих других языках программирования. Чтобы создать переменную, вы просто присваиваете ей значение, а затем начинаете использовать. Присваивание выполняется с помощью единственного знака равенства (=):
Это читается или интерпретируется как «n присвоено значение 300». Как только это будет сделано, n можно использовать в операторе или выражении, и его значение будет заменено:
Так же, как буквальное значение может отображаться непосредственно из приглашения интерпретатора в сеансе REPL без необходимости print(), переменная может:
Позже, если вы измените значение n и используете его снова, вместо него будет подставлено новое значение:
Python также позволяет назначать цепочки, что позволяет назначать одно и то же значение нескольким переменным одновременно:
Цепное присвоение, приведенное выше, одновременно присваивает 300 переменных a, b и c.
Типы переменных в Python
Во многих языках программирования переменные имеют статическую типизацию. Это означает, что переменная изначально объявляется как имеющая определенный тип данных, и любое значение, присвоенное ей во время ее существования, всегда должно иметь этот тип.
Это ограничение не распространяется на переменные в Python. В Python переменной может быть присвоено значение одного типа, а затем повторно присвоено значение другого типа:
Ссылки на объекты
Что на самом деле происходит, когда вы присваиваете переменную? Это важный вопрос для Python, потому что ответ несколько отличается от того, что вы найдете во многих других языках программирования.
Python – это весьма объектно-ориентированный язык. Фактически, практически каждый элемент данных в программе Python является объектом определенного типа или класса.
Рассмотрим этот код:
ри представлении оператора print (300) интерпретатор выполняет следующие действия:
Вы можете видеть, что целочисленный объект создается с помощью встроенной функции type():
Переменная Python – это символическое имя, которое является ссылкой или указателем на объект. После того, как объект назначен переменной, вы можете ссылаться на объект по этому имени. Но сами данные все еще содержатся в объекте.
Это присвоение создает целочисленный объект со значением 300 и присваивает переменной n, указывающей на этот объект.
Следующий код проверяет, что n указывает на целочисленный объект:
Теперь рассмотрим следующее утверждение:
Что происходит, когда он выполняется? Python не создает другой объект. Он просто создает новое символическое имя или ссылку, m, которая указывает на тот же объект, на который указывает n.
Множественные ссылки на один объект
Далее предположим, что вы делаете это:
Теперь Python создает новый целочисленный объект со значением 400, и m становится ссылкой на него.
Ссылки на отдельные объекты
Наконец, предположим, что этот оператор выполняется следующим образом:
Теперь Python создает строковый объект со значением «foo» и делает ссылку на n.
Ссылка на целочисленный объект 300 больше не существует. Он потерян, и к нему невозможно получить доступ.
В руководствах этой серии иногда упоминается время жизни объекта. Жизнь объекта начинается с момента его создания, когда создается по крайней мере одна ссылка на него. Во время существования объекта могут быть созданы дополнительные ссылки на него, как вы видели выше, а также ссылки на него могут быть удалены. Объект как бы остается в живых, пока на него есть хотя бы одна ссылка.
Когда количество ссылок на объект падает до нуля, он становится недоступным. На этом его срок службы закончился. Python в конечном итоге заметит, что он недоступен, и освободит выделенную память, чтобы ее можно было использовать для чего-то другого. На компьютерном жаргоне этот процесс называется сборкой мусора.
Идентичность объекта
В Python каждому создаваемому объекту присваивается номер, который однозначно его идентифицирует. Гарантируется, что никакие два объекта не будут иметь одинаковый идентификатор в течение любого периода, в течение которого их время жизни перекрывается. Как только счетчик ссылок на объект упадет до нуля и он будет обработан сборщиком мусора, как это произошло с объектом 300 выше, его идентификационный номер становится доступным и может использоваться снова.
Глубокое погружение: кэширование малых целочисленных значений
Из того, что вы теперь знаете о назначении переменных и ссылках на объекты в Python, вероятно, вас не удивит следующее:
Здесь m и n по отдельности назначаются целочисленным объектам, имеющим значение 30. Но в этом случае id (m) и id (n) идентичны!
В целях оптимизации интерпретатор создает объекты для целых чисел в диапазоне [-5, 256] при запуске, а затем повторно использует их во время выполнения программы. Таким образом, когда вы назначаете отдельные переменные целочисленному значению в этом диапазоне, они фактически будут ссылаться на один и тот же объект.
Имена переменных
В примерах, которые вы видели до сих пор, использовались короткие, лаконичные имена переменных, такие как m и n. Но имена переменных могут быть более подробными. Фактически, это обычно полезно, потому что это делает назначение переменной более очевидным с первого взгляда.
Официально имена переменных в Python могут быть любой длины и могут состоять из прописных и строчных букв (A-Z, a-z), цифр (0-9) и символа подчеркивания (_). Дополнительным ограничением является то, что, хотя имя переменной может содержать цифры, первый символ имени переменной не может быть цифрой.
Примечание. Одним из дополнений к Python 3 была полная поддержка Unicode, которая также позволяет использовать символы Unicode в имени переменной. Вы узнаете о Unicode более подробно в одном из будущих руководств.
Например, все следующие допустимые имена переменных:
Но это не так, потому что имя переменной не может начинаться с цифры:
Обратите внимание, что регистр имеет значение. Строчные и прописные буквы – это не одно и то же. Также важно использование символа подчеркивания. Каждое из следующего определяет разные переменные:
Ничто не мешает вам создать две разные переменные в одной программе под названием age и Age, или, если на то пошло, agE. Но, вероятно, это опрометчиво. Это, безусловно, могло бы сбить с толку любого, кто пытается прочитать ваш код, и даже вас самого, после того, как вы какое-то время отдалились от него.
Целесообразно дать переменной имя, которое будет достаточно описательным, чтобы было понятно, для чего она используется. Например, предположим, что вы подсчитываете количество людей, окончивших колледж. Вы могли бы выбрать любое из следующего:
Все они, вероятно, лучший выбор, чем n, ncg и т.п. По крайней мере, вы можете сказать по имени, что должно представлять значение переменной.
С другой стороны, не обязательно все они одинаково удобочитаемы. Как и во многих других случаях, это вопрос личных предпочтений, но большинство людей сочтут, что первые два примера, в которых все буквы сложены вместе, труднее читать, особенно букву, написанную заглавными буквами. Наиболее часто используемые методы построения имени переменной из нескольких слов – это последние три примера:
Программисты горячо, с удивительной страстью спорят, что из них предпочтительнее. За всех них можно привести достойные аргументы. Используйте тот из трех, который вам больше всего нравится. Выберите один и используйте его постоянно.
Позже вы увидите, что не только переменным можно давать имена. Вы также можете давать имена функциям, классам, модулям и так далее. Правила, применяемые к именам переменных, также применяются к идентификаторам, более общему термину для имен, присваиваемых программным объектам.
Руководство по стилю кода Python, также известное как PEP 8, содержит соглашения об именах, в которых перечислены рекомендуемые стандарты для имен различных типов объектов. PEP 8 включает следующие рекомендации:
Зарезервированные слова (ключевые слова)
Есть еще одно ограничение на имена идентификаторов. В языке Python зарезервирован небольшой набор ключевых слов, обозначающих специальные языковые функции. Ни один объект не может иметь то же имя, что и зарезервированное слово.
В Python 3.6 есть 33 зарезервированных ключевых слова:
Python Keywords | |||
---|---|---|---|
False | def | if | raise |
None | del | import | return |
True | elif | in | try |
and | else | is | while |
as | except | lambda | with |
assert | finally | nonlocal | yield |
break | for | not | |
class | from | or | |
continue | global | pass |
Вы можете просмотреть этот список в любое время, набрав help («ключевые слова») интерпретатору Python. Зарезервированные слова чувствительны к регистру и должны использоваться точно так, как показано. Все они полностью строчные, за исключением False, None и True.
Попытка создать переменную с тем же именем, что и любое зарезервированное слово, приводит к ошибке:
Вывод
В этом руководстве были рассмотрены основы переменных Python, включая ссылки на объекты и их идентификационные данные, а также именование идентификаторов Python.
Теперь вы хорошо разбираетесь в некоторых типах данных Python и знаете, как создавать переменные, которые ссылаются на объекты этих типов.