你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

介绍一些有用的小工具

[复制链接]
gaosmile 发布时间:2020-11-26 19:26
本文将介绍一些有用的小工具,它们能够帮助我们提高工作效率。本文将介绍笔者在近一周发现的三个小工具,写文章以做记录,希望能对大家有所帮助。% [( _/ A5 u- W0 f

8 `5 X. S. O# s5 ?- |; _4 y: m, c4 f
微信图片_20201126192523.jpg
本文将介绍的三个小工具如下:
  • 在Sublime Text中支持Python运行;
  • 在Mac电脑的iTerm2中支持查看图片;
  • Python的typing模块介绍。

    7 b" v5 B1 J: T( e0 v
  详细内容介绍如下。
在Sublime Text中支持Python运行
  在平时工作中,我们通常用PyCharm开发Python工程,也可以用Vim编辑和查看Python脚本。但是,如果我们仅仅想创造一个单独的脚本来实现某些功能,那么用PyCharm会显得大题小做,用Vim又不方便编辑。这时候,我们可以借助文本编辑器,比如Sublime Text,来实现Python脚本的编辑和运行。
4 l: r, Z+ G7 o  Sublime Text是Mac系统支持的文本编辑器,Notepad++不支持Mac系统。
% b( L3 F* F5 p7 ]  如果我们想在Sublime Text中支持Python运行,需要做一些设置。, a3 A! R) I0 x! Z% C& b' ^
  打开Sublime Text的Tools,选择Build System中的New Build System...,会出现脚本,我们修改其中的内容如下:
{% |# p4 z: e6 r' O2 O/ b# y$ R$ }
    "cmd": ["D:/Anaconda3/python3.7.exe","-u","$file"],1 R! U# z4 m$ M4 {; {2 a
}+ [1 Y) @8 N8 Z9 S6 [. q) u7 R
微信图片_20201126192526.png

+ J* b& K" X9 W  我们示例的Python脚本为test.py,代码如下:

8 i6 b! U$ D: z; s  n
import numpy as np
" Z6 U" l" Y8 U  w; Y, S' c8 y) s
, |' Y/ ?( p0 D" u3 a1 _7 Vmatrix = np.array([[0, 1, 2],
# H: p. M0 ?7 Z& c  `. R' i                   [2, 4, 5]
" y( }! E/ y1 s) Z& v                   ])+ ]0 o9 `: f# y$ e6 b$ p
6 ]. U+ P, P$ i/ H
print(matrix[1, 2])1 T, o! U' m* [" a9 g  Y: l( U5 v

- K  S+ N$ ^4 Mprint("Hello world from Sublime Text.")
4 B0 V" A# v$ m: \2 `
点击Tools中的Build或者Ctrl+B运行程序,结果如下:4 O9 q( L% d' o7 f/ A( \
微信图片_20201126192530.png # h( _* A; E; [0 K( x8 w3 y/ n0 V
  同样,在Windows系统中也可以这样设置,方便又使用。
( `6 j, @! k6 `; ?0 u( ^  至于Notepad++是否有相似的功能,还有待研究。

, N2 Z! O0 |7 ^+ x8 D3 X

8 ~+ g/ G, z2 Y4 {3 l8 i, g在Mac系统的iTerm2中支持查看图片
  iTerm2是Mac系统很好用的终端工具,本文不过多介绍iTerm2,而是介绍如何直接在iTerm2中查看图片,这样可以方便我们在终端直接查看图片。
* m/ n* `# m0 {: V- ~. A* p  我们使用的工具为imgcat。; I5 U; O/ T( e1 {
  在iTerm2中新建shell脚本imgcat.sh,里面的内容可以参考网址:https://www.iterm2.com/utilities/imgcat,编辑完文件后保存,并用chmod u+x imgcat.sh赋予执行权限。9 B  f5 X9 r: u" @# I! r
  这样就可以直接查看图片了。什么,这么简单?对,就是这么简单!- d0 g+ Q$ P7 G( T' m6 l/ R
  在笔者电脑上的效果如下:' x4 w  g3 E8 @7 Z1 p4 J2 W' M+ p
微信图片_20201126192533.png
" }2 ^2 _4 t" X& ?! g8 t: `+ {! O" ?% L' L

. \, z* X8 e% u5 fPython中的typing模块介绍
  typing模块是Python中提供类型支持的模块,它的主要作用为:
  • 类型检查,防止运行时出现参数和返回值类型不符合。
  • 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
  • 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。
    9 ^% f1 D6 j; e! ^- M
简单来说,使用typing模块我们可以对参数的类型做注释并检查,它不会影响程序运行,而这是提醒。总所周知,在Python中调用函数或变量时,不需要对参数或变量进行类型说明,这样虽然方便程序编写,但不利于程序阅读,有了typing模块,可以增加程序的可阅读性,同时也能提升代码的可维护性和健壮性。7 \5 W. G1 ]3 x" ]
  举个简单的例子,我们实现一个函数digits_sum,输入参数为字符串,比如"352",输出该数字上的各个数位上的数字之和,比如10。有了typing模块,我们的代码如类似如下:
from typing import *7 S- Y+ T8 W0 ?, [- J& o/ }
3 h. ]& \# ~) A6 q& l
# 创建函数7 L1 ]9 f9 ^& _! n, ~
def digits_sum(num:str) -> int:
* h: w  O, Z2 C* x9 f9 l1 U    digits_arr = map(lambda x: int(x), num)# I4 X) Z% p" \+ `0 Y" \
    return sum(digits_arr)
- `/ ^1 P/ K3 T2 U' t! Z5 t2 {) g7 A$ o
% V  `8 m7 Q6 _/ J0 N# @
# 测试
/ y0 i6 T: \/ i% _" ]num = "352"8 ]  x  W" K7 b( j! V
result = digits_sum(num=num)( H4 V5 k. {6 L3 ^0 {
print(result)) [+ f" J1 {4 P2 _
输出结果为10。对上面的程序做点说明,其中第一句中的from typing import *可以不必写,因为str,int都是Python内置的数据类型。函数声明为def digits_sum(num:str) -> int,括号内的num类型为str,箭头后的int表示函数的输出结果数据类型为int。- M" ~8 o+ t$ Q
  我们再给出一个例子。函数dict_multipy,输入为字典,如果key值对应的value的数据类型为float或者int型,则乘以2,否则跳过,那么输出也为字典。程序如下:
from typing import Dict, Any
) Y! D+ O( o9 ]/ u3 t5 h# G6 d
5 W9 h: b, x7 d" M/ D# 创建函数9 ]9 }0 H8 j3 D- v9 [. `+ _1 S
def dict_multipy(d: Dict[str, Any]) -> Dict[str, float or int]:# V. A, [6 m& s" m1 Q7 G- m: a  n6 q3 ?
    new_dict = {}
) d! [9 q7 S4 S' ~0 ~9 ?    for k, v in d.items():* H3 z0 k# B6 }" l& O( i
        if isinstance(v, (float, int)):2 a5 Q1 u6 o% w& k, Z
            new_dict[k] = v * 2. [% ~! X; E6 |* v& f( j1 {+ n
) @0 @7 G; G, b( w$ C
    return new_dict  J# O& b) u( i& i' W( j5 T; f

6 V: I* y2 \+ H3 }( a0 x
; f2 C2 C0 V: Y2 u: F- y# 测试
' M2 H) @3 d, k/ X1 m; b2 W2 Sd = {"no": "100", "age": 12, "work_year": 3, "name": "JC"}  h* Y. a8 z. k! V! B* k+ `
new_d = dict_multipy(d=d)
7 j$ S1 Z, N  @: Kprint(new_d)$ s( g5 O* ]1 C+ V
输出结果为{'age': 24, 'work_year': 6}。在函数声明中,d为字典,其key值为str,val为任意类型(Any),输出为字典,key值为str,val值为float或者int。
3 R3 D! ]- f. q: E3 a+ V9 {5 K  当然,我们还可以在typing创建别名或者新的数据类型,以下就是一个例子。更多的使用方法可以参考typing模块的官方网址:https://docs.python.org/zh-cn/3.6/library/typing.html 。
from typing import List, \* l9 j+ _1 X

8 d( g( Y- |" z+ q# 取List[float]别名为Vector
! X3 a. t9 ~3 j# g& F' lVector = List[float]* S  p- W1 W% E# L6 F
( t4 H% e* _3 e, g5 `" o
def scale(scalar: float, vector: Vector) -> Vector:+ d) `% h1 o$ n6 i# D9 }
    return [scalar * num for num in vector]
# j  \) K8 X5 X9 E* o7 Q8 {2 h, j5 u- h- c1 W8 P0 r- x/ A
new_vector = scale(2.0, [1.0, -4.2, 5.4])
' x5 v" h! [# l4 D5 Y, t2 S. Q7 s
  本次分享到此结束,感谢大家阅读~

  h+ ?; ]$ ?! @. i0 _2 ^$ t4 Y- L) i  B/ q7 `
赞 收藏 评论0 发布时间:2020-11-26 19:26

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版