Следует ли мне избегать использования str в качестве имени переменной в Python?

Я заметил, что некоторые имена переменных в Python выделяются Vim синим цветом, а другие нет. Я знаком с концепцией зарезервированных слов на этот вопрос, но при поиске str не появляется быть одним из этих слов.

Однако, несмотря на подсветку, это (кажется) не вызывает никаких проблем. Простой пример:

str = "Hello"
sfgfgf = "World"
print(str)
print(sfgfgf)  

А вот фрагмент экрана выделения Vim:

введите здесь описание изображения

И в определении переменной, и в операторе печати str выделено синим цветом, а sfgfgf — нет. Тем не менее, этот код с радостью печатает Hello и World.

То же самое верно и для int, и я уверен, что есть и другие примеры (приведенный ниже код также работает без нареканий):

int = 1
intentional_or_no = 5
print(int)
print(intentional_or_no)

введите здесь описание изображения

Итак, мой вопрос:

  1. Есть ли проблема с использованием таких слов, как str и int, в качестве имен переменных?
  2. Если нет, то почему Vim выделяет их синим цветом?

person Lou    schedule 30.12.2020    source источник
comment
Это встроенные имена, Python позволит их использовать, но вы не должны их использовать. str() и int(), например, используются для явного приведения типов.   -  person anurag    schedule 30.12.2020
comment
Это имена, которые используются для встроенных модулей. Не используйте их, это обычно считается плохой практикой. Обратите внимание: если бы они были зарезервированными словами, вы не смогли бы их использовать по определению.   -  person juanpa.arrivillaga    schedule 30.12.2020


Ответы (3)


Да, вам следует избегать использования str в качестве переменной, потому что

А) имя переменной в соответствии с тем, как она используется, облегчает чтение кода как для вас, так и для других людей.

и B) str() — это функция, которая преобразует что-то (целое число, число с плавающей запятой и т. д.) в строку. вот почему это выделяется.

это все равно будет работать, но лучше использовать другое имя для переменной

person Community    schedule 30.12.2020
comment
Спасибо, я, должно быть, забыл, что str и int являются встроенными функциями! :) - person Lou; 30.12.2020
comment
str не является функцией; это тип. Как вызываемый, он принимает аргумент x и возвращает x.__str__(). - person chepner; 30.12.2020

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

Например, если вы разрабатываете свою собственную функцию str в Python и ссылаетесь на str где-то еще в своем коде, ожидаете ли вы, что будет использоваться функция Python или ваша?

person Jason Cook    schedule 30.12.2020

Смотрите, чтобы понять, почему это плохо, посмотрите на следующий пример:

num = 10
real = 5.4
print(real, int(real))

Будет производить:

5.4 5

Теперь, если бы вы написали:

int = 10
real = 5.4
print(real, int(real))

Вы получите эту ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-39e8d577bf55> in <module>
      2 int = 10
      3 real = 5.4
----> 4 print(real, int(real))

TypeError: 'int' object is not callable

Локальные имена перекрывают globals или built-ins, делая их непригодными для использования, если вы не вводите пространство имен, что не всегда возможно.

person anurag    schedule 30.12.2020