Python实用入门
2015-08-07 23:07
639 查看
1、序列的方法
下面的内建函数(built-in function)可用于序列(表,定值表,字符串):# s为一个序列 len(s) 返回: 序列中包含元素的个数 min(s) 返回: 序列中最小的元素 max(s) 返回: 序列中最大的元素 all(s) 返回: True, 如果所有元素都为True的话 any(s) 返回: True, 如果任一元素为True的话
下面的方法主要起查询功能,不改变序列本身, 可用于表和定值表:
sum(s) 返回:序列中所有元素的和 # x为元素值,i为下标(元素在序列中的位置) s.count(x) 返回: x在s中出现的次数 s.index(x) 返回: x在s中第一次出现的下标
由于定值表的元素不可变更,下面方法只适用于表:
# l为一个表, l2为另一个表 l.extend(l2) 在表l的末尾添加表l2的所有元素 l.append(x) 在l的末尾附加x元素 l.sort() 对l中的元素排序 l.reverse() 将l中的元素逆序 l.pop() 返回:表l的最后一个元素,并在表l中删除该元素 del l[i] 删除该元素 (以上这些方法都是在原来的表的上进行操作,会对原来的表产生影响,而不是返回一个新表。)
下面是一些用于字符串的方法。尽管字符串是定值表的特殊的一种,但字符串(string)类有一些方法是改变字符串的。这些方法的本质不是对原有字符串进行操作,而是删除原有字符串,再建立一个新的字符串,所以并不与定值表的特点相矛盾。
#str为一个字符串,sub为str的一个子字符串。s为一个序列,它的元素都是字符串。width为一个整数,用于说明新生成字符串的宽度。 str.count(sub) 返回:sub在str中出现的次数 str.find(sub) 返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1 str.index(sub) 返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误 str.rfind(sub) 返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1 str.rindex(sub) 返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误 str.isalnum() 返回:True, 如果所有的字符都是字母或数字 str.isalpha() 返回:True,如果所有的字符都是字母 str.isdigit() 返回:True,如果所有的字符都是数字 str.istitle() 返回:True,如果所有的词的首字母都是大写 str.isspace() 返回:True,如果所有的字符都是空格 str.islower() 返回:True,如果所有的字符都是小写字母 str.isupper() 返回:True,如果所有的字符都是大写字母 str.split([sep, [max]]) 返回:从左开始,以空格为分割符(separator),将str分割为多个子字符串,总共分割max次。将所得的子字符串放在一个表中返回。可以str.split(',')的方式使用逗号或者其它分割符 str.rsplit([sep, [max]]) 返回:从右开始,以空格为分割符(separator),将str分割为多个子字符串,总共分割max次。将所得的子字符串放在一个表中返回。可以str.rsplit(',')的方式使用逗号或者其它分割符 str.join(s) 返回:将s中的元素,以str为分割符,合并成为一个字符串。 str.strip([sub]) 返回:去掉字符串开头和结尾的空格。也可以提供参数sub,去掉位于字符串开头和结尾的sub str.replace(sub, new_sub) 返回:用一个新的字符串new_sub替换str中的sub str.capitalize() 返回:将str第一个字母大写 str.lower() 返回:将str全部字母改为小写 str.upper() 返回:将str全部字母改为大写 str.swapcase() 返回:将str大写字母改为小写,小写改为大写 str.title() 返回:将str的每个词(以空格分隔)的首字母大写 str.center(width) 返回:长度为width的字符串,将原字符串放入该字符串中心,其它空余位置为空格。 str.ljust(width) 返回:长度为width的字符串,将原字符串左对齐放入该字符串,其它空余位置为空格。 str.rjust(width) 返回:长度为width的字符串,将原字符串右对齐放入该字符串,其它空余位置为空格。
2、Python小技巧
1、import模块
在Python经常使用import声明,以使用其他模块(也就是其它.py文件)中定义的对象。(1)、使用__name__
当我们编写Python库模块的时候,我们往往运行一些测试语句。当这个程序作为库被import的时候,我们并不需要运行这些测试语句。一种解决方法是在import之前,将模块中的测试语句注释掉。Python有一种更优美的解决方法,就是使用__name__。下面是一个简单的库程序TestLib.py。当直接运行TestLib.py时,__name__为"__main__"。如果被import的话,__name__为"TestLib"。
def lib_func(a): return a + 10 def lib_func_another(b): return b + 20 if __name__ == '__main__': test = 101 print(lib_func(test)) print '__name__: ',__name__ #注意观察
我们在user.py中import上面的TestLib:
import TestLib print(TestLib.lib_func(120))
你可以尝试不在TestLib.py中使用if __name__=='__main__', 并对比运行结果。
(2)、更多import使用方式
import TestLib as test # 引用TestLib模块,并将它改名为t比如:
import TestLib as t print(t.lib_func(120))
from TestLib import lib_func # 只引用TestLib中的lib_func对象,并跳过TestLib引用字段
这样的好处是减小所引用模块的内存占用。
比如:
from TestLib import lib_func print(lib_func(120))
from TestLib import * # 引用所有TestLib中的对象,并跳过TestLib引用字段
比如:
from TestLib import * print(lib_func(120))
2、查询
(1)、查询函数的参数
当我们想要知道某个函数会接收哪些参数的时候,可以使用下面方法查询。import inspect print(inspect.getargspec(func))
(2)、查询对象的属性
除了使用dir()来查询对象的属性之外,我们可以使用下面内置(built-in)函数来确认一个对象是否具有某个属性:hasattr(obj, attr_name) # attr_name是一个字符串
例如:
a = [1,2,3] print(hasattr(a,'append'))
(3)、查询对象所属的类和类名称
a = [1, 2, 3] print a.__class__ print a.__class__.__name__
(4)、查询父类
我们可以用 __base__ 属性来查询某个类的父类:cls.__base__
例如:
print(list.__base__)
3、使用中文(以及其它非ASCII编码)
在Python程序的第一行加入#coding=utf8,例如:#coding=utf8 print("你好吗?")
也能用以下方式:
#-*- coding: UTF-8 -*- print("你好吗?")
4、表示2进制,8进制和16进制数字
在2.6以上版本,以如下方式表示:print(0b1110) # 二进制,以0b开头 print(0o10) # 八进制,以0o开头 print(0x2A) # 十六进制,以0x开头
如果是更早版本,可以用如下方式:
print(int("1110", 2)) print(int("10", 8)) print(int("2A", 16))
5、注释
一行内的注释可以以#开始。多行的注释可以以'''开始,以'''结束,比如:
''' This is demo ''' def func(): # print something print("Hello world!") # use print() function # main func()
注释应该和所在的程序块对齐。
6、搜索路径
当我们import的时候,Python会在搜索路径中查找模块(module)。比如上面import TestLib,就要求TestLib.py在搜索路径中。我们可以通过下面方法来查看搜索路径:
import sys print(sys.path)
我们可以在Python运行的时候增加或者删除sys.path中的元素。另一方面,我们可以通过在shell中增加PYTHONPATH环境变量,来为Python增加搜索路径。
下面我们增加/home/vamei/mylib到搜索路径中:
$export PYTHONPATH=$PYTHONPATH:/home/vamei/mylib
你可以将正面的这行命令加入到~/.bashrc中。这样,我们就长期的改变了搜索路径。
7、脚本与命令行结合
可以使用下面方法运行一个Python脚本,在脚本运行结束后,直接进入Python命令行。这样做的好处是脚本的对象不会被清空,可以通过命令行直接调用。$python -i script.py
8、安装非标准包
Python的标准库随着Python一起安装。当我们需要非标准包时,就要先安装。(1)、使用Linux repository (Linux环境)
这是安装Python附加包的一个好的起点。你可以在Linux repository中查找可能存在的Python包 (比如在Ubuntu Software Center中搜索matplot)。(2)、使用pip。pip是Python自带的包管理程序,它连接Python repository,并查找其中可能存在的包。
比如使用如下方法来安装、卸载或者升级web.py:$pip install -i http://mirrors.aliyuncs.com/pypi/simple web.py $pip uninstall web.py $pip install -i http://mirrors.aliyuncs.com/pypi/simple --upgrade web.py
如果你的Python安装在一个非标准的路径(使用$which python来确认python可执行文件的路径)中,比如/home/vamei/util/python/bin中,你可以使用下面方法设置pip的安装包的路径:
$pip install -i http://mirrors.aliyuncs.com/pypi/simple --install-option="--prefix=/home/vamei/util/" web.py
(3)、从源码编译
如果上面方法都没法找到你想要的库,你可能需要从源码开始编译。Google往往是最好的起点。3、内置函数清单
Python内置(built-in)函数随着python解释器的运行而创建。在Python的程序中,你可以随时调用这些函数,不需要定义。最常见的内置函数是:print("Hello World!")
在Python教程中,我们已经提到下面一些内置函数:
type() dir() help() len() len() open() range() enumerate() zip() iter() map() filter() reduce()
下面我采取的都是实际的参数,你可以直接在命令行尝试效果。
1、数学运算
abs(-5) # 取绝对值,也就是5 round(2.6) # 四舍五入取整,也就是3.0 pow(2, 3) # 相当于2**3,如果是pow(2, 3, 5),相当于2**3 % 5 cmp(2.3, 3.2) # 比较两个数的大小 divmod(9,2) # 返回除法结果和余数 max([1,5,2,9]) # 求最大值 min([9,2,-4,2]) # 求最小值 sum([2,-1,9,12]) # 求和
2、类型转换
int("5") # 转换为整数 integer float(2) # 转换为浮点数 float long("23") # 转换为长整数 long integer str(2.3) # 转换为字符串 string complex(3, 9) # 返回复数 3 + 9i ord("A") # "A"字符对应的数值 chr(65) # 数值65对应的字符 unichr(65) # 数值65对应的unicode字符 bool(0) # 转换为相应的真假值,在Python中,0相当于False .在Python中,下列对象都相当于False:** [], (), {}, 0, None, 0.0, '' ** bin(56) # 返回一个字符串,表示56的二进制数 hex(56) # 返回一个字符串,表示56的十六进制数 oct(56) # 返回一个字符串,表示56的八进制数 list((1,2,3)) # 转换为表 list tuple([2,3,4]) # 转换为定值表 tuple slice(5,2,-1) # 构建下标对象 slice dict(a=1,b="hello",c=[1,2,3]) # 构建词典 dictionary
3、序列操作
all([True, 1, "hello!"]) # 是否所有的元素都相当于True值 any(["", 0, False, [], None]) # 是否有任意一个元素相当于True值 sorted([1,5,3]) # 返回正序的序列,也就是[1,3,5] reversed([1,5,3]) # 返回反序的序列,也就是[3,5,1]
4、类、对象、属性
# define class class Me(object): def test(self): print "Hello!" def new_test(): print "New Hello!" me = Me()
hasattr(me, "test") # 检查me对象是否有test属性 getattr(me, "test") # 返回test属性 setattr(me, "test", new_test) # 将test属性设置为new_test delattr(me, "test") # 删除test属性 isinstance(me, Me) # me对象是否为Me类生成的对象 (一个instance) issubclass(Me, object) # Me类是否为object类的子类
5、编译、执行
repr(me) # 返回对象的字符串表达 compile("print('Hello')",'test.py','exec') # 编译字符串成为code对象 eval("1 + 1") # 解释字符串表达式。参数也可以是compile()返回的code对象 exec("print('Hello')") # 解释并执行字符串,print('Hello')。参数也可以是compile()返回的code对象
6、其他
input("Please input:") # 等待输入 globals() # 返回全局命名空间,比如全局变量名,全局函数名 locals() # 返回局部命名空间
4、字符串格式化
在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字符串进行格式化的操作%。1、模板
格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。比如下面的例子:
print("I'm %s. I'm %d year old" % ('Vamei', 99))
上面的例子中,"I'm %s. I'm %d year old" 为我们的模板。%s为第一个格式符,表示一个字符串。%d为第二个格式符,表示一个整数。('Vamei', 99)的两个元素'Vamei'和99为替换%s和%d的真实值。
在模板和tuple之间,有一个%号分隔,它代表了格式化操作。
整个"I'm %s. I'm %d year old" % ('Vamei', 99) 实际上构成一个字符串表达式。我们可以像一个正常的字符串那样,将它赋值给某个变量。比如:
a = "I'm %s. I'm %d year old" % ('Vamei', 99) print(a)
我们还可以用词典来传递真实值。如下:
print("I'm %(name)s. I'm %(age)d year old" % {'name':'Vamei', 'age':99})
可以看到,我们对两个格式符进行了命名。命名使用()括起来。每个命名对应词典的一个key。
2、格式符
格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:%s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符 %b 二进制整数 %d 十进制整数 %i 十进制整数 %o 八进制整数 %x 十六进制整数 %e 指数 (基底写为e) %E 指数 (基底写为E) %f 浮点数 %F 浮点数,与上相同 %g 指数(e)或浮点数 (根据显示长度) %G 指数(E)或浮点数 (根据显示长度) %% 字符"%"
可以用如下的方式,对格式进行进一步的控制:
%[(name)][flags][width].[precision]typecode (name)为命名
flags可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。
width表示显示宽度
precision表示小数点后精度
比如:
print("%+10x" % 10) print("%04d" % 5) print("%6.3f" % 2.3)
上面的width, precision为两个整数。我们可以利用*,来动态代入这两个量。比如:
print("%.*f" % (4, 1.2))
Python实际上用4来替换*。所以实际的模板为"%.4f"。
相关文章推荐
- Python字符串操作之字符串分割与组合
- python select模块实现并发
- Python requests库解析中文网页乱码处理方法
- Python字符串操作之字符串搜索与替换
- Python 之 LIBSVM 使用小结(三)
- pycharm 使用心得(九)解决No Python interpreter selected的问题
- Python字符串操作之扫描、翻转、截取、输出对齐
- python提取字符串中数字
- Python文件方法
- python 快速排序
- Python字符串操作之字符大小写转换
- python函数式编程
- Python字符串操作之复制、连接、比较、求长度
- Python字符串操作集锦之字符串去空格及去指定字符
- python两个整数和浮点的方法来获取值
- python机器学习库 :matplotlib
- Python简单爬虫
- Python正则表达式速查表
- python 读写csv格式文件
- python3 基本使用多线程