Ywc's blog

学习python中遇到的问题及总结

Word count: 2.5kReading time: 11 min
2018/05/28

字符串基础

  • 连接

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    s1='www.baidu'
    s2='.com'
    s3=s1+s2
    print s3
    ​```
    s3输出为www.baidu.com
    ​```
    s4=s2+s1
    ​```
    s3输出为.comwww.baidu.com
    ​```
  • 重复

    1
    2
    3
    4
    5
    6
    >>>li1=[1,'3','23.333']
    >>>li1
    [1, '3', '23.333']
    >>>li1=[1,'3','23.333']*5
    >>>li1
    [1, '3', '23.333', 1, '3', '23.333', 1, '3', '23.333']
  • s[i] 索引 index

    1
    2
    3
    4
    5
    6
    >>>s1='abcdefg'
    >>>ch=s1[3]
    >>>ch
    'd'
    >>>print(ch)
    d
  • s[i:j:step] 切片 slice

注意方向,由大到小时,step为负,由小到大时,step为正(为1时可以不写)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
>>>s1='abcdefg'
>>>sub=s1[2:5]
>>>print(sub)
cde
>>>sub=s1[2:]
>>>print(sub)
cdefg
>>>sub=s1[:]
>>>print(sub)
abcdefg
>>>s1[5]
'f'
>>>s1[-2]
'f'
>>>sub=s1[-4:-1]
>>>sub
'def'
>>sub=s1[-4:-1]
>>>sub
'def'
>>>sub=s1[-1:-4]
>>>sub
''
>>>sub=s1[-1:-4:-1]
>>>sub
'gfe'
  • for 循环遍历

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    s='www.baidu.com'
    for ch in s:
    print(ch)

    w
    w
    w
    .
    b
    a
    i
    d
    u
    .
    c
    o
    m

删除字符串中的空格

1
"".join(a.split())

>>> a = “ a b c “
>>> b = a.split() # 字符串按空格分割成列表
>>> b [‘a’, ‘b’, ‘c’]
>>> c = “”.join(b) # 使用一个空字符串合成列表内容生成新的字符串
>>> c ‘abc’

类似print(‘*’,end=’’)中end问题

end是print()函数的一个参数。end 是输出语句结束以后附加的字符串,它的默认值是换行(’\n’)
例如:

1
2
3
4
5
6
7
8
print('*',end = ' ')#end值为空格
print('*',end = '')#end值为空字符串
print('*',end = '')#end值为空字符串

print('')#end值为默认值(换行\n)

print('*',end = '1')#end值为字符串‘1’
print('*',end = '12')#end值为字符串‘12’

输出结果为:

1
2
* **
*1*12

xrange与range的区别

参考链接:http://www.nowamagic.net/academy/detail/1302446

range(start,stop,step)

xrange与range完全相同,所不同的是生成的不是一个list对象,而是一个生成器。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。

所以xrange做循环的性能比range好,尤其是返回很大的时候。尽量用xrange吧,除非你是要返回一个列表。

使用md5和sha1

参考链接:https://www.cnblogs.com/shanys/p/5890265.html
md5使用例子

1
2
3
4
from hashlib import md5
data_str="hello world"
hash_md5=md5(data_str).hexdigest()
print hash_md5

sha1使用例子

1
2
3
4
from hashlib import sha1
data_str = "hello world"
hash_sha1=sha1(data_str).hexdigest()
print hash_sha1

md5+os.urandom(n)产生随机字符串

有点时候我们会需要产生一个全局唯一的id,这个时候,md5 + os.urandom 就派上用场了。

os.urandom(n) 是一种随机生成n个字节字符串的方法,而且每次生成的值都不相同。再加上md5的处理,就能够成内容不同长度相同的字符串了。

例子:

1
2
3
4
import os
from hashlib import md5
for i in range(10):
print md5(os.urandom(24)).hexdigest()

urllib.unquote()

把字典形式的参数进行url编码.
eg:

1
2
3
4
s = "url=%2F&email=imtesting%40tempmail.com&password=hereispassword"
print urllib.unquote(s)

>>> url=/&email=imtesting@tempmail.com&password=hereispassword

seek()函数

seek() 方法用于移动文件读取指针到指定位置.

语法:

fileObject.seek(offset[, whence])
  • offset – 开始的偏移量,也就是代表需要移动偏移的字节数
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

https://blog.csdn.net/maxthex/article/details/56484519

import sys 与from sys import argv

  • from sys import argv可以通过a,b,c,d……=argv来进行批量参数赋值,将argv中的参数依次赋值给左边的变量。
  • 而import sys去只能通过a=sys.argv[]这样来逐个赋值。
  • Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

https://www.cnblogs.com/aland-1415/p/6613449.html

int.from_bytes和int.to_bytes函数

int.from_bytes函数

  • 功能:res = int.from_bytes(x)的含义是把bytes类型的变量x,转化为十进制整数,并存入res中。其中bytes类型是python3特有的类型。
  • 函数参数:int.from_bytes(bytes, byteorder, *, signed=False)。在IDLE或者命令行界面中使用help(int.from_bytes)命令可以查看具体介绍。bytes是输入的变量;byteorder主要有两种:’big’和’little’;signed=True表示需要考虑符号位。

int.to_bytes函数

  • 功能:是int.from_bytes的逆过程,把十进制整数,转换为bytes类型的格式。

python之%s%d%f

%s字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
string="hello"  

#%s打印时结果是hello
print "string=%s" % string # output: string=hello

#%2s意思是字符串长度为2,当原字符串的长度超过2时,按原长度打印,所以%2s的打印结果还是hello
print "string=%2s" % string # output: string=hello

#%7s意思是字符串长度为7,当原字符串的长度小于7时,在原字符串左侧补空格,
#所以%7s的打印结果是 hello
print "string=%7s" % string # output: string= hello

#%-7s意思是字符串长度为7,当原字符串的长度小于7时,在原字符串右侧补空格,
#所以%-7s的打印结果是 hello
print "string=%-7s!" % string # output: string=hello !

#%.2s意思是截取字符串的前2个字符,所以%.2s的打印结果是he
print "string=%.2s" % string # output: string=he

#%.7s意思是截取字符串的前7个字符,当原字符串长度小于7时,即是字符串本身,
#所以%.7s的打印结果是hello
print "string=%.7s" % string # output: string=hello

#%a.bs这种格式是上面两种格式的综合,首先根据小数点后面的数b截取字符串,
#当截取的字符串长度小于a时,还需要在其左侧补空格
print "string=%7.2s" % string # output: string= he
print "string=%2.7s" % string # output: string=hello
print "string=%10.7s" % string # output: string= hello

#还可以用%*.*s来表示精度,两个*的值分别在后面小括号的前两位数值指定
print "string=%*.*s" % (7,2,string) # output: string= he

%d 整型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
num=14  

#%d打印时结果是14
print "num=%d" % num # output: num=14

#%1d意思是打印结果为1位整数,当整数的位数超过1位时,按整数原值打印,所以%1d的打印结果还是14
print "num=%1d" % num # output: num=14

#%3d意思是打印结果为3位整数,当整数的位数不够3位时,在整数左侧补空格,所以%3d的打印结果是 14
print "num=%3d" % num # output: num= 14

#%-3d意思是打印结果为3位整数,当整数的位数不够3位时,在整数右侧补空格,所以%3d的打印结果是14_
print "num=%-3d" % num # output: num=14_

#%05d意思是打印结果为5位整数,当整数的位数不够5位时,在整数左侧补0,所以%05d的打印结果是00014
print "num=%05d" % num # output: num=00014

#%.3d小数点后面的3意思是打印结果为3位整数,
#当整数的位数不够3位时,在整数左侧补0,所以%.3d的打印结果是014
print "num=%.3d" % num # output: num=014

#%.0003d小数点后面的0003和3一样,都表示3,意思是打印结果为3位整数,
#当整数的位数不够3位时,在整数左侧补0,所以%.3d的打印结果还是014
print "num=%.0003d" % num # output: num=014

#%5.3d是两种补齐方式的综合,当整数的位数不够3时,先在左侧补0,还是不够5位时,再在左侧补空格,
#规则就是补0优先,最终的长度选数值较大的那个,所以%5.3d的打印结果还是 014
print "num=%5.3d" % num # output: num= 014

#%05.3d是两种补齐方式的综合,当整数的位数不够3时,先在左侧补0,还是不够5位时,
#由于是05,再在左侧补0,最终的长度选数值较大的那个,所以%05.3d的打印结果还是00014
print "num=%05.3d" % num # output: num=00014

#还可以用%*.*d来表示精度,两个*的值分别在后面小括号的前两位数值指定
#如下,不过这种方式04就失去补0的功能,只能补空格,只有小数点后面的3才能补0
print "num=%*.*d" % (04,3,num) # output: num= 014

%f 浮点型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import math  

#%a.bf,a表示浮点数的打印长度,b表示浮点数小数点后面的精度

#只是%f时表示原值,默认是小数点后5位数
print "PI=%f" % math.pi # output: PI=3.141593

#只是%9f时,表示打印长度9位数,小数点也占一位,不够左侧补空格
print "PI=%9f" % math.pi # output: PI=_3.141593

#只有.没有后面的数字时,表示去掉小数输出整数,03表示不够3位数左侧补0
print "PI=%03.f" % math.pi # output: PI=003

#%6.3f表示小数点后面精确到3位,总长度6位数,包括小数点,不够左侧补空格
print "PI=%6.3f" % math.pi # output: PI=_3.142

#%-6.3f表示小数点后面精确到3位,总长度6位数,包括小数点,不够右侧补空格
print "PI=%-6.3f" % math.pi # output: PI=3.142_

#还可以用%*.*f来表示精度,两个*的值分别在后面小括号的前两位数值指定
#如下,不过这种方式06就失去补0的功能,只能补空格
print "PI=%*.*f" % (06,3,math.pi) # output: PI=_3.142

CATALOG
  1. 1. 字符串基础
  2. 2. 删除字符串中的空格
  3. 3. 类似print(‘*’,end=’’)中end问题
  4. 4. xrange与range的区别
  5. 5. 使用md5和sha1
  6. 6. md5+os.urandom(n)产生随机字符串
  7. 7. urllib.unquote()
  8. 8. seek()函数
  9. 9. import sys 与from sys import argv
    1. 9.1. int.from_bytes和int.to_bytes函数
    2. 9.2. int.from_bytes函数
    3. 9.3. int.to_bytes函数
  10. 10. python之%s%d%f
    1. 10.1. %s字符串
    2. 10.2. %d 整型
    3. 10.3. %f 浮点型