python学习之基础篇二

来源:互联网 发布:戴尔xps13 9360 知乎 编辑:程序博客网 时间:2024/06/01 10:09
二、内建对象类型
1. Number数值型
在python中,数值有四种类型:整型、长整形、浮点型和复数。
整型---从-2147483648至2147483647,有符号位32位长,最大数为2^31-1。数字前加0x或0X前缀表十六进制,加前缀0表示八进制,与C/C++、perl一样。

为方便,sys模块包含一个maxint成员,该成员保留了整形变量的最大正数值。
>>> import sys
>>> print sys.maxint
2147483647
长整型---python支持任意长度的长整型,长整型的最大值和最小值由可用的内存确定。长整型数在数字常量尾加L or l,一般都是用L,小写l容易与数字1混淆。
如:long=1232132131231232132132131L。


浮点数---python支持普通十进制和科学计数法表示的浮点数。如:number=123.456,nubmer1=123.2E10。浮点数在python中的存储格式与C中的双精度数相同。


复数---复数的实部和虚部用加号分开,虚部使用后缀j表示,如:number=1.2+2j

2.字符串
字符串在python被看成是单个字符的序列,具有序列对象的特殊功能,字符串是固定的,不可变的。如:string="hello world"。


可在字符串中使用单引号和双引号。如:string="I'm a boy"。


字符串内部的一个反斜杠“\”可允许把字符串放于多行:如:
>>> "test \
... python"
'test python'
使用三个单引号或双引号可使字符串跨行显示。如:
helptext="""this a help test.if you have any quesions.
please call me anytime.I will help you.I
like python.I hope so as you."""
“+”号连接字符串。如:string = "hello" + "world",注意:不能将字符串与其它对象进行连接。如string = "ok" + 5。也可以直接用空格可连接字符串。


可用“*”号重复字符串,如:'hello'*5会生成'hellohellohellohellohello'。


可用索引访问字符串中的字符。如:string="hello world",print string[1]将显示字符e。


字符串可用in或not in运算符来测试字符是不属于一个字符串的成员。


可对字符串分片,如string="hello world",print string[6:]将显示world。分片的格式为:
string[start:end]
分片和索引的规则如下:
返回字符串包从start开始到end但不包括end,第一位索引是0。
若指定了start 未指定end,则一直向后分片,直至字符串结束。
若指定了end 未指定start,则从0开始分片直至end,但不包括end指定的字符。
若start和end为负数,则索引从字符串尾部开始算起,最后一个字符为-1。
python提供了一个string模块来进行字符串处理。
a="hello world"  
b=a[3:8]   # b="lo wo"
c=a[:5] # c="hello" 省略开始值默认从头
d=a[6:] # d="world" 省略结束值默认到尾


str(),repr(),format()可将非字符形式转换为字符形式。
replace(string,old,new[,maxsplit]) 字符串的替换,old替换成new。有maxsplit,控制替换的个数,若maxsplit为1,只替换第一个。
capitalize(string) 把字符串的首个字符替换成大字。
split(string,sep=None,maxsplit=-1) 从string字符串中返回一个列表,以sep的值为分界符。
join(string[,sep]) 返回用sep连接的字串,默认的sep是空格。


3.字符串格式化
类似C中的sprintf函数一样,可以用“%”来格式化字符串。
格式 描述
%% 百分号标记
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中

%格式化符也可用于字典,可用%(name)引用字典中的元素进行格式化输出。
负号指时数字应该是左对齐的,“0”告诉Python用前导0填充数字,正号指时数字总是显示它的正负(+,-)符号,即使数字是正数也不例外。
可指定最小的字段宽度,如:"%5d" % 2。也可用句点符指定附加的精度,如:"%.3d" % 3。

4.转义字符
转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数yy代表的字符,例如:\o12代表换行
\xyy 十进制数yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出


5.Unicode转换
python2.0中才完全支持Unicode字符串,Unicode字符采用16位(0---65535)值表示,能进行多语言支持。要使用Unicode字符串,只要在字符串前加上“u”即可。如:
>>> a=u"test"
>>> print a
test
原始Unicode字符串用ur前缀,如:
>>> u'hello world\0020' 
u'hello world\x020'
>>> ur'hello world\0020'
u'hello world\\0020'


只要和Unicode连接,就会产生Unicode字串。如:
>>> 'help'
'help'
>>> 'help,' + u'python'     
u'help,python'
对于ASCII(7位)兼容的字串,可和内置的str()函数把Unicode字串转换成ASCII字串。如:
>>> str(u'hello world')
'hello world'

转换非ASCII兼容的字串会出错。编码和译码字符串时的错误引发UnicodeError异常。

可使用encode()函数转换Unicode字串格式:
u'unicode\xb1\xe0\xc2\xeb\xb2\xe2\xca\xd4'
>>> a.encode('utf-8')  # 转换成utf-8,显示结果会根据终端的字符集支持不同而不同,下面是在GB18030下的显示结果
'unicode\xc2\xb1\xc3\xa0\xc3\x82\xc3\xab\xc2\xb2\xc3\xa2\xc3\x8a\xc3\x94'   

可使用unicode()函数把字符串转换成unicode格式,如:
>>> a=u'unicode测试'
>>> a
u'unicode\xb2\xe2\xca\xd4'
>>> a.encode('utf-8')     # 把unicode字串转换成utf-8
'unicode\xc2\xb2\xc3\xa2\xc3\x8a\xc3\x94'
>>> b=a.encode('utf-8')   # 给变量b赋值
>>> b
'unicode\xc2\xb2\xc3\xa2\xc3\x8a\xc3\x94'
>>>unicode(b,'utf-8')           # 用unicode()函数把utf-8格式字串转换回unicode格式。
u'unicode\xb2\xe2\xca\xd4'      # 和原始的这是a相同  

ord()支持unicode,可显示特定字符的unicode号码,如:
>>>ord('A')
65

使用unichr()函数可将unicode号码转换回unicode字符,如:
>>> unichr(65)
u'A'
                        


6.原始字符串
如果不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如:
print r'\t\r'
输出结果是 \t\r

7.列表(List)与元组(Tuple)
列表与元组区别:
a.列表可修改,元组不可以
b.列表用[],元主组用()

列表可包含任意Python数据类型,数字、列表、元组等。可对列表中的数据进行增、改、删等操作。可以通过list(seq)函数把一个序列类型转换成列表。
列表例:
list = [ "a", "b", "c" ]
list = [ 1,2,3,4,["a","b","c"] ]

list((1,2))把一个元组转换成一个列表[1,2]
list('test')可把字符串转换成['t','e','s','t']列表


索引:索引和数组一样从0开始。

创建空列表:names=[]  or  names=list()

赋值,如:list[0] = 22。

分片,类似字符串。

range()和xrange()函数可自动生成列表,range(1,10):[1,2,3,4...10]


通过列表综合来创建列表。对列表中的每一项进行运算并把结果存在新列表中,可以创建一个仅包含特定满足某种条件的项。如:[x*x for x in range(1,10)]会得到一个X的平方的新列表;

也可if条件控制输出,如:
[x*x for x in range(1,10) if x%2==0]
>>> [4, 16, 36, 64]

还可在列表中使用多个for语句,如:
>>> [x+y for x in "123" for y in "abc"]
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']

+号可连接两个列表。[1,2,3]+[4,5]=[1,2,3,4,5]


数字与列表相乘可以复制内容,如:list*2 >>>[1,2,3,4,1,2,3,4] 。注意,不能用列表与列表相乘。


方法 描述
append(x) 在列表尾部追加单个对象x。使用多个参数会引起异常。
count(x) 返回对象x在列表中出现的次数。
extend(L) 将列表L中的表项添加到列表中。返回None。
Index(x) 返回列表中匹配对象x的第一个列表项的索引。无匹配元素时产生异常。
insert(i,x) 在索引为i的元素前插入对象x。如list.insert(0,x)在第一项前插入对象。返回None。
pop(x) 删除列表中索引为x的表项,并返回该表项的值。若未指定索引,pop返回列表最后一项。
remove(x) 删除列表中匹配对象x的第一个元素。匹配元素时产生异常。返回None。
reverse() 颠倒列表元素的顺序。
sort() 对列表排序,返回none。bisect模块可用于排序列表项的添加和删除。




Tuple(元组)不可变。不能添加,修改和删除操作。如果需修改元组内容只有重建元组。


tuple=(1,),这是单个元素的元组表示,必须有逗号,即便只有一个值。


tuple=1,2,3,4,也是一个元组,不使用圆括号而不会导致混淆时,Python允许不使用圆括号。


和列表一样,可对元组进行索引、分片、连接和重复。也可用len()求元组长度。


元组的索引用tuple[i]的形式,而不是tuple(i)。



8.序列
字符串、列表和元组的对象类型均属于称为序列的Python对象。它是一种可使用数字化索引进行访问其中元素的对象。


可用算术运算符连接或重复序列。


比较运算符(<,<=,>,>=,!=,==)也可用于序列。


通过下标(test[1]),切片(test[1:3])和解包来访问序列的某部份。

in运算符可判断当有对象是否序列对象成员,如:
>>>list = [1,2,3]
>>>1 in list
1
>>>4 in list
0

循环运算符对序列进行迭代。如:
for day in days:
print day

函数
常用函数中的len()、max()和min()同样可用于序列。
filter(function,list)它会把一个函数应用于序列中的每个项,并返回该函数返回真值时的所有项。


map(function,list[,list]) 把一个函数应用于序列中所有项,并返回一个列表。

reduce(function,seq[,init]) 获得序列中前两个项,并把它传递给提供的函数,获得结果后再取序列中的下一项,连同结果再传递给函数,以此类推。


zip(seq[,seq,...]) 把两个或多个序列中的相应项合并在一起,并以元组的格式返回它们,在处理完最短序列中的所有项后就停止。




9.Dictionary字典
字典是用大括号括起来的键值对,字典元素分为两部份,键(key)和值。字典是python中唯一内置映射数据类型。通过指定的键从字典访问值。如:
monthdays = { "Jan":31, "Feb":28, "Mar":31, "Apr":30, "May":31, "Jun":30, "Jul":31, "Aug":31, "Sep":30, "Oct":31, "Nov":30,"Dec":31 }
字典可嵌套,可以在一个字典里包含另一个字典。如test={"test":{"mytest":10} }


可用键访问字典,如monthdays["Jan"],可访问值31。如果没有找到指定的键,则解释器会引起异常。


字典是可修改,如monthdays["Jan"]=30,可把Jan的值由31改为30。如monthdays["test"]=30可添加一个新键值对。


del monthdays["test"] 删除字典条目。


字典不属序列对象,所以不能进行连接和相乘操作。字典是没有顺序的。


字典提供keys和values方法,用来返回字典中定义的所有键和值。


方法 描述
has_key(x) 如果字典中有键x,则返回真。
keys() 返回字典中键的列表
values() 返回字典中值的列表。
items() 返回tuples的列表。每个tuple由字典的键和相应值组成。
clear() 删除字典的所有条目。
copy() 返回字典高层结构的一个拷贝,但不复制嵌入结构,而只复制对那些结构的引用。
update(x) 用字典x中的键值对更新字典内容。
get(x[,y]) 返回键x,若未找到该键返回none,若提供y,则未找到x时返回y。


10.数组
数组列表类似,但数组只包含某些类型的简单数据。当数据简单时,且要求性能好的情况下,可使用数组。
数组创建方法如下:
>>> import array
>>> z=array.array("b")
>>> z.append(1)
>>> z
array('b', [1])
itemsize和typecode可检索数组项的大小和数组对象的类型,如:
>>> z.itemsize
1
>>> z.typecode
'b'

11.数组类型与其它数据类型转换
tolist()方法可把数组转换为列表,如:
>>> z.tolist()
[1, 2, 3]

fromlist(list)方法可把列表项附加到数组的末尾,如:
>>> z.fromlist([10,11])
>>> z
array('b', [1, 2, 3, 10, 11])
如果添加的列表类型与数组类型不同,则fromlist(list)不会把任何项添加到数组对象中。

tostring()方法,可以把数组转换为字节的序列,如:
>>> z.tostring()
'\x01\x02\x03\n\x0b'

fromstring(list)方法刚好与tostring()相反,它获取一个字节串,并把它们转换为数组的值。如:
>>> z.fromstring("\x0b")
>>> z
array('b', [1, 2, 3, 10, 11, 11])

tofile(file)方法可把数组转换为字节的序列,并把它们写入文件,如:
>>> f=open("aa","wb")
>>> z.tofile(f)
>>> f.close()

fromfile(file,count)方法用于从文件对象中读取特定数目的项,并把它们附加到数组中,如:
>>> z.fromfile(open("aa","rb"),2)
>>> z
array('b', [1, 2, 3, 10, 11, 11, 1, 2])
当取数项大于文件数据项时,formfile会产生EOFError异常。


12.控制语句
if语句:
if   EXPRESSION1:
STATEMENT1
elif EXPRESSION2:
STATEMENT2
else:
STATEMENT3
注意语句的缩进量要保持一致。在python中没有switch和case语句,我们可通过多重elif来达到相同的效果。

while语句:
while EXPRESSION:
 STATEMENT
else:
 STATEMENT
如果测试为假,则会执行else块。如果循环被中断(break),则else块不会执行。


for语句:
for TARGET in OBJECTS:
  STATEMENT
else:
  STATEMENT
和while一样,在循环正常退出时,会执行else块。


在循环过程中,可使用循环控制语句来控制循环的执行。break、continue、pass:
break语句会立即退出当前循环,
continue语句会忽略后面的语句,强制进入下一次循环。
pass不做任何事情。

13.函数
定义:
def function_name(arg1,arg2[,...]):
statement
[return value]  
返回值不是必须的,如果没有return语句,则Python默认返回值None。

命名规则:
a.函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号
b.函数名是区分大小写的。
c.函数名不能是保留字。


Python使用名称空间的概念存储对象,这个名称空间就是对象作用的区域, 不同对象存在于不同的作用域。下面是不同对象的作用域规则:


函数定义的对象属局部作用域,只在函数内有效,不会影响全局作用域中的对象。

如想在局部作用域中改变全局作用域的对象,必须使用global关键字。
>>> name="Jims"
>>> def set1():
...     global name
...     name="ringkee"
...
>>> set1()
>>> print name
ringkee

*参数是对象指针

在函数中对参数名赋值不影响调用者。
>>> a=1
>>> def test(a):
...     a=a+1
...     print a
>>> test(a)
2
>>> a
1          # a值不变

在一个函数中改变一个可变的对象参数会影响调用者。
>>> a=1
>>> b=[1,2]
>>> def test(a,b):
...     a=5
...     b[0]=4
...     print a,b
>>> test(a,b)
5 [4, 2]
>>> a
1
>>> b
[4, 2]    # b值已被更改


abs(x)

常用函数:
abs()返回一数字的绝对值。如果复数,返回复数的模。
callable() 测试对象是否可调用,返回1(真);返回0(假)。可调用对象包括函数、方法、代码对象、类和已经定义了“调用”方法的类实例。
cmp()函数比较x和y两个对象,并根据比较结果返回一个整数,如果x<y,则返回-1;如果x>y,则返回1,如果x==y则返回0。
divmod(x,y)函数完成除法运算,返回商和余数。
>>> divmod(10,3)
(3, 1)

len()函数返回字符串和序列的长度。
pow(x,y[,z])函数返回以x为底,y为指数的幂。如果给出z值,该函数就计算x的y次幂值被z取模的值。
range()函数可按参数生成连续的有序整数列表。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

round(x[,n]) 函数返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。


type(obj) 函数可返回对象的数据类型。


xrange([lower,]stop[,step]) 与range()类似,但xrnage()不创建列表,而是返回一个xrange对象,它的行为与列表相似,
但是只在需要时才计算列表值,当列表很大时,这个特性能为我们节省内存。
>>> a=xrange(10)
>>> print a[0]
0
>>> print a[1]
1

内置类型转换函数:
chr() 函数返回ASCII码对应的字符串。
>>> print chr(65)
A

complex(real[,imaginary]) 函数可把字符串或数字转换为复数。


float() 函数把一个数字或字符串转换成浮点数。


hex()函数可把整数转换成十六进制数。


long(x[,base]) 函数把数字和字符串转换成长整数,base为可选的基数。


list()函数可将序列对象转换成列表。如:


int(x[,base]) 函数把数字和字符串转换成一个整数,base为可选的基数。


min(x[,y,z...]) 函数返回给定参数的最小值,参数可以为序列。


max(x[,y,z...]) max()函数返回给定参数的最大值,参数可以为序列。


oct()函数可把给出的整数转换成八进制数。


ord()函数返回一个字符串参数的ASCII码或Unicode值。


>>> ord("a")
97
>>> ord(u"a")
97
str(obj)


str()函数把对象转换成可打印字符串。


>>> str("4")
'4'
>>> str(4)
'4'
>>> str(3+2j)
'(3+2j)'
tuple(x)


tuple()函数把序列对象转换成tuple。


>>> tuple("hello world")
('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd')
>>> tuple([1,2,3,4])
(1, 2, 3, 4)


14.模块
模块把复杂的程序按功能分开,放到不同文件中,使程序更容易管理。Python中的模块是以.py结尾的Python代码文件。可通过import命令导入,如:


import sys
import os,sys,system # 同时输入多个模块
import ftplib as ftp # 名称长的可以起别名


只使用模块中某个对象,又不想把整个模块导入,可以用from...import。这样可以直接用函数名,而不必加上模块名,如:
from ftplib import FTP   #可直接使用FTP(),而不用带模块前缀。




脚本和模块都是.py后缀文件,判断是脚本or模块:__name__变量,如果值是__main__,则不能作模块,只能作脚本。很多脚本最后都有类似下面的语句,限制只能以脚本方式运行:
if __name__ == '__main__':
main()

功能相近的模块可组成一个Python包,放一个目录中,通过包路径来调用。定义包,建一个与包名同名的目录,接着在目录下创建__init__.py文件。该文件是包的初始化文件,
可以为空,也可定义一个代码。例:


/web
__init_.py
design.py
draw.py
...
导入design模块:
import web.design
原创粉丝点击