python nonlocal global_『Python』关键字之global, nonlocal

Loading...

## 1. 关键字: global

```

在讲这个关键字之前, 大家先看一段代码:

```

```python

li = [1, 2, 3]

def func():

li.append(666)

print(li)

func() # [1, 2, 3, 666]

count = 0

def func():

count += 1 # 报错

func()

# 报错结果: UnboundLocalError: local variable 'count' referenced before assignment

```

```

局部作用域对全局作用域的变量(此变量只能是不可变的数据类型)只能进行引用, 而不能改变, 只要改变就会报错.

```

```

但是有时候, 我们程序中会遇到局部作用域去改变全局作用域中一些变量的需求, 这要怎么做呢?

```

```

这就得用到关键字

```

`global`.

### 1.1 声明一个全局变量

```

利用

```

`global` 可以在**局部作用域**中声明一个**全局变量**.

```python

def func():

global count

count = 6

func()

print(count) # 6

```

注意:

> 在局部作用域利用global声明的全局变量, 在局部作用域中是没有的.

### 1.2 修改全局变量

```

```

`global` 其中一个功能就是: 在**局部作用域**中, 可以更改**全局作用域**的变量.

```python

count = 0

def func():

global count

count += 1

print(count)

func() # 1

```

综上所述, `global` 关键字有两个作用:

- 声明一个全局变量

- 在局部作用域想要对全局作用域的全局变量进行修改时, 需要用到 `global`(仅限**字符串**, **数字**)

## 2. 关键字: nonlocal

```

```

`nonlocal` 与 `global` 的用法差不多.

```

当我们在

```

**局部作用域**想要对**父级作用域**(不是**全局作用域**)的变量进行改变时, 需要用到 `nonlocal`.

```python

def func():

count = 0

def inner():

nonlocal count

count += 1

print(count)

print(locals())

inner()

print(locals())

func()

```

`nonlocal` 总结:

- 不能更改全局变量

- 在局部作用域中, 对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改, 并且引用的哪层, 从那层以及以下, 此变量全部发生改变.

最后修改:2020 年 07 月 23 日 12 : 15 PM

© 允许规范转载

赞赏

×Close

赞赏作者

扫一扫支付

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

支付宝支付

微信支付

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值