python HelloWorld 的 4 种姿势,你知道几种
安装完 Python 之后该干啥,当然是要 say HelloWorld 了。
python.exe
就是个普通程序
和其它所有命令一样,在命令行中敲下 python
并回车的时候,操作系统去 PATH
路径中搜索到了 python.exe
并执行。从这一点看,它和其它程序并没有什么不同。比如说:notepad
会打开记事本,explorer
会打开资源管理器。
区别在于,python
是一个纯粹的命令行程序,它没有大家熟悉的窗口界面。
注意,可执行程序的
.exe
文件名后缀只是 Windows 系统下的命名风格,输入命令的时候是省略的。并且在 Linux 系统中可执行文件都没有.exe
后缀,python
的命令风格是偏 Linux 风格的,所以后面提到 python 的时候直接说python
而不是python.exe
。
python
的参数
执行命令行程序的时候,往往需要可以带上 参数(argument)。例如:
单独执行 notepad
,打开一个新的无标题记事本,而如果执行 notepad hello.py
,则会打开这个指定的文本文档(当然,当前路径下得有名为 hello.py
的文件,否则 notepad
会有提示你)。
python
是一个解释器程序,它的能力就是 解释执行 Python 代码。
所以我们可以把 Python 代码作为参数传递给它。最常见的是传一个文件给它:
python hello.py
比如刚才我们用记事本创建的 hello.py
文件:
这里的
.py
文件后缀不是必须的,就像记事本也不一定只能编辑.txt
文件。带上后缀只是方便操作系统和用户识别这是一个 Python 源码文件。
不带参数执行 python
,因为没有内容可以解释,就进入到了交互模式。
交互模式下,在提示符 >>>
后面等待用户输入,每输入一句,就解释执行一句。
交互模式下的 helloworld 大家肯定早已熟悉,这里就不充数了,改天再细聊
REPL
!
严格来说,没有参数的意思并不是 没有内容,而是表示 内容源 来自 标准输入(stdin)。事实上,它等价于:
python -
用一个短杠做参数的时候表示标准输入,这是 Linux 程序的惯例。所谓标准输入,不熟悉操作系统的小伙伴姑且可以认为就是来自用户输入。而相对的,自然就有 标准输出(stdout)。我们用 print()
函数就是把结果 打印 在标准输出中。
stdout
和 stdin
可以用一道竖线 |
串联起来形成 管道(pipe),所以可以写出下面这种另类的 helloworld:
C:\Users\Davy>echo print('helloworld')|python
helloworld
注意,在 windows 系统下,这里 echo
后面不能加引号,而在 Linux 系统中则必须加一层引号:
[root@davycloud ~]# echo print('helloworld')|python
-bash: syntax error near unexpected token `('
[root@davycloud ~]# echo "print('helloworld')"|python
helloworld
python
的选项
在 Python 安装 文章中,我们用了 python --version
来测试 python 程序是否正常。
这种用 -
或 --
传递给程序的特殊参数称之为 选项(option),一个中杠(也就是减号 -
) 后面跟一个字母,称为 短选项,--
后面跟完整的单词,称为 长选项。
注意,选项是一种特殊格式的参数,在下面
py
的帮助信息中,就统称是 args
有的选项只有短或长格式,有的选项既有短的,又有长的。例如 --version
对应的短选项是 -V
(大写的 V)。
除了 --version
打印版本信息,还有通过 --help
或 -h
打印帮助信息也是比较通用的做法:
以后遇到不熟悉的命令,都可以先执行
--help
试试。不过值得提醒的是, Windows 系统中的传统命令是使用/?
表示选项。
python 解释器中还有以下选项比较有用:
-c
选项
-c cmd : program passed in as string
把程序以字符串的形式传给解释器,例如,helloworld 可以这样写:
C:\Users\Davy>python -c "print('helloworld')"
helloworld
还可以是多行语句,中间用分号 ;
分隔就行了:
C:\Users\Davy>python -c "import sys;print(sys.version)"
3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)]
-i
选项
-i : inspect interactively after running script
在执行完脚本后进入到交互模式。
这个选项在学习的情况下很有用,下面给大家举个小例子。
比如学习到函数的时候,定义一个函数要写多行语句,显然写在文件中比较合适。
但是随后对这个函数的进行练习测试,如果你也写在文件中,那么每次都要这样:
编辑 - 保存 - 运行
每次运行都是从头开始,这样是比较麻烦的(因为麻烦所以没有动图了):
这时候就可以使用 python -i test.py
运行脚本,脚本运行结束后自动进入交互模式。此时脚本里定义的一切对象,仍然可以访问。就好像是接在脚本后面继续写代码一样:
-m
选项
-m mod : run library module as a script
把模块当作脚本来运行。
例如,著名的一行代码启动一个 HTTP 服务器:
python -m http.server
在安装 Python 一文中已经和大家介绍过了,模块所在的文件夹位置,所以上面命令也可以直接用运行脚本的方式:
python C:\Users\Davy\AppData\Local\Programs\Python\Python38\Lib\http\server.py
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
这里需要定位到 .py
文件的具体位置,这个在每个人的环境上都不一样,显然比使用 python -m module
麻烦多了。
这里可以看出,module
和在命令行中敲命令有异曲同工之妙,事实上,它们的原理也差不多。module
也需要有一个 path
变量,保存一个搜索路径的列表。
这个 path
变量保存在 sys
模块中:
python -c "import sys;print(sys.path)"
更多具体内容,后面学习到 module
相关内容的时候再详细讨论。
py.exe
的用法
在安装完成后,我们使用 py --list
来显示已安装的 python
版本列表。这里简单介绍下 py
命令的用法。
同样地,用 -h
或 --help
来获取帮助信息:
打印信息分为两部分,前面是 py
自己的帮助信息,后面是 python
的帮助信息。
usage:
py [launcher-args] [python-args] script [script-args]
Launcher arguments:
-2 : Launch the latest Python 2.x version
-3 : Launch the latest Python 3.x version
-X.Y : Launch the specified Python version
The above all default to 64 bit if a matching 64 bit python is present.
-X.Y-32: Launch the specified 32bit Python version
-X-32 : Launch the latest 32bit Python X version
-X.Y-64: Launch the specified 64bit Python version
-X-64 : Launch the latest 64bit Python X version
-0 --list : List the available pythons
-0p --list-paths : List with paths
除了最下面我们已经见过的 -0
和 --list
,其它参数都是用来选择 python 解释器。不但能区分版本号,还能按 32 位 或 64 位选择。值得注意的是,版本号只包括前两位。
如果不带选择版本参数,实际对应默认的 python 解释器。其它所有不是上面这些格式的参数,也作为 python 解释器的参数。
所以,在命令行中敲 py
和 python
的效果是一样的(每次可以少敲 4 次键了,效率大幅提升,✌️),即使带上了版本参数,也很方便:
C:\Users\Davy>py -0
Installed Pythons found by py Launcher for Windows
-3.8-64 *
-2.7-64
C:\Users\Davy>py -2 --version
Python 2.7.17
C:\Users\Davy>py --version
Python 3.8.1
为了演示
py
的功能,特意又安装了python 2.7
,并且这次没有加入到PATH
问题来了,pip
这种放在 Script
中的命令怎么办呢?
这种情况,结合使用前面介绍的 -m
选项就可以了:
C:\Users\Davy>py -2 -m pip --version
pip 19.2.3 from C:\Python27\lib\site-packages\pip (python 2.7)
安装包的时候也是一样的:
差点忘了,helloworld 的第 4 种姿势: python -m hello
小结
本文主要介绍 python
解释器的基本用法,传入代码的四种方式:文件,字符串,stdin,module。同时介绍在 windows 下如何使用 py
启动器运行不同版本的 python。
如果本文有帮助,不妨 点赞 + 关注,谢谢!
python HelloWorld 的 4 种姿势,你知道几种的更多相关文章
- Python爬虫的N种姿势
问题的由来 前几天,在微信公众号(Python爬虫及算法)上有个人问了笔者一个问题,如何利用爬虫来实现如下的需求,需要爬取的网页如下(网址为:https://www.wikidata.org/w/ ...
- python打开文件的N种姿势
# python打开文件的N种姿势 print('[1]使用open()函数+简单for循环') f1 = open('python.txt') for line in f1: print(line. ...
- Python 高级特性介绍 - 迭代的99种姿势 与协程
Python 高级特性介绍 - 迭代的99种姿势 与协程 引言 写这个笔记记录一下一点点收获 测试环境版本: Python 3.7.4 (default, Sep 28 2019, 16:39:19) ...
- python获取字母在字母表对应位置的几种方法及性能对比较
python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...
- 快速了解IOC的几种姿势
一.首先我们了解IOC如何注入的几种姿势 构造函数注入(Constructor Injection) Ioc容器会智能的选择和调用合适的构造函数以创建依赖的对象.如果被选择的构造函数具有相应的参数,I ...
- 两个文件去重的N种姿势
最近利用shell帮公司优化挖掘关键词的流程,用shell替代了多个环节的操作,极大提高了工作效率. shell在文本处理上确有极大优势,比如多文本合并.去重等,但是最近遇到了一个难搞的问题,即两个大 ...
- 纯Python综合图像处理小工具(3)10种滤镜算法
<背景> 滤镜处理是图像处理中一种非常常见的方法.比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换:很多手机app实现了实 ...
- 又拍云张聪:OpenResty 动态流控的几种姿势
2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...
- 补习系列(7)-springboot 实现拦截的五种姿势
目录 简介 姿势一.使用 Filter 接口 1. 注册 FilterRegistrationBean 2. @WebFilter 注解 姿势二.HanlderInterceptor 姿势三.@Exc ...
随机推荐
- python 多线程两种实现方式,Python多线程下的_strptime问题,
python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26 44021 0 目前python 提供了几种多线程实现方式 thread,t ...
- Python15_包的安装和管理
pip的安装及简单使用:https://www.cnblogs.com/csucat/p/4897695.html 使用pip手动安装第三方库:https://blog.csdn.net/github ...
- Python5_学习方法论
学习路线: 1.对基础知识的全面掌握,熟悉IDE和基本概念,注重知识体系构建: 2.开发实战.在该过程中掌握各类框架知识.熟悉模块的使用.并根据问题深入学习: ==================== ...
- Google 浏览器设置打开超链接到新窗口标签页
一.windows 按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...
- ECMAScript新语法、特性总结
前言 从2015年的ES6开始,JavaScript的语言标准每年都在更新,其中尤其以ES6的力度之大,到现在ES10已经发布,这里总结一下新语法. 参考:阮一峰 ECMAScript 6 教程 .E ...
- MapReduce-自动化运行配置
1.打包时指定main Class信息 注意:默认直接通过maven插件打成jar包中没有指定main class信息,因此在运行mapreduce的jar包时必须在指令后明确main class信 ...
- ReentrantLock 源码分析从入门到入土
回答一个问题 在开始本篇文章的内容讲述前,先来回答我一个问题,为什么 JDK 提供一个 synchronized 关键字之后还要提供一个 Lock 锁,这不是多此一举吗?难道 JDK 设计人员都是沙雕 ...
- ThreadLocal解析:父线程的本地变量不能传递到子线程详解
众所周知,ThreadLocal类是java提供线程本地变量的工具类.但父线程的本地变量却不能被子线程使用,代码如下: public static void main(String[] args) { ...
- openjudge 7622 求排列的逆序数(归并)
7622:求排列的逆序数 总时间限制: 1000ms 内存限制: 65536kB 描述 在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她) ...
- 详解定时任务中的 cron 表达式
1.前言 我们经常使用 cron 表达式来定义定时任务的执行策略,今天我们就总结一下 cron 表达式的一些相关知识. 2. cron 表达式的定义 cron 表达式是一个字符串,该字符串由 6 个空 ...