Python学习笔记1

作者: 生命科学  发布:2019-11-02

这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考。文中偏见和不足难以避免,仅供参考,欢迎批评指正。

本系列笔记主要参考文献是官网文档:http://docs.python.org/。在此向文档编辑者致谢。请勿将本文用于商业用途。

3. An Informal Introduction to Python

在以下示例中,输入和输出以提示符(>>>...)的出现和消失来标注:如果想要重现示例,提示符出现时,必须输入提示符之后的所有内容。不以提示符开头的行是解释器的输出。需要注意的是示例中行内从属提示符意味着必须多输入一个空行,用来终止多行命令。

手册中的许多示例,包括以交互提示符输入的,都包含注释。Python的注释以#字符开头,直至物理行尾结束。注释可以出现在行首,或者跟在空白符或代码后面,但是不能出现在字符串中。字符串中的#字符仅仅是#字符。由于注释是用来阐述代码的,并不被Python所解释,重写示例时可以忽略它们。

一些示例:

# this is the first comment
spam = 1  # and this is the second comment
          # ... and now a third!
text = "# This is not a comment because it's inside quotes."

 一、Python语言介绍

首先,Python是一种广泛应用的通用高级编程语言,具有较高的抽象层次,支持面向对象的编程方法。其具有高级的数据结构和许多方便的库文件,可以完成文件IO、系统调用、网络编程,甚至有GUI库。Python具有较高的可读性,相对其他程序设计语言(C,C++,Java)来说,可以提高开发效率。然而,作为一种解释型语言(interpreted language),Python在运行效率中的优势并不明显。所以人们经常使用Python完成简单的、高层次的任务,在大型开发中常作为“胶水语言”连接各模块。

Python在Windows和Linux系列操作系统上均可运行。一些版本的Linux中自带了Python程序,其二进制版本也可在其官网上下载:。(本系列文章叙述的Python使用的版本为3.4.3)

 

3.1 Using Python as a Calculator

尝试一些简单的Python命令。启动解释器并等待主提示符>>>出现。(不会等待太久)

二、使用Python解释器

在控制台中输入命令“python3.4”(或“python”)运行Python的解释器,控制台中打印出Python的版本信息,并给出提示符>>>

1 $ python3.4
2 Python 3.4 (default, Mar 16 2014, 09:25:04)
3 [GCC 4.8.2] on linux
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>>

Python的提示符“>>>”后可输入一条语句,按下回车键执行该语句。如果解释器需要多条语句,它会给出“...”提示符,提示输入后续语句。

Python中的变量不需声明(甚至不需指明类型)即可直接使用。在这里输入语句:

>>>a=1
>>>

即定义了a这个变量。这次输入表达式a,即可显示a的数值:

>>> a
1
>>>

 

3.1.1 Numbers

解释器可以作为简单计算器使用:在解释器中输入表达式,解释器会输出值。表达式语法很简单:操作符+, - * /跟其他语言意义一样(如C跟Pascal);括号(())用于分组。例如:

>>> 2 + 2
4
>>> 50 - 5*6
20
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5  # division always returns a floating point number
1.6

整数(如2, 4, 20)类型是int,带有小数的数(如5.0, 1.6)类型是float。后面会有更多关于数字类型的介绍。

除(/)总是返回浮点数。操作符//是向下取整除法,返回一个整数结果(舍弃小数部分结果),操作符%用于求余数:

>>> 17 / 3  # classic division returns a float
5.666666666666667
>>>
>>> 17 // 3  # floor division discards the fractional part
5
>>> 17 % 3  # the % operator returns the remainder of the division
2
>>> 5 * 3 + 2  # result * divisor + remainder
17

Python中可以使用操作符**计算幂[[1]](http://www.cnblogs.com/crazyrunning/p/7210501.html#jump1)

>>> 5 ** 2  # 5 squared
25
>>> 2 ** 7  # 2 to the power of 7
128

等号(=)用于将值赋给变量。赋值操作之后,在下一个交互提示符之前不会有任何输出:

>>> width = 20
>>> height = 5 * 9
>>> width * height
900

如果变量没有定义(没有被赋值),尝试使用会得到一个错误:

>>> n  # try to access an undefined variable
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

Python提供了浮点数的完整支持;在复合类型操作中,整型会被提升为浮点型:

>>> 4 * 3.75 - 1
14.0

交互模式中,最后打印的表达式会被赋值给变量_。意味着Python作为桌面计算器使用时,易于连续计算。例如:

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06

该变量对于用户应该被当做只读的。不要对其显式赋值——否则将会创建同名的独立局部变量,该变量屏蔽内建变量的魔法效果。

intfloat之外,Python也支持其他数字类型,比如DecimalFraction。Python也有对复数(complex numbers)的内建支持,使用j或者J标识复数的虚部(如3+5j)。

三、表达式计算

在这里,可以尝试使用Python来作为计算器,进行一些简单的数值运算。

运算符 解释 C中类似的表达 示例

a+b

a-b

a*b

a/b

加减乘除,除法为浮点除法

a+b

a-b

a*b

a/b

>>> a/3
0.3333333333333333
>>> 2.3+6.9
9.2
>>>

 

a//b

a%b

整除,返回整数除法

取模,返回a/b的余数

a/b
>>> 1//3
0
>>> 50//3
16
>>>

 

 a**b  幂运算  pow(a,b)  
>>> 2**0.5
1.4142135623730951
>>> (-1)**0.5
(6.123233995736766e-17+1j)
>>> _**2
(-1+1.2246467991473532e-16j)
>>> 2**100
1267650600228229401496703205376
>>>1j**1j
(0.20787957635076193+0j)
>>>

其中,下划线_代表之前的运算结果,(a+bj)代表复数(a+bi)。

 ( )  括号,同C语言  ( )  

 

3.1.2 Strings

除了数字,Python也提供了多种表示字符串的方式。字符串可以使用单引号('...')或者双引号(“...”)围起来,效果是一样的[[2]](http://www.cnblogs.com/crazyrunning/p/7210501.html#jump2)用于转义:

>>> 'spam eggs'  # single quotes
'spam eggs'
>>> 'doesn't'  # use ' to escape the single quote...
"doesn't"
>>> "doesn't"  # ...or use double quotes instead
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> ""Yes," he said."
'"Yes," he said.'
>>> '"Isn't," she said.'
'"Isn't," she said.'

交互式解释器中,输出字符串被引号包围,特俗字符使用反斜杠转义。虽然字符串在输入时可能看起来不一样(包围字符串的引号可以不同),但是两种形式的字符串是相等的。当字符串包含单引号并且不包含双引号时,可以使用双引号包围,反之则使用单引号。print()函数会省略外围引号,打印转义字符和特殊字符,使得输出更加可读:

>>> '"Isn't," she said.'
'"Isn't," she said.'
>>> print('"Isn't," she said.')
"Isn't," she said.
>>> s = 'First line.nSecond line.'  # n means newline
>>> s  # without print(), n is included in the output
'First line.nSecond line.'
>>> print(s)  # with print(), n produces a new line
First line.
Second line.

如果不希望以开头的字符被解释为转义字符,可以使用原生字符串,在第一个引号前加r即可:

>>> print('C:somename')  # here n means newline!
C:some
ame
>>> print(r'C:somename')  # note the r before the quote
C:somename

字符串字面常量可以跨越多行。方式之一是使用多行引用:"""..."""或者'''...'''。换行符会自动包括到字符串中,但是可以在行末添加阻止其发生。如下示例:

print("""
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")

产生如下输出(注意首行并没有包括在内):

Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to

字符串可以使用操作符+串联起来,使用操作符*使其重复:

>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'

两个或者更多相邻的字符串字面常量会自动拼接起来:

>>> 'Py' 'thon'
'Python'

以上只对只有字符串字面常量有效,对变量或者表达式无效:

>>> prefix = 'Py'
>>> prefix 'thon'  # can't concatenate a variable and a string literal
  ...
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
  ...
SyntaxError: invalid syntax

如果希望拼接变量或者变量以及字面常量,使用+:

>>> prefix + 'thon'
'Python'

如果希望分割长字符串,这个功能特别有用:

>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

字符串支持索引操作,第一个字符串索引为0。Python中没有单独的字符类型;一个字符仅仅是长度为1的字符串:

>>> word = 'Python'
>>> word[0]  # character in position 0
'P'
>>> word[5]  # character in position 5
'n'

从右计数时,索引也可以是负数:

>>> word[-1]  # last character
'n'
>>> word[-2]  # second-last character
'o'
>>> word[-6]
'P'

注意由于-0与0相同,所以负数索引从-1开始。

除了索引,字符串也支持切片。使用索引获得个别字符,使用切片获取字符子串:

>>> word[0:2]  # characters from position 0 (included) to 2 (excluded)
'Py'
>>> word[2:5]  # characters from position 2 (included) to 5 (excluded)
'tho'

注意切片操作的返回值包含起始索引,不包含结束索引。使得s[:i] + s[:i]总是等于s

>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'

切片操作指定了非常有用的默认值;省略第一个索引默认为0,省略第二个索引默认当前切片字符串长度。

>>> word[:2]   # character from the beginning to position 2 (excluded)
'Py'
>>> word[4:]   # characters from position 4 (included) to the end
'on'
>>> word[-2:]  # characters from the second-last (included) to the end
'on'

一种记住切片工作方式的方法是:把索引当做字符之间的指向,左边第一个字符的边编号0。长度为n的字符串最后一个字符的右边索引为n

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

第一行数据给出了字符串索引0...6的位置;第二行数字给出了其对应负索引。从ij的切片包含边i和边j之间所有的字符。

对于非负索引,如果两个索引都在界限内,切片长度是索引之差。例如,word[1:3]的长度为2.

使用超过界限的索引会抛出异常:

>>> word[42]  # the word only has 6 characters
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

然而,切片操作时超出界限的切片索引会被优雅处理:

>>> word[4:42]
'on'
>>> word[42:]
''

Python字符串不能被改变——他们是不可变的。因此,企图对字符串索引位置赋值会抛出异常:

>>> word[0] = 'J'
  ...
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
  ...
TypeError: 'str' object does not support item assignment

如果需要不同的字符串,应该新建一个:

>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'

built-in函数len()返回字符串长度:

>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

参见:
Text Sequence Type — str
字符串是序列的一种,支持序列所支持的一般操作。
String Methods
字符串支持大量基础转换和搜索的方法
Formatted string literals
字符串字面常量拥有嵌入式表达式
Format String Syntax
使用str.format()格式化字符串的相关信息
printf-style String Formatting
详细描述了使用%格式化字符串的旧字符串格式化操作

本文由金沙澳门官网发布于生命科学,转载请注明出处:Python学习笔记1

关键词: