python itertools组合逻辑

时间:2015-06-22 18:29:15

标签: python environment-variables itertools scopes

我正在查看itertools(https://docs.python.org/2/library/itertools.html)的python文档中的组合代码

<script type="text/javascript">
    google.load("visualization", "1", {packages:["corechart"]});
    function getDrawChartFunction(year, data) {
        return function() {
            console.log('Inside the drawChart() function. Current year value is: '+year);
            var data = google.visualization.arrayToDataTable(data);

            var options = {
                title: 'Distribución de notas y entrevistas en el año '+ year
                //, ...
            };

            var chart = new google.visualization.PieChart(document.getElementById('chart_'+year));

            chart.draw(data, options);
        }; // End of return of *anonymous function closure*
    }

<?php 
    foreach ($anios as $anio) 
    {
        $datos=$difusion_stats->notas_stats_anio($anio->Año);
        ?>
        <script type="text/javascript">
            google.load("visualization", "1", {packages:["corechart"]});
            google.setOnLoadCallback(getDrawChartFunction(
               <?=$anio->Año?>,
               <?=$datos?>
            ));
        </script>
    <?
    }
?>

在它说index [i] + = 1的行上,为什么它能找到'i'?据我所知,一旦你离开for循环(在True之后开始),变量'i'应该不存在(就像我在第一个yield句中提到的那样)!!!

也有人可以用英语解释逻辑吗?我理解直到第一次屈服,但后来我迷路了。提前谢谢。

1 个答案:

答案 0 :(得分:2)

Python不是块作用域。粗略地说,Python是功能范围的。在其他语言中,如果你做了

for (int i = 0; i < whatever; i++) {
    ...
}

然后i将是for循环的本地。在Python中,等效的

for i in xrange(whatever):

使用整个封闭函数本地的i变量。另外,i永远不会取值whatever,所以当循环结束时,我们仍然有i == whatever - 1