为什么这些代码行在python中合法?

时间:2018-11-27 10:41:59

标签: python jupyter-notebook pylint

编辑::这个问题似乎与列表切片和使用的错误代码混淆了。进一步澄清了这个问题。

我想问一下以下两行代码字面意思在python中的含义。

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

背景

我不小心通过python语法检查器(pylint)运行了上述原始Jupyter Notebook输出,并且令人惊讶的是它没有抛出语法错误,而是

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'})

我无法真正理解这两行代码的作用。

我不认为这行代码是合法的In [51]: data = list(range(10)),既然如此,为什么之后没有分配In [53]值呢?

因此,对参考的任何解释或指示将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

万一有人和我有同样的问题,就会回答这个问题。

感谢@Goyo向我指出了Python 3.6中引入的Variable Annotations

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]

答案 1 :(得分:-1)

您永远不会为

分配值
In [53]

您只需访问字典的这一部分。如果您这样做,则该条目将显示在字典中。

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

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