从 JavaScript 角度学 Python(26) - 指定直译器

前言

这一章节开始让自己脑袋轻松一点好了,毕竟前面也学了不少的东西,所以这边就聊点简单的好了。

指定直译器

你有注意到许多 Python 的程序码前面都会有一行神奇的语法,例如:

#!/usr/bin/python
#!/usr/bin/env python
#!/usr/bin/python3
#!/usr/bin/env python3

那麽这几行到底是什麽意思呢?

https://ithelp.ithome.com.tw/upload/images/20210926/20119486jPGWhzaquM.png

简单来讲就是在指定 Python 直译器而已。

这时候你可能会想说为什麽还要特别去指定 Python 的直译器呢?这个原因是因为有些人在开发的时候电脑会同时安装 Python2 与 Python3,例如:我。

而 Python2 与 Python3 不论是套件或者是语法上都是不相容的,在前面章节其实都有加减举例到一些 Python2 与 Python3 两者写法上的差异,所以应该都可以注意到语法上的不同。

#! 这个语法其实被称为 Shebang 或者是 Hashbang,主要是用於指定直译器的类型,虽然在解释上是说指定直译器的类型,但实际上是在指定直译器的执行档案位置,因此其实不只有 Python 会用到,就连 PHP 也会有机会看到:

#!/usr/bin/php

而这一行指令主要用於「类 Unix」系统,而类 Unix 意思是指各种 Unix 延伸出来的版本,但这不是这一章节想聊的东西,如果想更了解什麽是「类 Unix」的话,会建议阅读维基百科 这一篇 的解释。

那麽我们该如何验证这一行真的有效呢?如果你是 Mac 开发者的话,恭喜你!你可以试着实验看看,但是如果你是 Window 开发者的话就只能跟你说一声 Sorry 了,毕竟 Windows 不支援 Shebang。

https://ithelp.ithome.com.tw/upload/images/20210926/201194861fGLxM3iRw.png

透过前面迷因的解释,我们就知道接下来完全不会围绕在 Windows 上,所以这边就只会围绕在 Mac 解释,那为什麽要特别指定直译器呢?在安装的章节我们有解释过 Mac 本身就有内建 Python 2.x,如果你要使用 Python3.x 的话,通常会需要额外安装。

讲到这边你发现了吗?我们一台 Mac 中会有两个版本的 Python 呢!虽然我们在前面都没有什麽太大执行上的状况,因为我们有特别指定使用 python3 指令去跑 Python 档案,如果拿到 Node.js 来讲的话...这个概念类似於我们在执行 Node.js 的时候,通常都会输入 node app.js 的概念一样,然後假设某一天 Node.js 大改版,以後指令预设安装之後你必须输入 node3 app.js 是雷同的想法。

这时候你可能会想说「那这样我还要写 #!/usr/bin/python3 吗?」答案还是建议要写,除了可以确保 Python 档案在双系统(Python2 与 Python3) 的 Unix 可以正常运作之外,你也可以透过这一行就知道这个档案所要运行的是 Python2 还是 Python3 唷。

#!/usr/bin/python3#!/usr/bin/env python3 也是有一定差异的,有些开发者在安装环境的时候,并不会将 python 安装在预设 /usr/bin 路径下,因此为了避免这种状况发生,通常就会使用 /usr/bin/env,当使用者没有将 Python 安装在预设路径时,就会改读取 env 路径去找 Python 直译器,所以你说哪一种比较好?以我的认知来讲是推荐使用 /usr/bin/env 哩。

oh!对了,除了 #!/usr/bin/python3 指定直译器的方式之外,还有指定原始码的字元编码,虽然 Python 通常预设字元编码是 UTF-8(又称之为万国码),但是总会有另外状况,所以当你希望调整字元编码时只需要在档案前面写你要的字元编码即可:

#!/usr/bin/env python
# -*- coding: big5 -*-

但是通常来讲保持 UTF-8 是比较好,因此你也会看到有人为了避免一些怪状况,所以都会写死就是了:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

这时候你可能会想说,为什麽我都没有去撰写这个指定直译器的方式呢?原因很简单,我忘了。

https://ithelp.ithome.com.tw/upload/images/20210926/20119486vvVU0Rhab8.png

好啦,时间也差不多了,这边算是简单轻松聊一下这个而已,那麽我们下一篇见罗~

参考文献

作者的话

都市地区住习惯之後再回到乡下住整个简直快崩溃一样,因为一直没有讯号,超怕一个不小心铁人赛就没有发出去 QQ

关於兔兔们

兔法无边


<<:  【在 iOS 开发路上的大小事-Day15】透过 Firebase 来管理使用者 (Sign in with E-mail 篇) Part1

>>:  [Day27]Vito'sfamily

The Effective CISSP考试攻略

考试的难易 一个好的考试,通常会让你准备的很辛苦!但通过考试後会让你一直駡,怎麽考出来的题目没有想像...

GitHub 操作介面介绍 - 让初学者轻松上手

本篇文章同步发布於个人部落格 (後续更新皆会以部落格为主):GitHub 操作介面介绍 上一篇文章我...

企业为什麽需要实施BPM?

BPM是 Business Process Management 的简称,翻成中文是业务(Busin...

Day 15 Flask 回传参数

在网页中不可能只是按照设定好的 URL 去取得网页页面,在许多时候都需要带入不同的参数去取得不同的资...

D23 - 用 Swift 和公开资讯,打造投资理财的 Apps { 台股成交量实作.3 }

在 KLineViewController 开出的 volumeDataSet 会在 parent ...