函数作用域

作用域就是函数生命周期的一个表现,作用域内,函数有效,出了这个作用域函数,以及函数中的本地变量都将失效,函数作用域特征:

  • 函数内的名字只是在函数运行时创建。在函数运行之前或完成运行之后根本不存在。

  • 函数运行时,函数之外的名字被搁置一边,而没有用到。只有函数内部的名字会被用到。程序中使用变量的部分称为这个变量的作用域。

  • Python提供了内存管理机制,可以自动完成该项工作。

变量作用域

我们首先来看变量的作用域,在前边呢,陆陆续续的已经接触了一些,比如说像下面的price参数。txt_rate参数,这就是变量,它们的作用的范围和区域是多大呢?想象我们身边中的案例,你在你们单位是个经理,但你离你们单位还是个经理吗?不是了。

如果说,你的单位里边是一个集团形式的,你在你的集团里边是个大领导,在你们下边的某一个分公司里边,他也会把你认可你这个职位,这就相当于一个局部变量和一个全局变量认可的范围,所以这个和我们今天讲的这个变量作用域很相似。

函数内的名字只在函数运行时创建,在函数运行之前和函数运行完成之后,就被销毁或者不存在了。函数运行时呢,函数之外的名字,被搁置在一边儿,如果在运行过程中,外部有一个函数,与我这个函数名字一样,会搁置在一边没有用,只有函数内部的名字会到程序中使用的变量的部分,称为这个变量的作用域,要简单来说,这个price和tax_rate它的作用域就在我这个函数的代码内。

Python提供了内存的管理机制,当函数调用的时候,这个变量创建,当这个函数结束之后,自动会进行回收。

全局变量

# 作用域--全局变量
def calculateTax(price,tax_rate):
    "taxTotal总价格"
    taxTotal = price * tax_rate
    print(my_price) #此处打印my_price为全局变量
    return taxTotal
my_price = int(input("Enter a price:"))
totalPrice = calculateTax(my_price,8)
print("price = ", my_price, "Total price = ", totalPrice)
print(my_price)

全局变量,如上,变量my_price,可以在calculateTax方法打印这个变量,也可以在方法外打印这个变量。说明my_prece变量的作用域是大于calculateTax方法的。打印结果:

5
price = 5 Total price = 40
5

如果将最后一行打印my_price修改打印price,那么结果如何呢?

可以看到,程序报错了,name ‘price’ is not defined,这是因为,price已经超出了它的作用域,不存在了。全局变量,在主程序或函数体内均可使用。

如上,定义全局变量my_price,通过input输入并赋值。在函数体内,我也有和全局变量一样的变量,在这儿给他付了一个初始值,它相当于一个常量,是100,其实外部同样也要打印这个值,我们看这个值是多少!

然后,调用函数,把my_price传递给price。那么,输入的是5,因此,my_price就是5,调用calculateTax方法,在方法中,price就是5,因此taxTotal的结果就是5*8=40。打印Function inside,结果为:100。运行完成calculateTax之后,继续打印my_price,看结果为,outside: 5。外部的my_price并没有被改变。这就验证了,当局部变量中与全局变量同名的时候,函数内部的局部变量不受全部变量的影响。

全局变量特征:

  • 如果使用主程序中定义的变量名,python允许你使用这个全局变量,只要你不试图改变它
  • 函数内部:print(my_pirce) 或your_price=my_price都可以。
  • 如果函数的任何部分试图修改这个变量,python会自动创建一个新的局部变量。函数内容部my_pirce= 10000,那么my_price将是python在函数运行时创建的一个新的局部变量,而非修改了全局变量的值。

IT赶路人

专注IT知识分享