blog icon indicating copy to clipboard operation
blog copied to clipboard

Python之旅:第一章-快速上手

Open kaindy7633 opened this issue 3 years ago • 0 comments

Table of Contents generated with DocToc

  • Python之旅:第一章 快速上手
    • 交互式解释器
    • 算法是什么
    • 数和表达式
    • 变量
    • 语句
    • 获取用户输入
    • 函数
    • 模块
      • cmath和复数
      • 回到未来
    • 保存并执行程序
      • 从命令提示符运行Python脚本
      • 让脚本像普通程序一样
      • 注释
    • 字符串
      • 单引号字符串以及对引号转义
      • 拼接字符串
      • 字符串表示str和repr
      • 长字符串、原始字符串和字节
        • 长字符串
        • 原始字符串
      • Unicode、bytes和bytearray

Python之旅:第一章 快速上手

Python是一种面向对象的解释性高级编程语言,它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且支持多种编程范式,包括面向对象、命令式、函数式和过程式编程,其本身拥有一个巨大而广泛的标准库

Python需要安装,请访问其官方网站:https://python.org,根据你的系统下载并安装相应版本,安装部分这里就不再赘述了。

交互式解释器

在Python安装完成后,你可以在命令行窗口中输入python,即可启动Python的交互解释器,如果有多个版本共存,比如版本2和版本3,则输入python3,本书以Python3.6为标准进行撰写。

在解释器中,>>>代表可输入,我们来试试:

print('hello Python!') # 语句后面无需加入分号

回车之后,解释器会打印出:

hello Python!
>>>

算法是什么

算法详尽的描述了如何完成某项任务的流程或方法。

数和表达式

Python具有强大的数学运算功能,能执行常见的加减乘除运算,其他的还有求模(求余)、幂运算等。

在Python中,执行除法运算的结果始终为浮点数(Float)

>>> 1 / 2
0.5
>>> 1 / 1
1.0

你可以使用双斜杠//来执行整除运算,即丢弃小数部分,注意,执行此运算时Python总是向下取整

>>> 1 // 2
0
>>> 1 // 1
1
>>> 5.0 // 2.4
2.0
>>> 10 // 3
3

在Python中执行求余(求模)运算使用 % ,跟大多数语言一样。

>>> 10 % 3
1
>>> 9 % 3
0
>>> 2.75 % 0.5
0.25

一些带有负数的整除和求余运算,取整运算(//)会始终取不大于当前结果的整数,也就是向下取整

>>> 10 // 3
3
>>> 10 // -3
-4
>>> -10 // 3
-4
>>> -10 // -3
3
>>> 10 % -3
-2
>>> -10 % 3
2
>>> -10 % -3
-1

扩展阅读:大家看到上面的10 % -3的结果是-2,可能会感到很奇怪,不应该是-1吗?这里要特别说明一下,Python在求余运算时采用的floored division算法,它的运算规则由除法规则决定,所以,被除数、除数、商和余数的关系应该要满足下面的等式:

被除数 = 除数 * 商 + 模

由上面的等式得出:

模 = 被除数 - 除数 * 商

我们看到,10 // -3得到的结果是-4,因为Python在做整除运算时始终遵循向下取整的规则,所以10 / -3的结果-3.33333...向下取整就是-4,按照上面的公式,可以得出:10 % -3的结果应该是: 10 - -3 * -4 = -2

接下来看看乘方(求幂)运算:

>>> 2 ** 3
8
>>> -3 ** 2
-9
>>> (-3) ** 2
9

注意,乘方运算符的优先级比求负(单目减)高,所以-3 ** 2相当于-(3 ** 2),而如果要计算的是(-3) ** 2,就需要加上括号,明确的指出先进行单目运算。

在Python中,我们可以如下表示十六进制、八进制和二进制:

>>> 0xAF
175
>>> 0o5
5
>>> 0b1011010010
722

变量

变量是表示(或指向)特定值的名称,比如你可以使用名称 x 来表示3:

x = 3

这个过程称为赋值(assignment),或者也可以这样理解,我们将变量x与值(或对象)3关联起来,给变量赋值后,就可以在表达式中使用:

>>> x * 2
6

注意,使用变量之前必须给他赋值,在Python中变量没有默认值。上面的名称(标识符)只能由字母、数字和下划线(_)构成,且不能以数字打头。这个大多数编程语言一致。

语句

前面已经介绍的几乎是表达式,但又不完全是,也可以说它们是语句,比如print语句和赋值语句。

print('hello world') # print语句
x = 3 # 赋值语句

表达式和语句有什么不同呢?表达式是一些东西,而语句做一些事情,它们的行为很相似,因此它们之间的界限并不是那么明确。

注意:print实际上是一个函数,因此print语句也就是函数调用。

获取用户输入

在Python中,使用函数input来获取用户输入:

>>> input('The meaning of life:')
The meaning of life: 42
42

在命令行输入后回车,屏幕打印出需要用户输入的提示,输入值后回车,解释器再次打印出用户的输入,被输入的值以字符串的类型返回,我们可以使用int函数将其转换为数值

>>> x = input('x: ')
x: 34
>>> y = input('y: ')
y: 42
>>> print(int(x) * int(y))
1428

函数

上面我们介绍了求幂运算,2 ** 3,求2的3次方,其实我们也可以使用函数pow来完成这个任务:

>>> 2 ** 3
8
>>> pow(2, 3)
8

函数就是一个小型程序,用来执行特定的操作,Python也允许开发者自定义函数,因此我们将pow等标准函数称为内置函数

使用函数称为函数调用,向它提供实参,它返回一个值,函数调用会返回一个值,因此它们也是表达式,我们可以结合使用函数调用和运算符来编写更复杂的表达式:

>>> 10 + pow(2, 3 * 5) / 3.0
10932.666666666666

内置函数abs计算绝对值,round函数将浮点数取值为与之最接近的整数

>>> abs(-10)
10
>>> 2 // 3
0
>>> round(2 / 3)
1.0

Python还提供了floor函数,但我们不能直接使用它,它是被包含在模块中的。

模块

我们可以将模块看做是扩展,可以将其导入以扩展Python的功能。在Python中,导入模块使用import命令,上面提到的floor函数包含在模块math

>>> import math
>>> math.floor(32.9)
32

Python中有一些类似于函数的东西,诸如:strfloat,它们用于类型转换,但它们并不是函数,而是类。

模块math还包含了ceil函数,它正好与floor相反,它返回大于或等于给定数的最小整数

>>> math.ceil(32.3)
33
>>> math.ceil(32)
32

如果我们不想导入整个模块,也可以像下面那样从某个模块导入特定的函数:

>>> from math import sqrt
>>> sqrt(9)
3

我们还可以使用变量来引用函数,比如,执行赋值语句foo = math.sqrt,我们就可以使用foo来计算平方根:

>>> from math import sqrt
>>> foo = math.sqrt
>>> foo(4)
2.0

cmath和复数

如果我们向函数sqrt提供了一个负数的参数,那么它将报错:

>>> sqrt(-1)
Traceback (most recent call last):
  File "<pyshell#76>", line 1, in <module>
    sqrt(-1)
ValueError: math domain error
>>> 

如果我们坚持将值域限定为实数,并使用其近似的浮点数实现,那将无法计算负数的平方根,负数的平方根为虚数,而由实数部分和虚数部分组成的数为复数,Python提供了专门用于处理复数的模块:

>>> import cmath
>>> cmath.sqrt(-1)
1j

回到未来

Python提供了一个__future__模块,这个模块里提供了Python当前不支持,但未来将成为标准的一些功能,如果你想使用,可以从这个模块中导入。

保存并执行程序

到目前为止,我们都在Python提供的交互式解释器中运行代码,如果你退出交互式解释器,那么你编写的代码将丢失。

如果你想保存你编写的代码,那么选择一个你所了解并擅长的代码编辑器吧,比如:vscode

这部分比较简单也很好理解,就不再赘述。

从命令提示符运行Python脚本

使用你所熟悉的代码编辑器编写完Python代码,并保存为.py结尾的文件,在命令行窗口,进入此文件所在目录,执行python xxx.py,就可以运行此Python脚本。

让脚本像普通程序一样

有时候我们希望运行Python脚本跟运行其他程序一样,比如浏览器或是文本编辑器。在Unix系统中提供了实现这个目的的标准方法:让脚本的第一行以字符序列 #! 开始,并在它后面指定用于对脚本进行解释的程序的绝对路径:

#!/usr/bin/env python

然后给你即将要运行的Python脚本一个可执行权限:

$ chmod a+x xxx.py

现在就可以直接在命令行运行它了:

$ xxx.py

注释

在Python中,我们使用#来作为注释符号,#后面到行尾的所有内容将被忽略。注意:为统一注释风格,一般#和注释内容之间会有一个空格

# 打印圆的周长
print(2 * PI * radius)

字符串

单引号字符串以及对引号转义

与数值一样,字符串也是值:

>>> "hello world"
'hello world'

在定义字符串时,使用单引号和双引号没有任何差别,同时支持两者是因为有时候定义的字符串会相互包含:

>>> "Let's go!"
"Let's go!"

# 如果这里使用单引号就会报错
>>> 'Let's go!'
SyntaxError: invalid syntax

其实在Python中,可以使用\来对引号进行转义,比如上面报错的部分可以这样写:

>>> 'Let\'s go!'
"Let's go!"

拼接字符串

Python中,可以像做加法运算那样,使用+号将两个字符串拼接起来:

>>> "hello " + "world!"
"hello world!"
>>> x = 'hello '
>>> y = 'Python!'
>>> x + y
"hello Python!"

字符串表示str和repr

Python通过strrepr两种不同的机制将值转换成了字符串。

>>> print(repr("Hello,\nworld!"))
'Hello,\nworld!'
>>> print(str("Hello,\nworld!"))
Hello,
world!

长字符串、原始字符串和字节

在Python3.x中,所有的字符串都是Unicode编码的字符串。

长字符串

要表示很长的字符串(跨越多行的字符串),可以使用三引号(不是普通引号)

>>> print('''This is a very long string. It continues here.
And it's not over yet. "Hello world!"
Still here. ''')

This is a very long string. It continues here.
And it's not over yet. "Hello world!"
Still here. 

还可以使用三个双引号,比如:"""Like This""",解释器能够识别表示字符串开始和结束的引号,因此字符串本身可包含单引号和双引号,无需使用反斜杠来转义。

原始字符串

原始字符串不以特殊方式处理反斜杠,在常规字符串中,反斜杠扮演者特殊的角色:它对字符进行转义,能让你在字符串中包含原本无法包含的字符。比如\n表示换行:

>>> print('Hello,\nworld!')
Hello,
world!

但如果我们希望输出的字符串中包含\n呢?比如:

>>> path = 'C:\nowhere'
>>> print(path)
C:
owhere

这样就不对了,不是我们想要的结果,其实我们可以直接对反斜杠进行转义:

>>> print('C:\\nowhere')
C:\nowhere

但如果字符串是很长的,而且包含了很多的需要转义的反斜杠,是不是写起来很繁琐?Python为我们提供了r标识符,来表示这是原始字符串:

print(r'C:\Program Files\fnord\foo\bar\baz\frozz\bozz')
C:\Program Files\fnord\foo\bar\baz\frozz\bozz

原始字符串中可以包含任意字符,但有一个例外,引号是需要被转义的,所以,用于转义的反斜杠会被包含在结果字符串中:

>>> print(r'Let\'s go!')
Let\'s go!

还有就是原始字符串不能以单个反斜杠结尾,除非你对其进行转义,但如果需要以反斜杠结尾,该怎么办呢??下面的例子可以解决这个问题:

>>> print(r'C:\Program Files\foo\bar' '\\')
C:\Program Files\foo\bar\

注意,指定原始字符串时,可使用单引号或双引号将其括起来,还可以使用三引号将其括起来。

Unicode、bytes和bytearray

Python字符串使用Unicode编码来表示文本。

本章节完毕

本系列目录:

kaindy7633 avatar Mar 08 '21 03:03 kaindy7633