Python基础手册P1 启动、注释和运算符

1,048 阅读5分钟

开始之前

我很长时间之前就打算写一个系列的文章,以一个非初学者的视角讨论 Python 基础。

从入门到进阶的初学者指南很多,有的写的也相当出色,比如我自己入门学习的廖雪峰老师的Python教程。说实话,要在这些入门教程中再添一笔,不是件容易的事,我也无心研究编程入门教学。

我希望的是,整理一下 Python 基础,并少量对照源码,通过自己的研究写一些东西,在这个过程中夯实基础,提升技能。

这个系列暂定名为《Python基础手册》。这更像是一本给自己的 Python 操作手册,一本 My version 的 Python Cookbook。

看看基础,写写实例,读读源码,再作成笔记,希望助更多学习 Python 的朋友一臂之力。


既然不是面向初学者,那就需要读者有一定的基础。比如,在阅读本文前,您应该懂得命令行的使用,如果这方面的知识您有所欠缺,我推荐学习 Zed A. Shaw 的《命令行快速入门》(您可以在 Zed A. Shaw 的网站 上阅读这一内容)。

(当然,你大可不看。我尝试过很多办法力荐身边的朋友(那些惯用Windows的朋友)使用命令行,但都基本无效。我现在不想再做这件事了,既然有人可以忍受不会使用命令行而带来的不便,那我也不好说什么。毕竟,我会使用命令行,用的不好,但足够应付我遇到的问题,而你不会命令行,麻烦的不是我。在享受命令行的强大的同时,冷眼嘲讽那些看着视窗,对于“从特定文件中提取特定的字段来批量重命名数百个文件”这样的简单入门级命令行任务无从下手、只好开始百度“一键批量重命名神器.exe下载”的电脑高手们暗自苦恼也是一件令人愉悦的事)

哈哈,言重了,其实 Python 也可以相当优雅的完成这个任务,有机会的话,我会在以后的文章中介绍如何用 Python 解决这些琐事。但这需要我们现在先来看一看 Python 到底怎么用👇👇👇

Python解释器

你知道 Python 是解释型语言啦,所以有一个叫 Python 解释器的东西啦。我们写的 Python 代码就是通过解释器运行起来的。

废话不多说,来看这解释器的用法:

启动

  • $ python: 进入交互式环境。
  • $ python -: 脚本名指定为 '-' (表示标准输入),与$ python等效。
  • $ python -c command [arg] ...: 在命令行执行 Python 语句,类似于 shell 中的 -c 选项。用'单引号'包裹command,其中写python语句,类似于awk。
  • $ python -m module [arg] ...: 有一些 Python 模块也可以当作脚本使用。这类似在命令行中键入完整的路径名执行模块源文件一样。
  • $ python filename: 执行python源文件。
  • $ python -i filename: 执行python源文件,然后不退出,留在python交互式命令行。

退出

  • 输入一个文件结束符(Unix 系统是 Control-D,Windows 系统是 Control-Z)让解释器以 0 状态码退出。
  • 输入 quit() 命令退出解释器。
  • 输入 exit() 命令退出解释器。

命令行参数传递

调用解释器时,脚本名和附加参数传入一个名为 sys.argv 的字符串列表,这类似于C语言main函数的 char *argv[]

取用 sys.argv 前要 import sys

关于 argv 的行为,我们借用C/C++的 switch-case 语句的形式来讨论:

switch (输入命令) {
    case "$ python": 
        // sys.argv 有一个元素:sys.argv[0] 此时为空字符串
        break;
    case "$ python -":
        // sys.argv[0] 被设定为 '-'
        break;
    case "$ python -c command [arg] ...":
        // sys.argv[0] 被设定为 '-c'
        break;
    case "$ python -m module [arg] ...":
        // sys.argv[0] 被设定为指定模块的全名
        break;
}
/* 
注意C/C++的这个语句switch后面括号内的“表达式”必须是整数类型!
*/

⚠️【注意】:-c 指令 或者 -m 模块 之后的参数不会被 Python 解释器的选项处理机制所截获,而是留在 sys.argv 中,供脚本命令操作。 例如:

$ python3 -i -c 'import sys' 1 2 3
>>> sys.argv
['-c', '1', '2', '3']

指定源程序编码

默认情况下,Python 源文件是 UTF-8 编码。 在 #! 行(首行)后插入至少一行特殊的注释行来定义源文件的编码:

# -*- coding: encoding -*-

可用的 encoding 列表

⚠️【注意】如果使用 Microsoft Windows 自带的 记事本(‘Notepad’)进行 python 源码的编辑,注意使用 utf-8 without BOM 编码!

Python注释

没有人会否认注释的重要性。在开始讨论其他语法之前,我们有必要看一看注释怎么写。

Python 中的注释以 # 字符起始,直至实际的行尾(physical line, 表示实际的换行而非编辑器的自动换行)。 注释可以从行首开始,也可以在空白或代码之后,但是不出现在字符串中。

# 这是一个注释

写文档注释的时候,我们常借用多行字符串:

def func(a):
    """函数func是用来干什么的
    
    详细行为描述...
    
    Args:
    	a: 参数a是什么
    
    Returns:
    	返回值是什么
    
    """

class Cls(object):
    """类的总结

    详细行为描述...

    Attributes:
        a: 属性a的说明
        b: 属性b的说明
    """

【注】关于文档注释,我们会在本系列后面的【Python代码风格】一文中详细介绍。

Python基本运算符

计算机,如其名,是计算的好手!既然编程语言是人类和计算机沟通的语言,那这些语言就应该可以方便简介地让计算机算起来——从加减乘除开始。Python 的加减乘除运算我们都很熟悉,基本就是我们在小学数学中看到的那些写法:

运算符作用
+-*用于 加、减、乘 运算
/除运算,返回一个浮点数
//除运输,返回结果取整(floor, 向下取整)后的整数
%取余运算
**乘方运算
()用于分组
=用于给变量赋值
==用于判断值是否相等

⚠️【几点注意】:

  • 变量在使用前必须 “定义”(赋值),否则会出错。
  • 交互模式中,最近一个表达式的值赋给变量 _
  • 浮点数有完整的支持;整数和浮点数的混合计算中,整数会被转换为浮点数。
>>> a = 1
>>> b = 2
>>> c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>> a + b
3
>>> _ + 3    # (3) + 3
6
>>> c = _ * 2    # c = (6) * 2
>>> c
12
>>> d = 0.3
>>> a + d
1.3

对于整数类型,你还可以像 C 一样,做位运算:

运算说明
`xy`x、y 按位取逻辑或
x & yx、y 按位取逻辑与
x ^ yx、y 按位取异或
x << nx 左移 n 位
x >> nx 右移 n 位
~xx 按位取逻辑非

未完待续...

Next: 【Python基本数据类型】