文档章节

Python3学习笔记09-python常用方法总结

Corwien
 Corwien
发布于 2016/06/10 11:05
字数 4029
阅读 118
收藏 1

一、序列的方法

在快速教程中,我们了解了最基本的序列(sequence)。回忆一下,序列包含有定值表(tuple)和表(list)。此外,字符串(string)是一种特殊的定值表表的元素可以更改,定值表一旦建立,其元素不可更改

任何的序列都可以引用其中的元素(item)。

下面的内建函数(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的字符串,将原字符串右对齐放入该字符串,其它空余位置为空格。

二、Python小技巧

在这里列举一些我使用Python时积累的小技巧。这些技巧是我在使用Python过程中经常使用的。之前很零碎的记在笔记本中,现在整理出来,和大家分享,也作为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', 并对比运行结果。

单独运行TestLib.py文件:

输入图片说明

运行user.py文件:

输入图片说明 我们可以看到,在user.py中导入TestLib.py文件,先是执行TestLib.py文件的程序,即打印**print 'name: ',name ** ,然后再调用文件中的lib_func(a)方法,该测试方法及其重要,以后在项目中多应用该调试方法

####(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__)
#结果打印
>>> print(list.__base__)
<type 'object'>

###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往往是最好的起点。

##三、Python内置函数清单 Python内置(built-in)函数随着python解释器的运行而创建。在Python的程序中,你可以随时调用这些函数,不需要定义。最常见的内置函数是:

print("Hello World!")

在Python教程中,我们已经提到下面一些内置函数:

type() dir() help() 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()                          # 返回局部命名空间

##四、字符串格式化(%操作符) 在许多编程语言中都包含有格式化字符串的功能,比如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)

打印:

>>> print("%6.3f" % 2.3)
 2.300

上面的width, precision为两个整数。我们可以利用*,来动态代入这两个量。比如:

print("%.*f" % (4, 1.2))
Python实际上用4来替换*。所以实际的模板为"%.4f"。

注:本Python学习笔记是按照Vamei的博客教程来学习的,如有兴趣可以参考Vamei Python快速开发博文

© 著作权归作者所有

Corwien
粉丝 27
博文 149
码字总数 115164
作品 0
广州
程序员
私信 提问
学习笔记(10月20日) --python数据类型&字符串常用方法

一周五次课(10月20日) 1.学习python的整型 1.1、raw_input()和input()的区别 raw_input() 将所有输入作为字符串看待,返回字符串类型;而input()在对待纯数字输入时具有自己的特性,它返回...

wanyang_wanyang
2018/07/03
0
0
学习 Python 的 14 张思维导图

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条...

天星ing
2017/10/18
99
0
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2
2018/05/23
0
0
一个开发十年的程序员论:学习Python最正确的步骤(0基础必备)

很多人都在问Python学习步骤应该如何安排?多长时间可以达到精通呢? Python学习步骤应该怎样安排: 首先,学习Python编程技术,自学或者参加培训学习都适用,每个人都有自己的学习方式和方法...

糖宝lsh
2018/09/10
98
0
总结学习 Python 的 14 张思维导图汇总

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列...

两味真火
2017/10/01
7.9K
10

没有更多内容

加载失败,请刷新页面

加载更多

浅谈Visitor访问者模式

一、前言 什么叫访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+对其进行处理就叫作访问,那么...

青衣霓裳
22分钟前
5
0
JS内嵌多个页面,页面之间如何更快捷的查找相关联的页面

假设parent为P页面, P页面有两个子页面,分别为B页面和C页面; B页面和C页面分别内嵌一个iframe,分别为:D页面和E页面 现在通过B页面的内嵌页面D的方法refreshEpage(eUrl)来加载内嵌页面E的内容...

文文1
24分钟前
6
0
Hibernate 5 升级后 getProperties 错误

升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate......

honeymoose
25分钟前
4
0
mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
28分钟前
6
0
Spring中BeanFactory与FactoryBean的区别

在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混。 一、BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定...

大王叫下
30分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部