第一章 基础知识
1.1安装Python
略过
1.2 交互式解释器
1.3 算法是什么
告诉计算机做什么事,详述如何做某事
1.4 数字和表达式
1):除法
>>> 1/2
0
因为只留整数部分;而有浮点数参与的除法,结果为浮点数,不会取整。
>>> 1.0/2
0.5
如果希望Python只执行普通除法,可在程序前加或直接在解释器里执行它:
>>> from __future__ import division
也可使用命令开关-Qnew,此时:
>>> 1/2
0.5
此时实现整除的操作符为:双斜线
>>> 1//2
0
即使是浮点数,也会执行整除:
>>> 1.0/2.0
0.0
2): 取余运算符
>>> 2.75%0.5
0.25
3):幂运算符
>>> -3**2
-9
幂运算符优先级高于取反运算符
1.4.1 长整形数
需处理非常大的数(2 147 483 647和 -2 147 483 648之外),可用长整形数:普通数结尾加L
>>> 100000000000
100000000000L
1.4.2 十六进制八进制
十六进制如下写(
0x是十六进制数前要加的,以此来识别它):
>>>0xAF
175
八进制如下写(
0是八进制识别的前缀):
>>> 010
8
1.5 变量(variable)
变量代表或引用某值的名字
>>> x = 3 #赋值操作
>>> x*2
6
变量名可包括字母、数字和下划线。变量不能以数字开头
1.6 语句
语句是做某事,而不是表达式代表的某事
print语句和赋值语句
1.7 获取用户输入:input和raw_input
>>> x = input("x: ")
x: 34
>>> y = input("y: ")
y: 42
>>> print x* y
1428
1.8 函数
内建函数,很多模块中也有函数
pow:乘方函数
>>> pow(2,3)
8
abs:绝对值函数;round: 把浮点数四舍五入为最接近的整数值
>>> abs(-10)
10
>>> round(1.0/2.0)
1.0
能将输入数转化为其他类型——int: 取整数函数,将浮点数抓化为整数;还有long和float函数等 这些是类型对象
>>> int(32.9)
32
1.9 模块: 导入到Python以增强其功能的扩展
需要特殊命令import导入模块
>>> import math
>>> math.floor(32.9)
32.0
floor为math模块中的向下取整的函数,结果为浮点数
ceil为向上取整函数
>>> from math import sqrt
>>> sqrt(9)
3.0
使用这种形式后每次使用函数不需要加模块名前缀
其实可使用变量引用函数(或Python中大大多数对象)
>>> foo = math.sqrt
>>> foo(4)
2.0
1.9.1 cmath (complex math)和负数
cmath 可以处理负数(实数和虚数之和)
>>> import cmath
>>> cmath.sqrt(-1)
1j
虚数均以j结尾
>>> (1 + 3j) * (9 + 4j)
(-3 + 31j)
1.9.2 回到 __future__
略过
1.10 保存并执行程序
文本编辑器中编辑,并保存在以后找的到的位置,给自己的程序文件起有意义的名字
然后就可以通过运行按钮来运行你的文件了
1.10.1 通过命令提示符运行Python脚本
windows中使用以下命令执行脚本:
C:\>python hello.py
UNIX下:
$ python hello.py
也可直接指定Python解释器的完整路径。windows中,可通过以下命令实现:
C:\>c:\Python25\python hello.py
1.10.2 让脚本像普通程序一样运行
不需要显示使用Python解释器来运行程序,就像运行qq,浏览器一样
UNIX中标准实现方法:在脚本前加上#! 即在脚本的首行加上:
#!/usr\bin\env python
windows下直接双击扩展名.py的文件。注意程序执行完会立即关闭的情况,你可能没时间看结果
1.10.3 注释 :符号#
#在python中会使其右边的一切被忽略。
# 打印圆的周长
print 2 * pi * radius
此处第一行为注释,程序员第一规则:要注释
注释要确保说的都是重点,不要重复代码中显而易见的内容。
1.11 字符串
最主要的用法就是表示一些文本。
“Hello,world!”就是字符串
1.11.1 单引号字符串和转义引号
字符串是值,就像数字一样。
字符串被双引号或单引号括起来都可以。事实上两者没啥区别。
但是有些时候需要同时使用两者:
>>> "Let's go!"
"Let's go!"
>>> ' "Hello world!" she said'
' "Hello world!" she said'
也可以使用
反斜线对字符串中的引号转义:
>>> 'Let\'s go!'
"Let's go!"
反斜杠转义十分有用,有时甚至是必须的:
‘Let\'s say "Hello, world!"'
1.11.2 拼接字符串
>>> "Hello," + "world!"
'Hello, world!'
>>> x = "Hello, "
>>> y = "world!"
>>> x + y
'Hello, world!'
1.11.3 字符串表示,str和repr
>>> print "Hello, world!"
Hello, world!
>>> print 10000L
10000
print语句会改变打印值在Python代码中的状态,而直接在解释器中操作会保持其状态。
而当你在使用print语句时想知道其状态就可以使用
repr函数:
>>> print repr("Hello, world!")
'Hello, world!'
>>> print repr(10000L)
10000L
`x`,反引号也可实现repr的功能
repr和``的功能相当于在原来基础上多加了一层引号(单引号或双引号),而print语句相当于去除一层引号。。。。
而函数str()则是把内容转为只含一层引号的字符串
总之,str、repr和``是将Python值转化为字符串的三种方法,str让字符串更易阅读,而repr和反引号把结果字符串转换为合法的Python表达式
1.11.4 input 和 raw_input 的比较
>>> name = input ("What is your name? ")
print "Hello, " + name + "!"
运行程序
What is your name? Gumby
接下来就会报错,NameError: name 'Gumby' is not defined
这是因为input会假设用户输入的是合法的Python表达式
如果以字符串输入名字程序就没问题
What is your name? 'Gumby'
Hello, Gumby!
而raw_input函数会把所有的输入当做原始数据(raw data),然后将其放进字符串中:
raw_input("Enter a number: ")
Enter a number: 3
'3'
所以除非特殊需要,否则应尽可能用raw_input函数
1.11.5 长字符串、原始字符串和Unicode
1. 长字符串
若要写一个非常长的字符串,需跨多行,可使用三个引号代替普通引号。
print ''' This is a very long string.
It continues here.
And it's not over yet.
"Hello, world!"
Still here.'''
打印出来的结果也是分为五行,和代码中一致
也可以使用三个双引号。
普通字符串也可以跨行。若一行最后一个字符是反斜线,那么说明换行符本身就转义了,也就是被忽略了。
>>>print "Hello,\
world!"
Hello, world!
2. 原始字符串
原始字符串对于反斜杠的使用不会过分挑剔。
普通字符串中,反斜杠有特殊作用:会转义,可在字符串中加入通常情况下不能直接加入的内容。如,换行符\n
>>> print 'Hello, \nworld!'
Hello,
world!
但是有时需要字符串包含\n怎么办?例如,DOS路径“C:\nowhere”这样的字符串:
可以使用反斜杠对其自身转义,但是对于长路径来说可能要包含很多反斜线。。。。
在此情况下,原始字符串就派上用场了。原始字符串不会把反斜杠当做特殊字符。原始字符串中输入的每一个字符都会和书写的方式保持一致:
>>> print r'C:\nowhere'
C:\nowhere
原始字符串以r开头,基本可在其中放入任何字符。也可对引号转义,但是最后输出的字符串会包含转义所用的反斜线:
>>> print r'Let\'s go!'
Let\'s go
不能再原始字符串的末尾输入反斜线,即原始字符串的最后一个字符不能是反斜线(因为此时Python不清楚是否该结束字符串),除非对反斜线转义
>>>print r'Let\'s go!\\'
Let\'s go!\\
若想最后一位打印时是反斜杠,需将反斜杠作为一个单独的字符串来处理:
>>> print r'C:\Program Files\foo\bar' '\\'
C:\Program Files\foo\bar\
原始字符串中可同时使用单双引号,即使三引号字符串也可充当原始字符串。
3. Unicode字符串:字符串常量的最后一种类型
Python中普通的字符串在内部是以八位的ASCII码形式储存的,而Unicode字符串则存储为16位的Unicode字符串。以u为前缀,例子:
>>> u'Hello, world!'
u'Hello, world!'
1.12 小结
1. 算法。描述如何完成一项任务的方法。程序就是计算机能理解的算法,其包含表达式和语句。
2. 表达式。计算机程序的组成部分,用于表示值。表达式通过运算符和函数对字面值处理而构建起来,简单表达式可联合为复杂表达式,表达式可包含变量。
3. 变量。 是一个名字,表示值。赋值语句。
4. 语句。告诉计算机做某些指令。可能涉及改变变量(通过赋值),向屏幕打印东西、导入模块或其他大量复杂操作。
5. 函数。Python中的函数就像数学中的函数:可带有参数并返回值。
6. 模块。是扩展,可导入到Python中,从而扩展Python功能。如math模块提供很多有用数学函数。
7. 程序。编写、保存和运行
8. 字符串。几段文本。
1.12.1 本章新函数
abs(number)--返回数的绝对值
cmath.sqrt(number)--返回平方根,可用于负数
float(object)--
将字符串和数字转换为浮点数
help()--提供交互式帮助
input(prompt)--获取用户输入
int(object)--将字符串和数字转为整数
long(object)--将字符串和数字转为长整型数
math.ceil(number)--返回数的上入整数,返回数类型为浮点数
math.floor(number)--返回数的下舍整数,返回值类型为浮点数
math.sqrt(number)--返回平方根,负数不适用
pow(x, y[ ,z])--返回x的y次幂(所得结果对z取模)
raw_input(prompt)--获取用户输入,返回类型为字符串
repr(object)--返回值的字符串表示形式
round(number[, ndigits])--根据给定的精度对数字进行四舍五入
str(object)--将值转换为字符串