step.md 2.8 KB
Newer Older
F
feilong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
# 看不见的开始和结束

![](./space.jpg)

作用域是编程语言里的一个重要的概念,特别是块作用域,编程语言一般会使用明确的符号标记一个作用域的开始和结束。

例如 C、C++、Java、C#、Rust、Go、JavaScript 等常见语言都是用`"{"``"}"`来标记一个块作用域的开始和结束:

```c
// 这是一个C语言程序
if(i<10){
    if(i<5){
        print("win more!");
    }else{
        print("win");
    }
}else{
    print("loose");
}
```

```rust
// 这是一个 Rust 语言程序
if i<10 {
    if i<5 {
        println!("win more!");
    }else{
        println!("win");
    }
}else{
    println!("loose");
}
```


而 Python 程序则是用缩进来表示块作用域的开始和结束:

```python
# 这是一个 Python 程序
if i<10:
    if i<5:
        print("win more!")
    else:
        print("win")
else:
    print("loose")
```

Python 对缩进有严格的要求,同一个源文件里,缩进必须保持一致,例如都是2个空格或者4个空格。Python 这么做的理由是使用缩进更简洁,同时不用考虑`"{"`要放在哪一行,而且是用缩进足够Python解释器正确解析。但是使用缩进如果没有编辑器自动检测和格式化也会带来一些不必要的麻烦。

请选出下面的 Python 代码中,<span style="color:red">缩进错误</span> 的选项。

## template

```python
# 全局代码
for i in range(0, 10):
    print('global code: {}'.format(i))
    if i == 5:
        print('global code: *')


# 函数
def test():
    for i in range(0, 10):
        print('function code: {}'.format(i))
        if i == 5:
            print('function code: *')


# 类
class Test():
    def __init__(self) -> None:
        pass

    def test(self):
        for i in range(0, 10):
            print('member function code: {}'.format(i))
            if i == 5:
                print('member function code: *')


if __name__ == '__main__':
    i = 0
    c = 5
    max = 10
    while i < max:
        d = max-i-i

      if abs(d) < 3:
        print(i, max-i)
      else:
        pass

        i += 1
```


## 答案

```python
if __name__ == '__main__':
    i = 0
    c = 5
    max = 10
    while i < max:
        d = max-i-i

      if abs(d) < 3:
        print(i, max-i)
      else:
        pass

        i += 1
```

## 选项

### A

```python
for i in range(0, 10):
    print('global code: {}'.format(i))
    if i == 5:
        print('global code: *')
```

### B

```python
def test():
    for i in range(0, 10):
        print('function code: {}'.format(i))
        if i == 5:
            print('function code: *')
```

### C

```python
class Test():
    def __init__(self):
        pass

    def test(self):
        for i in range(0, 10):
            print('member function code: {}'.format(i))
            if i == 5:
                print('member function code: *')
```