我有很少的python经验,并且我没有perl知识,但我需要将连接到MySQL服务器的perl代码转换为python。
在perl子例程中,在标准连接操作之后,出现的代码为:
my @tmp = @{$dbh->selectall_arrayref( $sql )};
my @types;
foreach my $t (@tmp) {
push @types, @$t[0];
}
return @types;
其中$ sql是MySQL选择查询。我在python函数中要做的是:
cursor = conn.cursor()
cursor.execute( sql )
tmp = cursor.fetchall()
types = list( len( tmp ) )
for item in tmp :
types.append( item[0] )
return types
我的问题是@ $ t [0]包含什么,是否等同于tmp中的item [0]?
谢谢!
答案 0 :(得分:0)
你应该能够运行代码来发现等价,但是这两件事是等价的。
在perl示例中导致语法奇怪的是perl在早期对标量,数组和散列进行了非常严格的分离,而数组和散列只能将标量作为存储值。通过在perl中添加引用来快速改进这一点,这些引用是指向数组和哈希的标量,但语法已经设置了这种分离,因此必须将其他操作添加到语言中。
因此,第一行是引用数组引用数组并取消引用外部引用,以便它现在是一个数组引用数组。然后它遍历其中的所有引用,取消引用它们并获取数组中的第一个元素。因为@$t[0]
通常看起来很奇怪,所以你会看到它写成$t->[0]
,它不需要你知道数组解除引用运算符(@
)比元素访问运算符({{}更紧密地绑定1}})。