Python编程中易犯错误总结:for和else搭配使用及global关键字详解

今天我在Python编程时遇到了一些常见的错误。它们总结如下:

Python编程中易犯错误总结:for和else搭配使用及global关键字详解

1、for与else的组合:

在Python中,for循环可以与else一起使用,但有一些细节容易出错,例如:

for i in xrange(1,10):
	if i == 1:
		print("Yes")
else:
	print("No")

你可能希望程序最终输出Yes,但是在这个程序段中,最终输出的是Yes和No。你可以发现两条输出语句都被执行了。原因是for循环执行完后,else下面的语句继续执行。为了不再执行else下的语句,我们在if判断条件下添加break,以便及时跳出循环。修改代码如下:

for i in xrange(1,10):
	if i == 1:
		print("Yes")
		break
else:
	print("No")

由此我们可以看到for和else一起使用时的一些机制,以及容易出错的地方——break的使用。

2.全局的使用:

由于Python是解释型语言,是逐行解释运行的,所以全局变量存在一些错误。例如:

m = 10
def num():
	print(m)
num()

这段代码中,num函数调用了全局变量m,结果自然可以正常输出。但可能会出现令人费解的情况:

m = 10
def num():
	m = 0
	print(m)
num()
print(m)

输出结果为0和10。

这不禁让人思考为什么m的值没有改变。原因是函数中的m是局部变量。函数 num 创建一个名为 m 的局部变量并使其等于 0,但不更改全局变量 m 的值。两者不是同一个变量。

然而,还有另一种情况:

m = 10
def num():
	print(m)
	m = 0
num()
print(m)

该程序段无法执行,会出现以下错误:

UnboundLocalError:赋值前引用局部变量“m”

大致意思是:局部变量在赋值之前被引用。修改方法如下:

m = 10
def num():
	global m
	print(m)
	m = 0
num()
print(m)

即m被声明为全局变量,这样Python就明白变量m不是局部变量,而是全局变量。此时函数内部对m的修改也会生效。此时输出结果为:10, 0。

还有一个扩展:

m = ["name","app"]
def modfiy():
	m = ["abc"]
	print(m)
modfiy()
print(m)

输出是:

['abc']

['名称','应用程序']

可见Python将函数内部的m当成局部变量来处理,但如果写成如下:

m = ["name","app"]
def modfiy():
	m.append("sss")
	print(m)
modfiy()
print(m)

输出是:

['名称','应用程序','sss']

['名称','应用程序','sss']

可以看出Python将函数中的m视为全局变量,所以为了防止歧义并使代码健壮,我认为应该在函数内部声明它:

全球米

但我们应该尽量避免使用global,以免出现一些难以理解的错误。如果要保存在整个代码中使用的值,请将其定义为类属性。如果使用这种方法,则根本不需要使用global。当你想使用这个值时,可以通过类的属性来访问:(类似于java的处理方式)

>>> class Baz(object):
...     bar = 42
... 
... def foo():
...     print Baz.bar  # global
...     bar = 0  # local
...     Baz.bar = 8  # global
...     print bar
... 
... foo()
... print Baz.bar
42
0
8

这些是使用 global 的一般注意事项。这与Python语言本身的特点是分不开的。 Python绝不是一门简单就能掌握的语言。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

32阅读

外国教程python,python编程教学视频

2026年09月02日

27阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读