💻
ExistOrLive' Gitbook
  • README
  • ReadMe
  • 开发语言学习
    • Python
      • 0.概述
      • 1.基本数据类型
      • 2.变量
      • 3.函数
      • 4.运算符
      • 5.字符串
      • 6.列表
      • 7.元组
      • 8.集合
      • 9.字典
      • 10.流程控制
      • 12.函数
      • 13.模块
      • 14.输入输出格式化
      • 15.面向对象
    • Swift
      • 1.基础部分
        • 常量和变量以及基本类型_1
        • 常量和变量以及基本类型_2
      • 2.基本运算符
        • 基本运算符
      • 3.字符串和字符
        • 字符串
        • 字符串操作
      • 4.集合类型
        • 概述
        • Array
        • Set
        • Dictionary
      • 6.函数
        • 函数
        • 函数返回值
        • 函数类型
      • 7.闭包
        • 闭包
        • 闭包表达式
        • 尾随闭包
        • 捕获变量或常量
        • 闭包是引用类型
        • 逃逸闭包
        • 自动闭包
      • 8.枚举
        • 枚举
        • 枚举与switch语句
      • 9.类和结构体
        • 类和结构体
        • 属性
          • 属性
          • 属性观察器
          • 属性包装器
          • 全局变量和局部变量
          • 类属性
        • 方法
    • Shell
      • Shell变量和基本类型
      • Shell函数
      • Shell基本运算符
      • Shell脚本的参数
      • Shell流程控制
      • Shell输入输出
      • Shell文件包含
  • iOS
    • UI
      • UIKit
        • UIView
          • UIView
          • drawRect
        • UITableView
          • UITableView
          • UITableView的加载过程
  • 学习开发工具
    • 静态分析
      • OCLint
      • infer
      • SwiftLint
    • iOS构建工具
      • fastlane
        • fastlane
        • fastlane的安装
        • fastlane一键打包
        • fastlane证书管理
    • Cocoapods
      • 安装pod库-podfile
      • 创建pod库-podspec
  • 开源库
    • Tool
      • Swiftlint源码学习
      • 利用Swiftlint自定义规则实现自动化code review
由 GitBook 提供支持
在本页
  • 变量作用域
  • 全局变量和局部变量

这有帮助吗?

在GitHub上编辑
  1. 开发语言学习
  2. Python

2.变量

上一页1.基本数据类型下一页3.函数

最后更新于3年前

这有帮助吗?

a = "dasdsa"

如上定义了变量a,并赋值。

  • python变量的声明及定义,不需要指明变量的类型(当然python中变量是没有类型的),也不需要其他关键字表明定义一个变量(如swift 中的var)。

  • 但是变量定义后必须赋值,不然没有任何意义,而且会报错,如下:

变量作用域

python 的变量作用域由变量在哪里定义的决定,

  • L (Local) 局部作用域

  • E (Enclosing) 闭包函数外的函数中

  • G (Global) 全局作用域

  • B (Built-in) 内置作用域(内置函数所在模块的范围)

g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域

内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问

if True:
   a = "123"
else
   b = "1234"
print(a)          # a 定义了且可以访问; 只有模块,类,函数可以引入新的作用域
print(b)          # b 没有定义,代码没有执行到

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问


a = 11            # 全局变量
def func():
    print(a)      # 可以直接访问全局变量
func()

a = 11            # 全局变量
def func():
    a = 12        # 定义局部变量     
    print(a)      # 这里a为局部变量
func()

a = 11            # 全局变量
def func():   
    a = a + 1     # 这里会报错; 后面的a 是局部变量,但是没有被定义
    print(a)      
    
func()

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了


# 修改全局变量

a = 11            # 全局变量
def func():
    global a      # 声明这里的a 为全局变量a     
    a = a + 1
    print(a)      # 可以直接访问全局变量
func()

print(a)          # 这里a已经被修改



def func1():
    b = 11
    def func2():
        nonlocal b
        b = b + 1