专栏名称: Python技术博文
分享有关Python知识,了解IT界最新技术,让我们一起从菜鸟变成大牛吧!
目录
相关文章推荐
Python爱好者社区  ·  模仿一下领导说话的样子 ·  15 小时前  
Python爱好者社区  ·  今年程序员这薪资是认真的吗? ·  昨天  
Python开发者  ·  DeepSeek+软考,杀疯了?! ·  3 天前  
Python爱好者社区  ·  机器学习全书 ·  3 天前  
Python爱好者社区  ·  梁文锋导师项志宇引关注,个人主页满满都是对团 ... ·  3 天前  
51好读  ›  专栏  ›  Python技术博文

python学习笔记

Python技术博文  · 公众号  · Python  · 2017-09-04 12:00

正文

Python中%r和%s的区别

%r用rper()方法处理对象

%s用str()方法处理对象

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生SyntaxError 异常) 某对象没有适于人阅读的解释形式的话, str() 会返回与repr()等同的值。很多类型,诸如数值或链表、字典这样的结构,针对各函数都有着统一的解读方式。

有些情况下,两者处理的结果是一样的,比如说处理int型对象。

例一:

1
2
3
print "I am %d years old." % 22
print "I am %s years old." % 22
print "I am %r years old." % 22


返回结果:

1
2
3
I am 22 years old.
I am 22 years old.
I am 22 years old.


另外一些情况两者就不同了

例二:

1
2
3
text = "I am %d years old." % 22
print "I said: %s." % text
print "I said: %r." % text


返回结果:

1
2
I said: I am 22 years old..
I said: 'I am 22 years old.' . #%r 给字符串加了单引号


再看一种情况

例三:

1
2
3
4
import datetime
d = datetime. date .today()
print "%s" % d
print "%r" % d


返回结果:

1
2
2017-08-16
datetime. date (2017, 8, 16)


可见,%r打印时能够重现它所代表的对象(rper() unambiguously recreate the object it represents)

python拆分中英文混合字符串 - 按中文拆分

#coding=utf-8
import re
s = 'hi新手oh' .decode( 'utf-8' ) #字符串s,为了匹配下文的unicode形式,所以需要解码
p = re. compile (ur '[\u4e00-\u9fa5]' ) #这里是精髓,[\u4e00-\u9fa5]是匹配所有中文的正则,因为是unicode形式,所以也要转为ur
print p.split(s) #使用re库的split切割


输出:[u'hi', u'', u'oh']

python字符串连接的三种方法及其效率、适用场景详解

python字符串连接的方法,一般有以下三种:

方法1:直接通过加号(+)操作符连接

1
website = 'python' + 'tab' + '.com'

方法2:join方法

1
2
listStr = [ 'python' , 'tab' , '.com' ]
website = ''.join(listStr)

方法3:替换

1
website = '%s%s%s' % ( 'python' , 'tab' , '.com' )


下面再来说一下三种方法的不同

方法1,使用简单直接,但是网上不少人说这种方法效率低

之所以说python 中使用 + 进行字符串连接的操作效率低下,是因为python中字符串是不可变的类型,使用 + 连接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当连续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了


方法2,使用略复杂,但对多个字符进行连接时效率高,只会有一次内存的申请。而且如果是对list的字符进行连接的时候,这种方法必须是首选


方法3:字符串格式化,这种方法非常常用,本人也推荐使用该方法


下面用实验来说明字符串连接的效率问题。

1
2
3
比较对象:加号连接 VS join 连接
python版本: python2.7
系统环境:CentOS

实验一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-
from time import time
def method1():
t = time()
for i in xrange ( 100000 ):
s = 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab' + 'pythontab'
print time() - t
def method2():
t = time()
for i in xrange ( 100000 ):
s = ' '.join([' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab ',' pythontab'])
print time() - t
method1()
method2()

结果:

1






请到「今天看啥」查看全文