Python实用入门

来源:互联网 发布:蓝光主板端口说明 编辑:程序博客网 时间:2024/05/22 02:21

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)     返回: xs中出现的次数s.index(x)     返回: xs中第一次出现的下标

由于定值表的元素不可变更,下面方法只适用于表

# 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,返回 -1str.index(sub)       返回:从左开始,查找sub在str中第一次出现的位置。如果str中不包含sub,举出错误str.rfind(sub)       返回:从右开始,查找sub在str中第一次出现的位置。如果str中不包含sub,返回 -1str.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中的substr.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 + 10def lib_func_another(b):    return b + 20if __name__ == '__main__':    test = 101    print(lib_func(test))print '__name__: ',__name__   #注意观察

我们在user.py中import上面的TestLib:

import TestLibprint(TestLib.lib_func(120))

你可以尝试不在TestLib.py中使用if __name__=='__main__', 并对比运行结果。

(2)、更多import使用方式

  • import TestLib as test # 引用TestLib模块,并将它改名为t

比如:

import TestLib as tprint(t.lib_func(120))
  • from TestLib import lib_func # 只引用TestLib中的lib_func对象,并跳过TestLib引用字段

这样的好处是减小所引用模块的内存占用。

比如:

from TestLib import lib_funcprint(lib_func(120))
  • from TestLib import * # 引用所有TestLib中的对象,并跳过TestLib引用字段

比如:

from TestLib import *print(lib_func(120))

2、查询

(1)、查询函数的参数

当我们想要知道某个函数会接收哪些参数的时候,可以使用下面方法查询。

import inspectprint(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=utf8print("你好吗?")

也能用以下方式:

#-*- 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# mainfunc()

注释应该和所在的程序块对齐

6、搜索路径

当我们import的时候,Python会在搜索路径中查找模块(module)。比如上面import TestLib,就要求TestLib.py在搜索路径中。

我们可以通过下面方法来查看搜索路径:

import sysprint(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)                          # 取绝对值,也就是5round(2.6)                       # 四舍五入取整,也就是3.0pow(2, 3)                        # 相当于2**3,如果是pow(2, 3, 5),相当于2**3 % 5cmp(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")                         # 转换为整数 integerfloat(2)                         # 转换为浮点数 floatlong("23")                       # 转换为长整数 long integerstr(2.3)                         # 转换为字符串 stringcomplex(3, 9)                    # 返回复数 3 + 9iord("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))                    # 转换为表 listtuple([2,3,4])                   # 转换为定值表 tupleslice(5,2,-1)                    # 构建下标对象 slicedict(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 classclass 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_testdelattr(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"。


0 0