Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu Wang 2019-05-23 13:19:55 +08:00
commit c6940b95f0
2 changed files with 47 additions and 58 deletions

View File

@ -1,32 +1,34 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-10887-1.html)
[#]: subject: (Add methods retroactively in Python with singledispatch)
[#]: via: (https://opensource.com/article/19/5/python-singledispatch)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
使用 singledispatch 在 Python 中追溯地添加方法
======
在我们覆盖 7 个 PyPI 库的系列文章中了解更多解决 Python 问题的信息。
![][1]
> 在我们覆盖 7 个 PyPI 库的系列文章中了解更多解决 Python 问题的信息。
![](https://img.linux.net.cn/data/attachment/album/201905/23/093515sgmu4auml9caz54l.jpg)
Python 是当今使用最多[流行的编程语言][2]之一,因为:它是开源的,它具有广泛的用途(例如 Web 编程、业务应用、游戏、科学编程等等),它有一个充满活力和专注的社区支持它。这个社区是我们在 [Python Package Index][3]PyPI中提供如此庞大、多样化的软件包的原因用以扩展和改进 Python。并解决不可避免的问题。
在本系列中,我们将介绍七个可以帮助你解决常见 Python 问题的 PyPI 库。今天,我们将研究 [**singledispatch**][4],这是一个能让你追溯地向 Python 库添加方法的库。
在本系列中,我们将介绍七个可以帮助你解决常见 Python 问题的 PyPI 库。今天,我们将研究 [singledispatch][4],这是一个能让你追溯地向 Python 库添加方法的库。
### singledispatch
想象一下,你有一个有 **Circle****Square** 等类的“形状”库。
想象一下,你有一个有 Circle、Square 等类的“形状”库。
**Circle** 类有**半径**、**Square** 有 **边**、**Rectangle**有**高**和**宽**。我们的库已经存在,我们不想改变它。
Circle 类有半径、Square 有边、Rectangle 有高和宽。我们的库已经存在,我们不想改变它。
然而,我们想给库添加一个**面积**计算。如果我们不会和其他人共享这个库,我们只需添加 **area** 方法,这样我们就能调用 **shape.area()** 而无需关心是什么形状。
然而,我们想给库添加一个面积计算。如果我们不会和其他人共享这个库,我们只需添加 `area` 方法,这样我们就能调用 `shape.area()` 而无需关心是什么形状。
虽然可以进入类并添加一个方法,但这是一个坏主意:没有人希望他们的类会被添加新的方法,程序因奇怪的方式出错。
虽然可以进入类并添加一个方法,但这是一个坏主意:没有人希望他们的类会被添加新的方法,程序因奇怪的方式出错。
相反,**functools** 中的 **singledispatch** 函数可以帮助我们。
相反,functools 中的 `singledispatch` 函数可以帮助我们。
```
@ -36,7 +38,7 @@ def get_area(shape):
shape)
```
**get_area** 函数的“基类”实现会报错。这保证了如果我们出现一个新的形状时,我们会明确地报错而不是返回一个无意义的结果。
`get_area` 函数的“基类”实现会报错。这保证了如果我们出现一个新的形状时,我们会明确地报错而不是返回一个无意义的结果。
```
@ -48,7 +50,7 @@ def _get_area_circle(shape):
return math.pi * (shape.radius ** 2)
```
这种方式的好处是如果某人写了一个匹配我们代码的_新_形状它们可以自己实现 **get_area**
这种方式的好处是如果某人写了一个匹配我们代码的*新*形状,它们可以自己实现 `get_area`
```
@ -64,17 +66,16 @@ def _get_area_ellipse(shape):
return math.pi * shape.horizontal_axis * shape.vertical_axis
```
_调用_ **get_area** 很直接。
*调用* `get_area` 很直接。
```
`print(get_area(shape))`
print(get_area(shape))
```
这意味着我们可以将有大量 **if isintance()/elif isinstance()** 的代码以这种方式修改,而无需修改接口。下一次你要修改 **if isinstance**,你试试 **singledispatch**
在本系列的下一篇文章中,我们将介绍 **tox**,一个用于自动化 Python 代码测试的工具。
这意味着我们可以将大量的 `if isintance()`/`elif isinstance()` 的代码以这种方式修改,而无需修改接口。下一次你要修改 if isinstance你试试 `singledispatch
在本系列的下一篇文章中,我们将介绍 tox一个用于自动化 Python 代码测试的工具。
#### 回顾本系列的前几篇文章:
@ -82,16 +83,14 @@ _调用_ **get_area** 很直接。
* [Black][6]
* [attrs][7]
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/5/python-singledispatch
作者:[Moshe Zadka ][a]
作者:[Moshe Zadka][a]
选题:[lujun9972][b]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -101,6 +100,6 @@ via: https://opensource.com/article/19/5/python-singledispatch
[2]: https://opensource.com/article/18/5/numbers-python-community-trends
[3]: https://pypi.org/
[4]: https://pypi.org/project/singledispatch/
[5]: https://opensource.com/article/19/4/7-python-problems-solved-cython
[6]: https://opensource.com/article/19/4/python-problems-solved-black
[7]: https://opensource.com/article/19/4/python-problems-solved-attrs
[5]: https://linux.cn/article-10859-1.html
[6]: https://linux.cn/article-10864-1.html
[7]: https://linux.cn/article-10871-1.html

View File

@ -1,20 +1,20 @@
[#]: collector: (lujun9972)
[#]: translator: (tomjlw)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-10888-1.html)
[#]: subject: (How to SSH into a Raspberry Pi [Beginners Tip])
[#]: via: (https://itsfoss.com/ssh-into-raspberry/)
[#]: author: (Chinmay https://itsfoss.com/author/chinmay/)
如何 SSH 进入树莓派 [新手教程]
新手教程:如何 SSH 进入树莓派
======
_**在这篇树莓派文章中,你将学到如何在树莓派中启用 SSH 以及之后如何通过 SSH 进入树莓派**_
> 在这篇树莓派文章中,你将学到如何在树莓派中启用 SSH 以及之后如何通过 SSH 进入树莓派
在你可以用[树莓派][1]做的所有事情中,将其作为一个家庭网络的服务器是十分流行的做法。小体积与低功耗使它成为运行轻量级服务器的完美设备。
在这种情况下你做得到的事情之一是能够每次在树莓派上无须接上显示器、键盘、鼠标以及移动到放置你的树莓派的地方就可以运行指令。
在这种情况下你做得到的事情之一是能够每次在树莓派上无须接上显示器、键盘、鼠标以及到放置你的树莓派的地方就可以运行指令。
你可以从其它任意电脑、笔记本、台式机甚至你的手机通过 SSH[Secure Shell][2])登入你的树莓派来做到这一点。让我展示给你看:
@ -22,31 +22,27 @@ _**在这篇树莓派文章中,你将学到如何在树莓派中启用 SSH 以
![][3]
我假设你已经[在你的树莓派上运行 Raspbian][4] 并已经成功通过有线或者无线网连进网络了。你的树莓派接入网络这点是很重要的否则你无法通过 SSH 连接树莓派(抱歉说出这种显而易见的事实)
我假设你已经[在你的树莓派上运行 Raspbian][4] 并已经成功通过有线或者无线网连进网络了。你的树莓派接入网络这点是很重要的否则你无法通过 SSH 连接树莓派(抱歉说出这种显而易见的事实)
### 步骤一:在树莓派上启用 SSH
#### 步骤一:在树莓派上启用 SSH
SSH 在树莓派上是默认关闭的,因此在你安装好全新的 Raspbian 后打开树莓派时,你将不得不启用它。
SSH 在树莓派上是默认关闭的,因此在你安装好全新的 Raspbian 后打开树莓派时,你需要启用它。
首先通过菜单进入树莓派的配置界面。
![树莓派菜单,树莓派配置][5]
现在进入接口interfaces标签,启动 SSH 并重启你的树莓派。
现在进入<ruby>接口<rt>interfaces</rt></ruby>标签,启动 SSH 并重启你的树莓派。
![在树莓派上启动 SSH][6]
你也可以通过终端直接启动 SSH。仅需输入命令_**sudo raspi-config**_ 然后进入高级设置以启用 SSH。
你也可以通过终端直接启动 SSH。仅需输入命令 `sudo raspi-config` 然后进入高级设置以启用 SSH。
#### 步骤二: 找到树莓派的 IP 地址
在大多数情况下,你的树莓派会被分配一个看起来长得像**192.168.x.x**或者**10.x.x.x**的本地 IP 地址。你可以[使用多种 Linux 命令来找到 IP 地址][7]。
在大多数情况下,你的树莓派会被分配一个看起来长得像 `192.168.x.x` 或者 `10.x.x.x` 的本地 IP 地址。你可以[使用多种 Linux 命令来找到 IP 地址][7]。
[][8]
推荐阅读《这款 Linux 恶意软件将矛头指向不安全的树莓派设备》
我在这使用古老而美好的 ifconfig 命令但是你也可以使用 _**ip address**_
我在这使用古老而好用的 `ifconfig` 命令,但是你也可以使用 `ip address`
```
ifconfig
@ -54,22 +50,20 @@ ifconfig
![树莓派网络配置][9]
这行命令展现了所有活跃中的网络适配器以及其配置的列表。第一个条目(**eth0**)展示了例如**192.168.2.105**的有效 IP 地址。我用有线网将我的树莓派连入网络,因此这里显示的是 **eth0**。如果你用无线网的话在叫做 **wlan0** 的条目下查看。
这行命令展现了所有活跃中的网络适配器以及其配置的列表。第一个条目(`eth0`)展示了例如`192.168.2.105` 的有效 IP 地址。我用有线网将我的树莓派连入网络,因此这里显示的是 `eth0`。如果你用无线网的话在叫做 `wlan0` 的条目下查看。
你也可以用其他方法例如查看你的路由器或者调制解调器的网络设备表以找到 IP 地址。
#### 步骤三SSH 进你的树莓派
既然你已经启用了 SSH 功能并且找到了 IP 地址,你可以从任何电脑向前 SSH 进你的树莓派。你同样需要树莓派的用户名和密码。
既然你已经启用了 SSH 功能并且找到了 IP 地址,你可以从任何电脑 SSH 进你的树莓派。你同样需要树莓派的用户名和密码。
默认用户名和密码是:
* username: pi
* password: raspberry
* 用户名:`pi`
* 密码:`raspberry`
如果你已改变了默认的密码那就使用新的而不是以上的密码。理想状态下你必须改变默认的密码。在过去,一款[恶意软件感染数千使用默认用户名和密码的树莓派设备][8]。
如果你已改变了默认的密码,那就使用新的而不是以上的密码。理想状态下你必须改变默认的密码。在过去,有一款[恶意软件感染数千使用默认用户名和密码的树莓派设备][8]。
(在 Mac 或 Linux 上)从你想要 SSH 进树莓派的电脑上打开终端输入以下命令,在 Windows 上,你可以用类似 [Putty][10] 的 SSH 客户端。
@ -79,11 +73,11 @@ ifconfig
ssh [受保护的邮件]
```
_**注意: 确保你的树莓派和你用来 SSH 进入树莓派的电脑接入了同一个网络**_
> 注意: 确保你的树莓派和你用来 SSH 进入树莓派的电脑接入了同一个网络。
![通过命令行 SSH][11]
第一次你会看到一个警告,输入 **yes** 并按下回车。
第一次你会看到一个警告,输入 `yes` 并按下回车。
![输入密码 \(默认是 raspberry\)][12]
@ -91,13 +85,9 @@ _**注意: 确保你的树莓派和你用来 SSH 进入树莓派的电脑接入
![成功通过 SSH 登入][13]
成功登入你将会看到树莓派的终端。现在你可以通过这个终端无物理上访问你的树莓派就可以远程(在当前网络内)在它上面运行指令。
成功登入你将会看到树莓派的终端。现在你可以通过这个终端无物理上访问你的树莓派就可以远程(在当前网络内)在它上面运行指令。
[][14]
推荐阅读《在低端系统上加速 Ubuntu Unity [快速指南]》
在此之上你也可以设置 SSH 密钥这样每次通过 SSH 登入时就可以无序输入密码,但那完全是另一个话题了。
在此之上你也可以设置 SSH 密钥这样每次通过 SSH 登入时就可以无需输入密码,但那完全是另一个话题了。
我希望你通过跟着这个教程已能够 SSH 进入你的树莓派。在下方评论中让我知道你打算用你的树莓派做些什么!
@ -108,7 +98,7 @@ via: https://itsfoss.com/ssh-into-raspberry/
作者:[Chinmay][a]
选题:[lujun9972][b]
译者:[tomjlw](https://github.com/tomjlw)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出