Почему эти строки кода допустимы в python? - PullRequest
0 голосов
/ 27 ноября 2018

Редактировать: Кажется, этот вопрос перепутан с нарезкой списка и использованием неправильного кода.Уточнение вопроса далее.

Я хотел бы спросить, что означают следующие две строки кода буквально в языке Python.

In [51]: data = list(range(10))                                                                              
In [53]: data[-1]   

Фон

Я случайно запустил вышеупомянутый необработанный вывод Jupyter Notebook через проверку синтаксиса python (pylint), и неожиданно он не вывел синтаксическую ошибку, но вместо этого

In [53]: data[-1]  
   ^ (bad-whitespace)
code2.py:1:0: C0111: Missing module docstring (missing-docstring)
code2.py:1:0: E0602: Undefined variable 'In' (undefined-variable)
code2.py:1:9: E0602: Undefined variable 'data' (undefined-variable)
code2.py:2:0: E0602: Undefined variable 'In' (undefined-variable)
code2.py:2:9: E0602: Undefined variable 'data' (undefined-variable)

------------------------------------------------------------------------
Your code has been rated at -115.00/10 (previous run: -90.00/10, -25.00)

Поэтому я попытался понятьчто эти строки кода буквально делали.

И я попытался подключить отсутствующие переменные.

Вот где я получил следующий результат, похожий на словарь.

In = {}
data = ['apple'] # This list needed values, otherwise data[-1] threw an error

In [51]: data = list(range(10))                                                                              
In [53]: data[-1] 

print(In)    # {51: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

# Why were there no values for key 53? (either {53: 'apple'})

Я не мог понятьчто происходит с 2 строками кода.

Я не думал, что эта строка кода была законной In [51]: data = list(range(10)), и, поскольку это так, почему значение In [53] не было присвоено после этого?

Так что любое объяснение или направлениессылки будут с благодарностью.Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Ответит на этот вопрос, если у кого-то возникнут те же вопросы, что и у меня.

Спасибо @Goyo за указание на Переменные аннотации , представленные в Python 3.6

variable: annotation = assignment

Этот синтаксис используется для аннотирования типов в переменных по сравнению с использованием комментариев (fruit: str = 'apple' против fruit = 'apple' # type: str).

Значение в поле аннотации не строго соблюдается, и поэтому синтаксис был допустимым.

Первое утверждение

In [51]: data = list(range(10))

Variable = In [51] 
Annotation = data
Assignment = list(range(10))  

Второе утверждение

In [53]: data[-1]

Variable = In [53]
Annotation = data[-1]
0 голосов
/ 27 ноября 2018

Вы никогда не назначаете значение

In [53]

Вы просто получаете доступ к этой части словаря.Если вы сделаете что-то подобное, запись появится в диктовке.

In[53]: data[-1] = 'hello world'

Result: {51: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 53: 'hello world'}
...