订阅Python变量的原因是什么?

订阅Python变量的原因是什么?,python,python-3.x,subscription,Python,Python 3.x,Subscription,我在堆栈溢出处发现以下代码: input_filename = "to_modify.xlsx" wb = load_workbook(input_filename) # Get first sheet sh: worksheet = wb[wb.sheetnames[0]] 链接如下: 因此,我尝试了一种简化的方式: str = [1, 2, 3, 4] bo: fo = str[str[0]] 它给了我一条错误消息:TypeError:“type”对象是不可订阅的 这

我在堆栈溢出处发现以下代码:

input_filename = "to_modify.xlsx"
wb = load_workbook(input_filename)
# Get first sheet
sh: worksheet = wb[wb.sheetnames[0]]
链接如下:

因此,我尝试了一种简化的方式:

str = [1, 2, 3, 4]
bo: fo = str[str[0]]
它给了我一条错误消息:TypeError:“type”对象是不可订阅的


这里的想法是什么?为什么我需要这个角色?

这里发生了一些事情

在此上下文中:表示类型暗示

sh: worksheet = wb[wb.sheetnames[0]]
表示“sh”指的是“工作表”,并初始化为“wb”的第一个工作簿

你根本不必使用类型暗示,但对于更大的协作项目来说,这是个好主意;如果没有其他东西,它有助于可读性

对于您自己的示例,您选择了“str”是不吉利的,因为它在python中被保留为一个类型。以下是一些可能的备选方案,希望对您有意义:

s: str = 'abcd' # s is of type 'str' and set to 'abcd'
fibos: list = [1, 2, 3, 5, 8, 13, 21, 34] # fibos is a list
s, fibos
#('abcd', [1, 2, 3, 5, 8, 13, 21, 34])

您是否尝试过使用
str
作为变量名?它表示字符串类型,因此它可能认为您正在尝试对类型值进行索引