Python爬坑之变量作用域

Python爬坑之变量作用域

本文是基于Python3进行说明
talk is cheap,show me the code.


  • 变量作用域
  • python 中块级作用域概念
  • 作用域链
  • 把局部变量变成全局变量

变量作用域

在python中,定义一个函数是通过关键字 def 来定义的。同大多数语言一样,python也具有全局变量局部变量

    num = 100   # 全局作用域变量num
        def add(a, b):     # 通过def来定义一个add函数
            num = a + b    # 函数内部作用域局部变量num
            print(num)

    add(1, 2)   # 打印 3
    print(num)     # 打印 100

一般情况下,在全局作用域中是无法访问局部作用域中的变量的:

        def demo():
            c = 10  # 函数内部有一个变量 c

        print(c)     # 此时在函数外部打印c是会报错的 因为在全局作用域中没有变量c

块级作用域概念

在 python 中没有块级作用域的概念。函数内部可以是一个作用域,但没有块作用域(比如if / for ..的作用域)。类似于在其他语言中的块级作用域 在python中这些块级作用域就和函数作用域是一个级别的。所以 在python中可以在 for 循环外部获取 for 循环内部的值

   def demo():
          c = 10      # 函数内部变量c
          for i in range(0, 10):      # for循环
              a = 'tiger'     # for循环内部变量a
              c += 1          # for循环内部操作for循环外部变量c
          print(a)            # 在python中 可以在for循环外部直接获取到for循环内部的变量
          print(c)            # 此时 函数内部变量c 相对于for循环内部是 全局变量

    demo()

作用域链

和JS一样,python中也有作用域链:

     c = 1
     def func1():
         c = 2     # 如果没有此处变量c的声明 那么就会向上一级请寻找 即 c = 1
         def func2():
             c = 3   # 如果没有此处变量c的声明 那么就会向上一级请寻找 即 c = 2
             print(c)
         func2()
     func1()

局部变量变成全局变量

我们知道, 一般情况下,在全局作用域中是无法访问局部变量的。但是可以通过关键字global 将一个局部变量变成一个全局变量,从而就可以在全局作用域中访问局部中的变量了

   def demo():
       global c    # 通过global关键字将局部变量变成全局变量
       c = 100
   demo()
   print(c)    # 虽然没有在全局中定义变量c,但是在函数内部使用了global关键字来定义变量c,使c变成一个全局变量

你可能感兴趣的:(python3.x,python)