需要拼接有空格的字符串,运用占位符
```python
x = '%s, %s!' % (a, b)
x = '{}, {}!'.format(a, b)
x = ', '.join([a, b])
```
直接拼接的字符串
```python
x = a + b
```
> 注意:使用加法循环拼接字符串,可能导致二次而非线性的运行时间。
BAD
```python
li = ['a', 'very', 'long', 'list']
result = ''
for i in li:
result = result + i
print(result)
```
GOOD
```python
result = ''.join(li)
print(result)
```
当字符串过长时,使用 `\` 漂亮地分割字符串
```python
s = '这是一个' \
'很长的字符串'
```
其他乱七八糟但很重要的东西
类名以大写字母开头 ClassName
驼峰命名法 someFunctionName
下划线_命名法 some_variable_name
### 遍历同时操作数组
> 不规范的行为
```python
li = list(range(10))
for i in li:
li.append(i)
```
### 传参传字典或列表
```python
def foo(i, arg=[]): # 正确做法 arg=None
arg.append(i)
print(arg)
foo('a')
# Output: ['a']
foo('b')
# Output: ['a', 'b']
```
GOOD
```python
if age < 18:
return 'You are too small'
do_something_here()
```
BAD
```python
if age > 18:
do_something_here()
else:
return 'You are too small'
```
#### 善用 if
GOOD
```python
if data:
break
```
BAD
```python
if data != []:
break
```
## 忍者代码
#### 没人知道这个变量是什么
- a, b, j, k, l
- str, string
- data
- data1
- data114514
以及见鬼的缩写
- `ObjStuAre_id`: object_student_area_id
> 一个变量,一杯茶,一个bug修一天
- `data`
- `date`
- `l`
- `I`
#### 没人知道这两是不是同一个东西
- `showMessage`
- `displayMessage`
- `printMessage`
#### 夸张的变量名
- `very_super_powerful_print_function`
- `lovely_variable`
- `nice_list`
#### 重叠外部命名空间变量
```python
id = 39
def foo():
id += 1
# 一堆代码
print(id)
```
#### Powerful Function !
例如某个 `check_empty_in_list()`,按字面意思会检查列表中是否有空项,可这个函数在检查到空项的同时还会「智能地」帮你删掉空项。然而使用函数的人对此一无所知,函数作者也忘了有这么回事。
#### References
- [现代 JavaScript 教程 - 忍者代码](https://zh.javascript.infoi/ninja-code)
- [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html)
- [水族馆](https://aquarium39.moe)
- [你所不知道的Python冷知識](https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/649905/)