python的for循环语句赋值给url_python中for语句中对当前遍历对象赋值的问题?

Python 中 for 遍历通常不建议(不是不能)直接修改遍历对象本身,因为这样就会出现类似如下的问题:

n = [1, 2, 3]

for i in n:

n.append(i)

print(i)

上段程序会进入无限死循环,因为 n 在每次迭代时,长度都会增加,因此for永远不可能穷尽,所以我们通常会使用迭代对象的副本进行遍历:

n = [1, 2, 3]

for i in n[:]:

n.append(i)

print(i)

这样就可以修改n的值,也可以顺利完成遍历。

现在回到你的例子的第一段程序中:

def loadCsv(filename):

# 取出数据

lines = csv.reader(open(filename, 'rb'))

# 存入dataset

dataset = list(lines)

for data in dataset:

for i in data:

i = float(i) #这里前后两个`i`其实指代的是不同的对象

return dataset

事实上,你的i = float(i) 前后两个指代的根本不是同一个对象,后一个 i 是 data的元素,前一个 i 则是loadCsv作用域内的局部变量,这里涉及到 Python 语言设计中的一个不合理的地方,来看一段程序:

for i in range(3):

pass

print(i)

# 2

也就是说参与迭代的标识符 i 在退出 for 循环之后,仍然没有被回收,并且保留着与迭代最后一个值之间的关联,这对同名的全局变量会造成影响,时常会出现这样的错误:

i = 7

for i in range(3):

pass

print(i)

# 2

一个 for 循环之后,全局变量 i 的值尽然莫名其妙的变了,原因在于 i 其实并非对象本身,而是对象的标识符,Python 的标识符并非对象的属性,而是可以复用的命名空间的一部分。

因此当 for 循环内有同名的 i 标识符被赋值时,情况就又不一样了:

for i in range(5):

i = 3

print(i)

# 3

这里 i 的值完全等同于 for 内给它的赋值,原因在于 Python 中的赋值操作,就是将值对象与标识符关联的操作,最后一次迭代时,数值 3 会被关联到标识符 i,因此 i 就被绑定到新的对象上了,回到你的第一段程序,情况也就是如此:i = float(i) 是将值对象 float(i) 绑定到标识符 i,因此赋值后的 i 压根不是 data的元素对象,因此不会更改 dataset。

而你的第二段程序:

def loadCsv(filename):

# 取出数据

lines = csv.reader(open(filename, 'rb'))

# 存入dataset

dataset = list(lines)

for i in range(len(dataset)):

dataset[i] = [float(x) for x in dataset[i]]

return dataset

for 内的 i 只是个索引,你修改的不是i,而是 dataset[i]标识符关联的对象 ,而dataset[i]则是dataset的组成元素,因此可以更改data。

关于标识符和命名空间,可以看一下这篇文章:Python 的命名空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python语言的for循环语句用于重复执行一段代码,按照一定的次数或在一定范围内遍序列的元素。它的基本语法格式如下: ``` for 变量 in 序列: 代码块 ``` 其,变量是用于存储序列的每个元素的变量名,序列是需要遍对象,例如列表、元组或字符串,代码块是需要循环执行的代码段。 在循环开始前,程序会依次将序列的元素赋值给变量,并依次执行代码块。当所有元素都遍完毕后,循环结束。 在代码块,我们可以对变量进行操作,例如输出、计算、条件判断等。循环语句的代码块可以包含任意行数的代码,但需要注意的是,代码块的缩进必须保持一致,通常使用四个空格或一个制表符进行缩进。 在循环语句,我们可以在代码块使用 `break` 语句来提前终止循环,跳出循环体。也可以使用 `continue` 语句来跳过当前迭代,直接进行下一轮循环。 for循环常用于遍序列、遍字典、遍文件等场景。在遍过程,程序可以对元素进行访问、修改以及其他操作。 总之,Python的for循环语句是一种非常常用的循环结构,通过这种语句可以方便地对序列的元素进行遍和操作,大大简化了编程的过程。 ### 回答2: 在Python,for循环语句的格式可以用以下方式表示: ```python for 变量 in 可迭代对象: 循环语句 ``` 其,`变量`表示每次循环迭代后的临时变量,在每次迭代,它会被赋值为可迭代对象的一个元素。`可迭代对象`可以是列表、元组、字符串、字典等,用来提供要迭代的元素。 在循环语句,我们可以执行任意的操作,例如对该元素进行计算、打印输出、条件判断等。在每次迭代后,循环会继续执行直到可迭代对象的所有元素都被遍完成。 值得注意的是,循环语句前面必须要有一个缩进,这是Python代码重要的语法规定。缩进的位置决定了哪些语句属于循环体的一部分。 我们可以通过for循环来遍列表的元素,例如: ```python fruits = ["apple", "banana", "orange"] for fruit in fruits: print(fruit) ``` 以上代码将会依次输出列表的每一个元素。输出结果为: ``` apple banana orange ``` 因此,for循环Python非常常用的一种循环结构,它可以方便地对多个元素进行操作。在编写代码时,我们只需根据具体的需求,将要循环的序列对象和对应的操作写入循环即可。 ### 回答3: Python的for循环语句用于遍序列或者可迭代对象的元素。它的基本格式是使用关键字`for`+一个变量+关键字`in`+一个可迭代对象,后面跟着一个冒号。在这个冒号后面是一个块级代码,用于执行循环体内的操作。 例如,我们可以通过以下代码遍一个列表的元素并打印它们: ```python fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit) ``` 在这个例子,`fruits`是一个列表,它包含了三个水果。在循环开始之前,变量`fruit`被赋值为列表的第一个元素"apple",然后进入循环体执行第一次循环,并打印出"apple"。接下来,变量`fruit`被赋值为列表的第二个元素"banana",再次进入循环体执行第二次循环,并打印出"banana"。最后,变量`fruit`被赋值为列表的第三个元素"cherry",进入循环体执行第三次循环,并打印出"cherry"。循环结束后,代码继续执行。 除了列表,for循环还可以遍其他可迭代对象,比如字符串、元组、字典的键或值等。另外,我们还可以使用range()函数生成一个数字序列进行遍操作。 在循环体内部,我们可以执行任意的操作,例如修改变量的值、调用函数、嵌套循环等等。并且,我们还可以使用`break`和`continue`关键字控制循环的流程,实现条件性的跳出循环或者直接进入下一次循环。 总之,Python的for循环语句是一种非常常用的循环结构,通过灵活地设置迭代对象循环体内的操作,我们可以处理各种各样的逻辑和任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值