python字典列表和列表字典?(Python字典和列表字典?)
Python函数(内置函数和自定义函数)是处理数据的重要工具。然而,他们处理数据的方式有点混乱,如果他们不知道发生了什么,他们可能会在分析中造成严重错误。
在Python函数控制列表和字典中,我们将仔细研究Python在函数内部操作时如何处理不同的数据类型,并学习如何仅在需要更改数据时才更改数据。
功能中的内存分离
为了更好地理解Python是如何处理函数中的全局变量的,让我们做一个实验。创建两个全局变量number_1和number_2,并将它们赋值给整数5和10。然后,我们将使用这些全局变量作为函数的参数来执行简单的数学运算。变量名也用作函数的参数名。接下来,我们将检查函数中所有变量的使用是否影响了这些变量的全局值。
为了让您看到上面的函数正确工作,全局变量number_1和number_2的值被用作参数,并且在函数参数名称中不会改变。这是因为Python将函数的变量存储在与全局变量不同的内存位置。他被孤立了。因此,变量number_1在全局作用域中可以有一个值5,在函数内部可以有不同的值50。
什么是字典和字典?
列表列表(List List)
在number_1函数中对上述变量执行的任何操作都不会影响其全局值。然而,number_1是一个整数,这是一个非常基本的数据类型。如果我们尝试使用不同的数据类型(如列表)来执行相同的实验,会发生什么?然后,创建一个名为duplicate_last的函数,将最后一个条目复制到作为参数传递的列表中。
正如你所看到的,即使全局值在函数内部发生了变化,全局值initial_list也会在这里被更新。
字典.字典
现在,让我们编写一个以字典为参数的函数,看看在函数内部对全局字典变量进行更改时是否会进行更改。
为了使这一点更加真实,我们将使用AppleStore. csv在Python基础课程中使用的数据集的数据。数据可以在这里下载。
在下面的代码片段中,我们从一个字典开始,该字典包含数据集中每个年龄层的应用程序数量。因此,有4,433个应用程序排名为“4+”,987个应用程序排名为“9+”。) 。假设你想计算每个年龄组的百分比,以了解App Store上最常见的年龄组。
为此,我们编写了一个名为make_percentages的函数,它将字典作为参数,并将计数转换为百分比。我们必须从零开始计数,遍历字典中的每个值,并将其添加到计数中以获得分数的总和。然后,我们再次遍历字典,通过对每个值执行数学运算来计算百分比。
在查看输出之前,让我们快速回顾一下上面发生了什么。在将应用程序年龄层次结构的字典分配给变量之后,我们为变量创建了一个名为make_percentages的新函数。这个函数有一个参数,叫做a_dictionary。
为了绘制一个应用程序的百分比如何下降到每个年龄级别,我们需要知道应用程序的总数,因此我们首先将新变量total设置为0,然后循环a_dictionary将其添加到total中。
完成后,只需再次循环a_dictionary,将每个项除以总数,然后将结果乘以100即可。这会给你一个百分比的字典。
但是,如果我们使用global content_ratings作为这个新函数的参数,会发生什么?
正如您在列表中看到的,content_ratings将更改全局变量,即使您仅在创建的函数中更改make_perages也是如此。
这里到底发生了什么事?我们遇到了可变数据类型和不可变数据类型之间的区别。
可变和不可变数据类型
在Python中,数据类型可以是可变的(可变的)或不可变的(不可变的)虽然我们在Python入门中使用的大多数数据类型都是不可变的(包括整数、浮点数、字符串、布尔值和元组),列表和字典是可变的。这意味着,正如我们在上面的例子中看到的,即使它们在函数内部使用,我们也可以修改全局列表或字典。
要理解可变(可变)和不可变(不可变)之间的区别,了解Python实际上是如何处理这些变量的。
让我们考虑一个简单的变量赋值:
变量名中的a类似于指向5的指针,如果需要的话,它可以帮助你得到5。
5是整数,整数是不可变的数据类型。如果数据类型是不可变的,那么一旦创建,就不能更新它。如果a +=1,那么5实际上不会被更新为6。你可以在下面的动画中看到它:
1a首先指的是5。
如果执行2a +=1并将指针从5移动到6,则实际上不会更改number5。
可变数据类型,如列表和字典,有不同的行为。你可以更新它。举个例子,让我们做一个非常简单的列表:
在这个列表的末尾加上a到3,不仅指向list_1中的其他列表,还直接更新现有列表:
即使您创建了多个列表变量,只要它们引用同一个列表,更改列表也会更新所有内容,如下面的代码所示:
这是在上面代码中实际发生的动画的可视化:
这就解释了为什么我们在之前尝试使用列表和字典时更改了全局变量。因为列表和字典是可变的,所以即使在函数内部进行更改也会改变列表或字典本身,但对于不可变数据类型则不是这样。
保留可变数据类型
一般来说,我们不希望函数改变全局变量,即使它包含可变数据类型,如列表或字典。这是因为在更复杂的分析和程序中,我们可能会频繁地使用许多不同的功能。如果每个人都在修改他们正在使用的列表或字典,那么很难跟踪哪些内容正在被修改。
幸运的是,有一个简单的方法可以解决这个问题。它使用内置的Python方法来复制列表和字典。复印件。
如果你还不知道怎么做,别担心。我们在Python中级课程中讨论了这些内容,但是在本教程中,您需要知道的是.copy的工作方式如下:
让我们再次查看我们为列表编写的函数,并更新它,使函数内部发生的任何更改都不会改变init_list。只需将传递给函数的参数从initial_list更改为initial_list. copy即可。
正如你所看到的,这解决了问题。以下是他们这样做的原因。using. copy创建了列表的另一个副本,因此指向initial_list本身的a_list将是一个新副本,而不是它自己的initial_list。在a_list之后,由于对单独的列表而不是列表ial_list本身所做的更改,因此ial_list的全局值不会更改。
然而,这个解决方案还不是完美的。每当.copy将参数传递给函数时,都必须添加它们。否则,全局值initial_list可能会意外地被修改。如果你不想担心这个问题,你实际上可以在函数中创建一个列表的副本:
通过这种方法,您可以像传递initial_list函数一样安全地传递可变全局变量,并且不会更改全局值,因为函数本身会创建一个副本并对该副本执行操作。
此方法也可以是词典。就像列表一样,您只需在transfer函数的位置添加一个.copy参数,就可以创建函数使用的副本,而无需更改原始变量。
但是,如果您再次使用此方法,您必须记住,每次将字典传递给make_percentages函数时,都会添加.copy。如果你经常使用这个函数,最好在函数本身实现一个副本,这样你就不必记住它了。
下面,我们将在函数本身内部使用.copy。这允许您使用作为参数传递的全局变量,python函数控制列表和字典https//www.aaa-cg.com.cn/data/2321.html,而无需更改。另外,别忘了给你传递的每个参数添加一个.copy。
正如我们所看到的,如果我们修改函数来创建字典的副本,然后只将该副本的计数更改为百分比,我们可以执行所需的操作,而无需实际更改content_ratings。
作为结论,作为
在Python函数控制列表和字典中,我们已经看到了可变数据类型和可变数据类型之间的区别。可变数据类型可以更改,而可变数据类型不能更改。您已经学习了如何使用.copy方法创建可变数据类型(如列表和字典)的副本,这样您就可以在函数中使用全局值而不需要更改全局值。
https://www.toutiao.com/i6836270942046388748/
在Python函数控制列表和字典中,我们将仔细研究Python在函数内部操作时如何处理不同的数据类型,并学习如何仅在需要更改数据时才更改数据。
功能中的内存分离
为了更好地理解Python是如何处理函数中的全局变量的,让我们做一个实验。创建两个全局变量number_1和number_2,并将它们赋值给整数5和10。然后,我们将使用这些全局变量作为函数的参数来执行简单的数学运算。变量名也用作函数的参数名。接下来,我们将检查函数中所有变量的使用是否影响了这些变量的全局值。
为了让您看到上面的函数正确工作,全局变量number_1和number_2的值被用作参数,并且在函数参数名称中不会改变。这是因为Python将函数的变量存储在与全局变量不同的内存位置。他被孤立了。因此,变量number_1在全局作用域中可以有一个值5,在函数内部可以有不同的值50。
什么是字典和字典?
列表列表(List List)
在number_1函数中对上述变量执行的任何操作都不会影响其全局值。然而,number_1是一个整数,这是一个非常基本的数据类型。如果我们尝试使用不同的数据类型(如列表)来执行相同的实验,会发生什么?然后,创建一个名为duplicate_last的函数,将最后一个条目复制到作为参数传递的列表中。
正如你所看到的,即使全局值在函数内部发生了变化,全局值initial_list也会在这里被更新。
字典.字典
现在,让我们编写一个以字典为参数的函数,看看在函数内部对全局字典变量进行更改时是否会进行更改。
为了使这一点更加真实,我们将使用AppleStore. csv在Python基础课程中使用的数据集的数据。数据可以在这里下载。
在下面的代码片段中,我们从一个字典开始,该字典包含数据集中每个年龄层的应用程序数量。因此,有4,433个应用程序排名为“4+”,987个应用程序排名为“9+”。) 。假设你想计算每个年龄组的百分比,以了解App Store上最常见的年龄组。
为此,我们编写了一个名为make_percentages的函数,它将字典作为参数,并将计数转换为百分比。我们必须从零开始计数,遍历字典中的每个值,并将其添加到计数中以获得分数的总和。然后,我们再次遍历字典,通过对每个值执行数学运算来计算百分比。
在查看输出之前,让我们快速回顾一下上面发生了什么。在将应用程序年龄层次结构的字典分配给变量之后,我们为变量创建了一个名为make_percentages的新函数。这个函数有一个参数,叫做a_dictionary。
为了绘制一个应用程序的百分比如何下降到每个年龄级别,我们需要知道应用程序的总数,因此我们首先将新变量total设置为0,然后循环a_dictionary将其添加到total中。
完成后,只需再次循环a_dictionary,将每个项除以总数,然后将结果乘以100即可。这会给你一个百分比的字典。
但是,如果我们使用global content_ratings作为这个新函数的参数,会发生什么?
正如您在列表中看到的,content_ratings将更改全局变量,即使您仅在创建的函数中更改make_perages也是如此。
这里到底发生了什么事?我们遇到了可变数据类型和不可变数据类型之间的区别。
可变和不可变数据类型
在Python中,数据类型可以是可变的(可变的)或不可变的(不可变的)虽然我们在Python入门中使用的大多数数据类型都是不可变的(包括整数、浮点数、字符串、布尔值和元组),列表和字典是可变的。这意味着,正如我们在上面的例子中看到的,即使它们在函数内部使用,我们也可以修改全局列表或字典。
要理解可变(可变)和不可变(不可变)之间的区别,了解Python实际上是如何处理这些变量的。
让我们考虑一个简单的变量赋值:
变量名中的a类似于指向5的指针,如果需要的话,它可以帮助你得到5。
5是整数,整数是不可变的数据类型。如果数据类型是不可变的,那么一旦创建,就不能更新它。如果a +=1,那么5实际上不会被更新为6。你可以在下面的动画中看到它:
1a首先指的是5。
如果执行2a +=1并将指针从5移动到6,则实际上不会更改number5。
可变数据类型,如列表和字典,有不同的行为。你可以更新它。举个例子,让我们做一个非常简单的列表:
在这个列表的末尾加上a到3,不仅指向list_1中的其他列表,还直接更新现有列表:
即使您创建了多个列表变量,只要它们引用同一个列表,更改列表也会更新所有内容,如下面的代码所示:
这是在上面代码中实际发生的动画的可视化:
这就解释了为什么我们在之前尝试使用列表和字典时更改了全局变量。因为列表和字典是可变的,所以即使在函数内部进行更改也会改变列表或字典本身,但对于不可变数据类型则不是这样。
保留可变数据类型
一般来说,我们不希望函数改变全局变量,即使它包含可变数据类型,如列表或字典。这是因为在更复杂的分析和程序中,我们可能会频繁地使用许多不同的功能。如果每个人都在修改他们正在使用的列表或字典,那么很难跟踪哪些内容正在被修改。
幸运的是,有一个简单的方法可以解决这个问题。它使用内置的Python方法来复制列表和字典。复印件。
如果你还不知道怎么做,别担心。我们在Python中级课程中讨论了这些内容,但是在本教程中,您需要知道的是.copy的工作方式如下:
让我们再次查看我们为列表编写的函数,并更新它,使函数内部发生的任何更改都不会改变init_list。只需将传递给函数的参数从initial_list更改为initial_list. copy即可。
正如你所看到的,这解决了问题。以下是他们这样做的原因。using. copy创建了列表的另一个副本,因此指向initial_list本身的a_list将是一个新副本,而不是它自己的initial_list。在a_list之后,由于对单独的列表而不是列表ial_list本身所做的更改,因此ial_list的全局值不会更改。
然而,这个解决方案还不是完美的。每当.copy将参数传递给函数时,都必须添加它们。否则,全局值initial_list可能会意外地被修改。如果你不想担心这个问题,你实际上可以在函数中创建一个列表的副本:
通过这种方法,您可以像传递initial_list函数一样安全地传递可变全局变量,并且不会更改全局值,因为函数本身会创建一个副本并对该副本执行操作。
此方法也可以是词典。就像列表一样,您只需在transfer函数的位置添加一个.copy参数,就可以创建函数使用的副本,而无需更改原始变量。
但是,如果您再次使用此方法,您必须记住,每次将字典传递给make_percentages函数时,都会添加.copy。如果你经常使用这个函数,最好在函数本身实现一个副本,这样你就不必记住它了。
下面,我们将在函数本身内部使用.copy。这允许您使用作为参数传递的全局变量,python函数控制列表和字典https//www.aaa-cg.com.cn/data/2321.html,而无需更改。另外,别忘了给你传递的每个参数添加一个.copy。
正如我们所看到的,如果我们修改函数来创建字典的副本,然后只将该副本的计数更改为百分比,我们可以执行所需的操作,而无需实际更改content_ratings。
作为结论,作为
在Python函数控制列表和字典中,我们已经看到了可变数据类型和可变数据类型之间的区别。可变数据类型可以更改,而可变数据类型不能更改。您已经学习了如何使用.copy方法创建可变数据类型(如列表和字典)的副本,这样您就可以在函数中使用全局值而不需要更改全局值。
https://www.toutiao.com/i6836270942046388748/