课程: 学习 Python: 入门篇

免费学习该课程!

今天就开通帐号,24,700 门业界名师课程任您挑!

变量的作用域

变量的作用域

你可能已经注意到 在前面的函数例子里, 我们在函数内部定义了变量。 函数内的变量和外面的变量有什么区别呢? 对程序的执行有什么影响呢? 让我们来看一个例子。 先来定义两个函数 第一个叫 func1(); 内部定义一个变量 var, 取值 10 。 然后打印。 再定义一个,取名 func2(); 在 func2 里, 我们直接调用 定义在 func1 里的变量 var, 我们说 print(var)。 好, 我们来试着调用, 先调用 func1, 打印出 10 , 好,没问题。 调用 func2 , 出错, 这是为什么呢? 原来变量是有有效范围的。 即作用域, 也就是说 变量并不是在哪个位置都可以被访问的 在函数内部定义的变量,是无法被外部访问的 因而称为局部变量 在函数之外定义的变量,叫全局变量 任何函数都可以调用全局变量 而无需通过参数传输全局变量的值, 我们再来定义一个函数。 定义一个变量叫 g, 赋值 10, 这是定义在任何函数之外的变量, 就是全局变量。 然后,我们定义一个函数, 称作 outfunc。 在 outfunc 内部,我们也定义一个 同样名字的变量 g , 赋值 20 。 在 outfunc 内部, 我们还要定义一个函数 我们叫它 innerfunc(), 在innerfunc() 内部, 我们再定义一个同样名字的变量 g , 赋值 30 ,然后在这儿打印 g 的值。 在 innerfunc 的定义之后, 我们再调用一次, 接着,我们再打印一次 g 的值, 接着,我们来调用 outfunc 函数 innerfunc 嵌套在 outfunc 内, 是个内部函数。 当它声明一个变量 g , 虽然名字和外面的变量相同, 但是它是局部的。 屏蔽了外面同名的变量。 打印出的是 30 。 出了内部函数, 又回到了外部函数 outfunc . 所以打出的是 20 。 在 outfunc 调用完后, 再打印 g , 出来的是 10 , 所以,所谓全局、局部,都是相对的。 那如果在 if 、elif、 for、while 等语句中 定义的变量呢? 再来看这个例子, 定义一个变量, name , 赋值 “jim”, 然后定义 if 语句, 在 if 语句内部, 定义一个变量 greetings , 赋予一个字符串 “hello, Jim " 我们来调用。…

内容