32.md 1.7 KB
Newer Older
W
wizardforcel 已提交
1
# 作用域
W
init  
wizardforcel 已提交
2 3 4 5 6

> 原文: [https://pythonbasics.org/scope/](https://pythonbasics.org/scope/)

变量在程序中具有一定的作用。 全局变量可以在程序中的任何位置使用,但是局部变量仅在特定区域(函数,循环)中已知

W
wizardforcel 已提交
7
有时在项目中使用“作用域”一词:“其不在项目作用域之内”,表示不包括在内。 同样,变量可以在函数作用域之外。
W
init  
wizardforcel 已提交
8

W
wizardforcel 已提交
9

W
init  
wizardforcel 已提交
10 11 12 13 14

## 示例:

### 简介

W
wizardforcel 已提交
15
作用域与可以使用变量的位置有关。 如果定义了变量,则不一定在代码中的任何地方都可用。 函数中定义的变量只有在函数中才知道,除非您将其返回。
W
init  
wizardforcel 已提交
16

W
wizardforcel 已提交
17
```py
W
init  
wizardforcel 已提交
18 19 20 21 22 23 24 25 26 27 28 29
def something():
   localVar = 1

# this will crash because localVar is a local variable
print(localVar)

```

这意味着除非您从函数返回变量,否则只能在其中使用它们。 这与全局变量形成了鲜明的对比:全局变量可以在任何地方使用,包括在多个函数和主代码中。 全局变量通常在程序顶部定义。

### 全局变量和局部变量

W
wizardforcel 已提交
30
在下面的程序中,`balance`是一个全局变量。 它可以在代码中的任何地方使用。 但是变量`x`只能在`addAmount`内部使用。
W
init  
wizardforcel 已提交
31

W
wizardforcel 已提交
32
```py
W
init  
wizardforcel 已提交
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#!/usr/bin/env python3

balance = 0

def addAmount(x):
    global balance
    balance = balance + x

addAmount(5)
print(balance)

```

在视觉上是:

![scope](img/88e7ac055172b8f704169b613c7f4b7f.jpg)

W
wizardforcel 已提交
50
我们有两个变量:`balance`,一个可以在任何地方使用的全局变量。`x`,只能在函数内部使用(在局部作用域之外未知)。
W
init  
wizardforcel 已提交
51 52 53 54 55

## 练习

请尝试以下练习:

W
wizardforcel 已提交
56
1.  添加函数`subAmount`以更改变量余额
W
init  
wizardforcel 已提交
57 58 59
2.  创建带有局部变量的函数

[下载示例](https://gum.co/dcsp)