2013/6/26
导入模块说明:
1、使用import来导入模块,然后按照“模块.函数”的格式使用这个模块的函数。
如:import math,然后就可以调用math.floor(32.9)
2、在确定自己不会导入多个同名函数(从不同模块导入)的情况下,你可能不希望在每次调用函数的时候,都要写上模块的名字,那么可以使用“from模块import函数”这种形式的import命令之后,就可以直接使用函数,而不需要模块名作为前缀
如:from math import sqrt
sqrt(9)
输出:3.0
模块列表:
可以用as子句为整个模块提供别名。
如:>>>import math as foobar
math:一般的数学计算函数
如:floor、ceil、sqrt
cmath:复数运算(python本身可以提供复数运算,但是python中没有单独的虚数类型,他们被看做实数部分为0的复数)
如:sqrt
函数说明:
通常把python的标准函数称为“内建函数”
事实上,可以使用变量来引用函数,比如:通过foo = math.sqrt进行赋值,然后就可以使用foo来计算平方根:foo(4)的结果为2.0
1、print
print打印多个表达式是可行的,只要将它们用逗号隔开就好。
2、input()/raw_input()
实例:input("input number:")
input会假设用户输入的是合法的python表达式
name = raw_input("what is your name?")
raw_input会把所有的输入当做原始数据,然后将其放入字符串中。
3、pow()
说明:乘方运算函数
实例:pow(2,3) 输出结果是8
4、abs
说明:取绝对值
5、round
说明:把浮点数四舍五入为最接近的整数值
6、floor/ceil(位于模块math中)
说明:向下取整/向上取整
实例:math.floor(32.9)得到的值为浮点数 32.0
7、int函数、long函数、float函数
说明:将目标值转换成整数、长整型、浮点。
如:int(math.floor(32.9)),得到的值为 32
8、sqrt(位于模块math中)
说明:开方
如:math.sqrt(9),输出3.0
9、len(内建函数)
说明:返回序列中所包含元素的数量
10、min()内建函数
说明:返回序列中的最小元素
11、max()内建函数
说明:返回序列中的最大元素
问题:
1、__future__的功能
通过from __future__ import <feature name>的方式调用还为正式合入到python版本中的模块。
如:from __future__ import division
division的新特性就是为整数相除得出更精确的值
2、如何执行程序
IDE中F5
通过命令提示符运行:进入到某个包含Python可执行文件(在Windows中时python.exe,UNIX中时python)的目录,执行python <filename.py>,需要保证filename.py与Python可执行文件在同一个目录。
想普通程序一样运行:
LINUX环境:在脚本首行前面加上#!,在其后加上用于解释脚本的程序的绝对路径(在这里,用于解释代码的程序是python)
如:在首行添加#!/usr/bin/python
文件增加可执行的属性:chmod a+x hello.py
然后运行代码:hello.py或./hello.py
添加绝对路径以后,hello.py可以直接双击运行
Windows环境:需要设置环境变量,尝试了一下,没有成功,呃呃呃
3、值被转换成字符串的两种机制
1)通过str函数,它会把值转换为合理形式的字符串,一边用户可以理解
>>>print str("hello,world!")
hello,world!
2)通过repr函数,它会创建一个字符串,以合法的python表达式的形式来表示值。
>>>print repr("hello,world!")
'hello,world!'
另外还有一种方法将数字转换成字符串,使用反引号,在windows里面尝试了一下没有成功,在linux中可以使用反引号
2013/6/28
1、input与raw_input函数的区别
input函数会假设用户输入的是合法的Python表达式
raw_input函数将所有的输入当做原始数据。
如:
name = input("what is your name?")这里输入的时候需要输入"wangzhiguo",需要带双引号
name = raw_input("what is your name?")输入时,只需要输入wangzhiguo就可以了,不需要带双引号
2、长字符串
使用三个引号代替普通引号,也可以使用三个双引号。
因为这种与众不同的引用方式,你可以在字符串之中同事使用单引号和双引号,而不需要使用反斜线进行转义。
普通字符串也可以使用反斜线跨行,在一行之中最后一个字符用反斜线,换行符本身就“转义”了。
3、原始字符
原始字符串以r开头,可以在原始字符串中放入任何字符,但是最后输出的字符串的最后一个字符不能使反斜线
如:print r'C: owhere' 输出C: owhere
print r"let's go!" 输出:let's go!
print r'C: owhere' '\' 输出:C: owhere
4、ASCII码是以8位存储,而Unicode字符串以16位Unicode字符存储
Unicode字符串使用u前缀,就想原始字符串使用r一样。
序列:
几个概念:
1、Python包含6中内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象
2、Python之中还有一种名为容器(container)的数据结构
容器基本上是包含其他对象的任意对象。
序列(例如列表和元组)和映射(例如字典)是两类主要的容器。另外还有集合(set)。
列表和元组的主要区别在于,列表可以修改,元组则不能。
2013/6/29
序列:
理解这个概念,字符串也算是序列,是一个由字符组成的序列。
序列通用操作:
所有序列类型都可以进行某些特定的操作:索引、分片、加、乘以及检查某个元素是否属于序列的成员,另外还有计算序列长度、找出最大元素和最小元素的内建函数。
1、索引
序列还可以使用负数进行索引。
操作:
a、字符串字面值也能够直接使用索引。如:>>>‘Hello’[0],输出为'e'
b、如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。
如:>>>fourth = raw_input('Year: ')[3]
Year: 2005
>>>fourth
'5'
2、分片
分片操作:用来访问一定范围内的元素,分片通过冒号相隔的两个索引来实现。
编号说明:第一个索引是需要提取部分的第一个元素的编号,而最后的索引则是分片之后剩下部分的第一个元素的编号。
简而言之,第一个索引的元素是包含在分片内的,而第二个则不包含在分片内。
如:>>>tag = '<a href="http://www.python.org">python web site</a>'
>>>tag[9:30]
'http://www.python.org'
>>>tag[32:-4]
'python web sit'
操作捷径:
使用空索引:如:>>>tag[:3]
'<a '
>>>tag[3:]
'href="http://www.python.org">python web site</a>'
>>>tag[:]
'<a href="http://www.python.org">python web site</a>'
步长:
步长通常都是银实设置,默认是1,在分片的时候,可以指定步长
如:>>>number = [1,2,3,4,5,6,7,8,9,10]
>>>number[0:10:2] #指定步长为2
1,3,5,7,9
步长有正负之分:
正数步长,会从序列的头部开始向右提取元素,直到最后一个元素
负数步长,会从序列的尾部开始向左提取元素,直到第一个元素
2013/6/30
除法操作说明:‘/’
1、实数在Python中被称为浮点数,如果参与除法的两个数中有一个数为浮点数,结果也是浮点数
2、也可以使用from __future__ import division语句执行普通的除法
3、‘//’用于实现整除的操作。
序列:
1、成员资格(运算符in)
运算符in用来检查某个条件是否为真。
如:>>>permissions = 'rw'
>>>'w' in permissions
True
>>>'x' in permissions
False
2、内建函数len、min和max
分别返回序列中所包含元素的数量,最小元素和最大元素
列表:
说明:列表不同于元组和字符串的地方:列表时可变的。
1、list函数
因为字符串不能像列表意向被修改,所以有时候根据字符串创建列表会很有用。
如:>>>list('Hello')
['H', 'e', 'l', 'l', '0']
list函数使用与所有类型的序列,而不只是字符串。
2、列表的操作
列表可以使用所有适用于序列的标准操作,如:索引、分片、连接和乘法。另外还有一些可以改变列表的方法:元素赋值、元素删除、分片赋值以及列表方法。
a、改变列表:元素赋值
使用索引标记来为某个特定的、位置明确的元素赋值
如>>>x = [1,1,1]
>>>x[1] = 2
>>>x
[1,2,1]
b、删除元素
del语句实现
如>>>x = [1,2,1]
>>>del x[1]
>>>x
[1,1]
c、分片赋值
实际上与分片取值类似
3、列表方法
a、append
b、count
c、extend
d、index
e、insert
f、pop
g、remove
h、reverse
i、sort
4、列表的复制
如:>>>y = [1,2,3]
>>>x = y
>>>x
[1,2,3]
实际上这里x和y指向的是同一个列表
正确的复制方法
>>>y = [1,2,3]
>>>x = y[:]
>>>x
[1,2,3]
将y所有元素的分片复制给x
元组:不可变序列
1、创建元组
如果用逗号分隔了一些值,那么就自动创建了元组。
>>>1,2,3,5
(1,2,3,5)
元组也是(大部分时候是)通过圆括号括起来
2、创建元组的函数:tuple函数
tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换为元组。
3、元组操作
a、创建元组
b、访问元组
使用字符串
字符串是不可变的。
1、字符串操作
索引、分片、乘法、判断成员资格、求长度、取最小值和最大值。
2、字符串格式化
字符串格式化操作符:%
a、%字符:标记转换说明符的开始
b、转换标志:-表示左对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示整数之前保留空格;0表示转换值若位数不够则用0填充;
c、最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。
如果是*,则宽度会从值元组中读出。
d、点(.)后跟精度值:如果是*,那么精度将会从元组中读出。
e、转换类型:见表3-1
3、字符串方法
a、find:在一个较长的字符串中查找子字符串。
返回值:返回子串所在位置的最左端索引,如果没找到则返回-1
in操作符只能用来查找字符串中的单个字符。
find还可以接受可选的起始点和结束点参数:subject.find('!!!', 0, 16)
b、join:用来在队列中添加元素,可以说是将队列元素连接起来。
需要添加的队列元素都必须是字符串。
c、lower:返回字符串的小写字母版
d、replace:返回某字符串的所有匹配项均被替换之后得到的字符串。
e、split:join的逆方法,将字符串分割成序列。
f、strip:返回去除两侧(不包括内部)空格的字符串
g、translate:与replace不同,该方法只处理单个字符。
在使用translate转换执勤啊,需要先完成一张转换表,转换表中时以某字符替换某字符的对应关系。
可以使用string模块里面的maketrans函数就行
maketrans函数:接受两个参数,两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换。
字典
字典是Python中唯一内建的映射类型。
1、创建和使用字典
phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict函数。如:>>>items = [('name','wangzg'),('age','27')]
>>>d = dict(items)
>>>d
{'age':'27','name':'wangzg'}
>>>d['name']
'wangzg'
2、基本字典操作
len(d)返回d中项的数量;
d[k]返回关联到键k上的值;
d[k] = v将值v关联到键k上;
del d[k]删除键为k的项;
k in d检查d中是否有含有键为k的项
增加字典中的键:>>>d = {}
>>>d['name'] = 'wangzg'
>>>d
{'name':'wangzg'}
3、字典的方法
clear
copy
fromkeys
get
has_key
items和iteritems
keys和iterkeys
pop
popitem
setdefault
update
values和itervalues
2013/7/3
1、序列解包
如:>>>x,y,z = 1,2,3
>>>print x,y,z
1 2 3
>>>values = 1,2,3
>>>values
(1, 2, 3)
>>>x,y,z = values
>>>x
1
2、链式赋值
3、增量赋值
4、语句块:缩排的乐趣
Python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的。当退回到和已经闭合的块一样的缩进量时,就表示当前语句块已经结束了。
5、条件和条件语句
1)布尔变量的作用
下面的值作为布尔表达式的时候,会被解释器看做假(false)
False None 0 "" () [] {}
标准的真值为True和False,如果某个逻辑表达式返回1或者0,那么它实际的意思是返回True和False
布尔值True和False属于布尔类型,bool函数可以用来转换其他值。
2)is:同一性运算符
is运算符是判定同一性而不是相等性。
6、一些迭代工具
1)并行迭代
内建的zip函数可以用来进行并行迭代,可以把两个序列“压缩”在一起,然后返回一个元组的列表:
>>>name = ['a', 'b', 'c']
>>>ages = [12,13,15]
>>>zip(name,ages)
[('a',12), ('b',13), ('c',15)]
zip函数可以作用于任意多的序列,很重要的一点是zip可以应付不等长的序列,当最短的序列“用完”的时候就会停止。
2)编号迭代
内建函数enumerate:
for index, string in enumerate(strings):
if 'xxx' in string:
string[index] = '[censored]'
这个函数可以在提供索引的地方迭代索引-值对。
3)翻转和排序迭代
reversed和sorted
7、循环中的else子句
循环中增加一个else子句,它仅在没有调用break时执行。
8、列表推导式——轻量级循环
如:>>>[x*x for x in range(10) if x % 3 == 0]
[0, 9, 36, 81]
9、pass
有时候,程序什么事情都不用做,可以使用pass来占位,以便以后增加代码。
10、del
del不仅会溢出一个对象的引用,也会移除那个名字本身。
如:>>>x = 1
>>>del x
此时x不存在了,但是1还是存在,不过会被python解释器回收,而不是被del删掉。
11、exec和eval
1)exec
>>>from math import sqrt
>>>scopt = {}
>>>exec 'sqrt = 1' in scope
>>>sqrt(4)
2.0
>>>scope['sqrt']
1
通过增加in<scope>来创建一个命名空间,将exec的代码放到这个命名空间中
从上面可以看到,潜在的破坏性代码并不会覆盖sqrt函数,原来的函数能正常工作,而通过exec赋值的变量sqrt只在他的作用域内有效。
概念:命名空间,或称为作用域,类似于不可见的字典。
2)eval
eval语句会计算python表达式(以字符串形式书写),并且返回结果值。
如:>>>eval(6 + 18 * 2)
42
与exec一样,eval也可以使用命名空间。
2013/7/7
函数:
1、函数式可以调用(可能包含参数,也就是放在圆括号中的值),它执行某种行为并且返回一个值,或者没有返回值。
2、函数的定义:
1)使用def语句即可:
def hello(name):
return 'hello, ' + name +'!'
2)记录函数
如果想要给函数写文档,让使用该函数人能理解的话,可以加入注释(以#开头)。
还有另外一种方法:
在def语句后面写上字符串。
如:
def square(x):
'Calculates the square of the number x.'
return x*x
可以按如下方式访问:
>>>square.__doc__
'Calculates the square of the number x.'
3、参数
1)位置参数
2)关键字参数和默认值
3)收集参数
可以让用户提供任意数量的参数
定义方式,是在形式参数的前面加一个*号
另外还有一种能处理关键字参数的方式,使用**号
4、反转过程
def add(x, y): return x+y
params = (1, 2)
add(*params)
结果为3
5、作用域
6、递归