Python函数式编程之 update_in_fn

接上一篇内容 Python函数式编程之自定义函数get_in 。这次我们来编写函数式风格的修改字典/列表值的通用函数。 我们先来假设一种情况,你有一个嵌套的动态字典,想要更新里面某个键对应的值,我们用代码来说明 data = {'a': {'b': 1}} 现在有一个变量data 他的值是一个两层的字典,如果我要更新 b 的值到 2 常规的做法是这样的 data['a]['b'] = 2 如果我有一个更加深的字典 data = {'a': {'b': {'c': {'d': 1}}}} 更新值的写法 data['a']['b']['c']['d''] = 2 这里有一个情况发生了,当 data 是一个动态数组,你不确定中间的某个键是否存在的时候就会有报错 假如这个数据是你的系统里面其他团队开发的一个微服务,报错的信息是int 对象是不可读取索引的,这会让人很奇怪,2这个int对象明明是一个值,而不是用来查找索引数据的。 这时候程序的健壮性是比较差的,要想让程序保证健壮,我们可以使用 if-else 来判断每个键是否存在,就像这样 这里的三个if 看起来一点都不够优雅,如果其他地方也有同样的写法,只是键的顺序和名字不一样而已呢。能不能封装一个通用的函数来处理类似的情况呢? update_in Python支持面向过程、面向对象、函数式等多范式编程。我们可以使用函数式编程思想来达到这一点。先来看一个简单一点的 update_in 函数 from typing import Dict, List, T def update_in(data: Dict, ks: List, value: T): """Updates a value in a nested associative structure. Args: data (Dict): nested associative structure ks (List): sequence of keys value (Any): new value """ if len(ks) == 0: return cursor = data for k in ks[:-1]: if k not in cursor: cursor[k] = {} elif not isinstance(cursor[k], dict): cursor[k] = {} cursor = cursor[k] cursor[ks[-1]] = value 这里有一个类型 T ,这是Python内置的任意类型,在 typing 模块可以看到定义 T = TypeVar('T') ...

May 19, 2023

保持SSH会话在线

保持SSH会话在线 1. 概览 有多少次,我们想要保持SSH会话一直处于连接状态,以保持应用程序运行,或者只是避免在返回我们使用的SSH窗口时感到沮丧。 在本教程中,你将获得如何通过防止SSH会话超时,直到你关闭终端窗口。 2. 为什么SSH会关闭连接? 我们为了使用SSH登录到服务器上,目的服务器上的守护进程(sshd)一定是保持运行状态。如果SSH客户端一段时间没有发送到目的服务器,服务器会在超过一段时间后关闭连接。 为了防止关闭SSH连接,我们可以在客户端或者服务端进行配置。 3. 设置配置文件 有几个配置文件可以修改,以保持SSH会话的连接,避免超时。要看是从客户端配置还是服务端配置。 3.1 客户端配置 客户端文件位置 $HOME/.ssh/config 如果我们使用使用 cat $HOME/.ssh/config ,可能会得到一个错误信息 “no file found”。 $ cat $HOME/.ssh/config cat: /.ssh/config: No such file or directory 如果我们看到这个错误消息,意味着我们需要手动创建这个配置文件。如果 .ssh 目录不存在,首先创建 .ssh 目录,使用命令 mkdir $HOME/.ssh 来创建目录,如果提示目录已经存在,我们将会看到一个消息 “File exists”,请忽略即可;如果目录创建成功,我们不会看到任何输出信息。 $ mkdir $HOME/.ssh 然后创建配置文件 touch $HOME/.ssh/config。 $ touch $HOME/.ssh/config 一旦我们创建好配置文件,我们还需要使用 chmod 修改配置文件的权限,不能让所有人都可以编辑这个配置文件。 $ chmod 600 $HOME/.ssh/config 现在我们可以任何编辑器来编辑这个配置文件了,比如 nano 或者 vim ,在终端使用 vim $HOME/.ssh/config 打开配置文件。 现在让我们来添加一些配置信息到配置文件里面。在 vim 按 i 进入编辑模式,然后输入下面的内容: ...

November 29, 2022