Skip to content

Commit

Permalink
新增 10 篇文章
Browse files Browse the repository at this point in the history
  • Loading branch information
iswbm committed May 23, 2021
1 parent 8cabc69 commit 1d2527e
Show file tree
Hide file tree
Showing 20 changed files with 1,406 additions and 0 deletions.
31 changes: 31 additions & 0 deletions source/c01/c01_32.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 1.32 如何让大数变得更易于阅读?

![](http://image.iswbm.com/20200804124133.png)

当一个数非常大时,可能过百万,也可能上亿,太多位的数字 ,会给我们阅读带来很大的障碍。

比如下面这个数,你能一下子说出它是多少万呢,还是多少亿呢?

```
281028344
```

是不是没法很快的辩识出来?

这时候,你可以使用 `_` 来辅助标识,写成这样子就清晰多了

```
281_028_344
```

关键这种写法,在代码中并不会报错噢(Python2 不支持)

```python
>>> number=281_028_344
>>> number
281028344
```



![](http://image.iswbm.com/20200607174235.png)
35 changes: 35 additions & 0 deletions source/c01/c01_32.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
1.32 如何让大数变得更易于阅读?
===============================

|image0|

当一个数非常大时,可能过百万,也可能上亿,太多位的数字
,会给我们阅读带来很大的障碍。

比如下面这个数,你能一下子说出它是多少万呢,还是多少亿呢?

::

281028344

是不是没法很快的辩识出来?

这时候,你可以使用 ``_`` 来辅助标识,写成这样子就清晰多了

::

281_028_344

关键这种写法,在代码中并不会报错噢(Python2 不支持)

.. code:: python
>>> number=281_028_344
>>> number
281028344
|image1|

.. |image0| image:: http://image.iswbm.com/20200804124133.png
.. |image1| image:: http://image.iswbm.com/20200607174235.png

35 changes: 35 additions & 0 deletions source/c06/c06_07.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 6.7 利用 any 代替 for 循环

![](http://image.iswbm.com/20200804124133.png)

在某些场景下,我们需要判断是否满足某一组集合中任意一个条件

这时候,很多同学自然会想到使用 for 循环。

```python
found = False
for thing in things:
if thing == other_thing:
found = True
break
```

但其实更好的写法,是使用 `any()` 函数,能够使这段代码变得更加清晰、简洁

```python
found = any(thing == other_thing for thing in things)
```

使用 any 并不会减少 for 循环的次数,只要有一个条件为 True,any 就能得到结果。

同理,当你需要判断是否满足某一组集合中所有条件,也可以使用 `all()` 函数。

```python
found = all(thing == other_thing for thing in things)
```

只要有一个不满足条件,all 函数的结果就会立刻返回 False



![](http://image.iswbm.com/20200607174235.png)
41 changes: 41 additions & 0 deletions source/c06/c06_07.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
6.7 利用 any 代替 for 循环
==========================

|image0|

在某些场景下,我们需要判断是否满足某一组集合中任意一个条件

这时候,很多同学自然会想到使用 for 循环。

.. code:: python
found = False
for thing in things:
if thing == other_thing:
found = True
break
但其实更好的写法,是使用 ``any()``
函数,能够使这段代码变得更加清晰、简洁

.. code:: python
found = any(thing == other_thing for thing in things)
使用 any 并不会减少 for 循环的次数,只要有一个条件为 True,any
就能得到结果。

同理,当你需要判断是否满足某一组集合中所有条件,也可以使用 ``all()``
函数。

.. code:: python
found = all(thing == other_thing for thing in things)
只要有一个不满足条件,all 函数的结果就会立刻返回 False

|image1|

.. |image0| image:: http://image.iswbm.com/20200804124133.png
.. |image1| image:: http://image.iswbm.com/20200607174235.png

42 changes: 42 additions & 0 deletions source/c06/c06_08.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# 6.8 不同条件分支里应减少重合度

![](http://image.iswbm.com/20200804124133.png)

如下是一个简单的条件语句模型

```python
if A:
<code_block_1>
elif B:
<code_block_2>
else:
<code_block_3>
```

如果 code_block_2 和 code_block_1 的代码完全一致,那么应该想办法减少代码冗余。

这边举个例子,下面这段代码中

```python
def process_payment(payment):
if payment.currency == 'USD':
process_standard_payment(payment)
elif payment.currency == 'EUR':
process_standard_payment(payment)
else:
process_international_payment(payment)
```

其实更好的做法是用 in 来合并条件一和条件二

```python
def process_payment(payment):
if payment.currency in ('USD', 'EUR'):
process_standard_payment(payment)
else:
process_international_payment(payment)
```



![](http://image.iswbm.com/20200607174235.png)
46 changes: 46 additions & 0 deletions source/c06/c06_08.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
6.8 不同条件分支里应减少重合度
==============================

|image0|

如下是一个简单的条件语句模型

.. code:: python
if A:
<code_block_1>
elif B:
<code_block_2>
else:
<code_block_3>
如果 code_block_2 和 code_block_1
的代码完全一致,那么应该想办法减少代码冗余。

这边举个例子,下面这段代码中

.. code:: python
def process_payment(payment):
if payment.currency == 'USD':
process_standard_payment(payment)
elif payment.currency == 'EUR':
process_standard_payment(payment)
else:
process_international_payment(payment)
其实更好的做法是用 in 来合并条件一和条件二

.. code:: python
def process_payment(payment):
if payment.currency in ('USD', 'EUR'):
process_standard_payment(payment)
else:
process_international_payment(payment)
|image1|

.. |image0| image:: http://image.iswbm.com/20200804124133.png
.. |image1| image:: http://image.iswbm.com/20200607174235.png

68 changes: 68 additions & 0 deletions source/c06/c06_09.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# 6.9 如无必要,勿增实体噢

![](http://image.iswbm.com/20200804124133.png)

## 删除没必要的调用`keys()`

字典是由一个个的键值对组成的,如果你遍历字典时只需要访问键,用不到值,有很多同学会用下面这种方式:

```python
for currency in currencies.keys():
process(currency)
```

在这种情况下,不需要调用keys(),因为遍历字典时的默认行为是遍历键。

```python
for currency in currencies:
process(currency)
```

现在,该代码更加简洁,易于阅读,并且避免调用函数会带来性能改进。

## 简化序列比较

我们经常要做的是在尝试对列表或序列进行操作之前检查列表或序列是否包含元素。

```python
if len(list_of_hats) > 0:
hat_to_wear = choose_hat(list_of_hats)
```

使用Python的方法则更加简单:如果Python列表和序列具有元素,则返回为True,否则为False:

```python
if list_of_hats:
hat_to_wear = choose_hat(list_of_hats)
```

## 仅使用一次的内联变量

我们在很多代码中经常看到,有些同学分配结果给变量,然后马上返回它,例如,

```python
def state_attributes(self):
"""Return the state attributes."""
state_attr = {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
return state_attr
```

如果直接返回,则更加直观、简洁,

```python
def state_attributes(self):
"""Return the state attributes."""
return {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
```

这样可以缩短代码并删除不必要的变量,从而减轻了读取函数的负担。



![](http://image.iswbm.com/20200607174235.png)
74 changes: 74 additions & 0 deletions source/c06/c06_09.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
6.9 如无必要,勿增实体噢
========================

|image0|

删除没必要的调用\ ``keys()``
----------------------------

字典是由一个个的键值对组成的,如果你遍历字典时只需要访问键,用不到值,有很多同学会用下面这种方式:

.. code:: python
for currency in currencies.keys():
process(currency)
在这种情况下,不需要调用keys(),因为遍历字典时的默认行为是遍历键。

.. code:: python
for currency in currencies:
process(currency)
现在,该代码更加简洁,易于阅读,并且避免调用函数会带来性能改进。

简化序列比较
------------

我们经常要做的是在尝试对列表或序列进行操作之前检查列表或序列是否包含元素。

.. code:: python
if len(list_of_hats) > 0:
hat_to_wear = choose_hat(list_of_hats)
使用Python的方法则更加简单:如果Python列表和序列具有元素,则返回为True,否则为False:

.. code:: python
if list_of_hats:
hat_to_wear = choose_hat(list_of_hats)
仅使用一次的内联变量
--------------------

我们在很多代码中经常看到,有些同学分配结果给变量,然后马上返回它,例如,

.. code:: python
def state_attributes(self):
"""Return the state attributes."""
state_attr = {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
return state_attr
如果直接返回,则更加直观、简洁,

.. code:: python
def state_attributes(self):
"""Return the state attributes."""
return {
ATTR_CODE_FORMAT: self.code_format,
ATTR_CHANGED_BY: self.changed_by,
}
这样可以缩短代码并删除不必要的变量,从而减轻了读取函数的负担。

|image1|

.. |image0| image:: http://image.iswbm.com/20200804124133.png
.. |image1| image:: http://image.iswbm.com/20200607174235.png

Loading

0 comments on commit 1d2527e

Please sign in to comment.