首页 > 程序开发 > Web开发 > Python >

表达式与语句 局部变量与全局变量 exec与eval

2012-07-09

Python有时需要动态的创造Python代码,然后将其作为语句执行 或 作为表达式计算。 exec用于执行存储在字符串中的Python代码。 1、 语句与表达式的区别:表达式是 某事,语句是 做某事(即告诉计算机做什...

Python有时需要动态的创造Python代码,然后将其作为语句执行 或 作为表达式计算。

exec用于执行存储在字符串中的Python代码。

1、 语句与表达式的区别:表达式是 某事,语句是 做某事(即告诉计算机做什么)。

比如2*2是4,而print 2*2是打印4。上述两句代码在交互式解释器中执行的结果是一样的,是因为解释器总是把所有表达式的值打印出来而已。而在程序中编写类似2*2这样的表达式并不会打印显示什么,编写print 2*2则会打印4。

语句与表达式的区别在赋值时更明显,因为语句不是表达式,所以没有值。如在交互式解释器中输入 x=2则不会打印任何东西,立刻出现新的提示符。虽然什么也没显现,但是有些东西已经发生变化如x的值现在变为3.这也是语句特性的一般定义:它们改变了事物。比如,赋值语句改变了变量,print语句改变了屏幕显示的内容。

\

2、 命名空间(作用域) 全局变量和局部变量

除了全局作用域外,每个函数会都会创建一个新的作用域。变量分为全局变量和局部变量,函数内的变量称为局部变量只在局部命名空间中起作用。

在函数内部读取全局变量一般来说不是问题,直接访问即可。但是,如果局部变量名或者参数的名字与全局变量名相同的话,就不能直接访问了,因为全局变量被局部变量给屏蔽了。如果确实需要的话,可以使用globals函数获取被屏蔽的全局变量值。(globals返回全局变量的字典,locals返回局部变量的值)。例如:有一个名为parameter的全局变量,那么在combine(parameter)函数内部访问全局变量时,因为与参数重名,必须使用globals()['parameter']获取。代码如下:


1 def combine(parameter):

2 print parameter+globals()['parameter']

3

4 #函数调用

5 parameter="hello"

6 combine("berry")


上面讲的是再函数内部读取全局变量的方法,不包括修改。如果要在函数内部修改全局变量,需要告知修改的值是全局变量,因为在函数内部将值赋予一个变量那么变量自动成为局部变量。通过global关键字来告诉Python函数内一个需要修改的变量是一个全局变量。代码如下:


view sourceprint?1 x=1

2 def change_global(n):

3 global x

4 x=x+1

www.2cto.com
3、执行字符串的语句 exec

如输入exec "print 'hello'"会打印出hello。(注意:Python 3.0中,exec是一个函数不是一个语句了,因此使用exec('字符串语句')的方式来调用)。

相关文章
最新文章
热点推荐