python函数中那些不为人知的秘密

python函数中那些不为人知的秘密

1、open(name[, mode[, buffering]])

open是用来打开文件进行读写操作的函数,默认的mode是’r'(只读),其他的包括’w'(覆盖写),’a’(追加写),’r+, w+, a+’这三个用来更新文件,即读和写。’rb,wb’用于读写二进制的文件,一般用于读写二进制文件,如图片等。open函数打开文件时默认使用的文本方式,即’rt’。buffering参数表示缓冲方式,默认为行缓冲。0表示不用缓冲,1表示行缓冲,其他正整数表示缓冲对应大小的字节数,负数表示使用默认的缓冲方式。

with open('cat.png', 'rb') as f:
    binary_content = f.read()

2、print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout)

由于print在python2中默认为语句声明,如果想使用print函数的话,需要使用以下方法来禁用默认声明:

from __future__ import print_function

f = open('test.txt', 'a')
print("hello world", file=f)
f.close()

3、iter(o[, sentinel])

iter函数返回一个迭代器,如果不传sentinel参数,则第一个参数o必须为序列,或是实现了迭代器协议的对象(实现了__iter__特殊方法的对象);如果提供的sentinel参数,则o必须为一个可调用对象,当迭代器返回的值等于sentinel时,则引发StopIteration,一个常见的应用场景是读取文件直到文件末尾。

with open('test.txt') as fp:
    for line in iter(fp.readline, ''):
        process_line(line)

4、next(iterator[, default])

next函数用于返回迭代器的下一个元素,如果提供了default参数,则当迭代器到结尾后返回该default值,如果不提供则引发StopIteration。

i = iter([1,2])
print next(i)
print next(i,'end')
print next(i,'end')

output:
1
2
end

5、enumerate(sequence, start=0)

enumerate函数返回一个元组,第一个元素为计数,初值为0,即start参数的值,第二个元素为sequence中的元素值。如果想修改起始的计数值,则修改start参数即可。

for i, v in enumerate(['hello','world'],start=1):
    print i,v

output:
1 hello
2 world

6、int(x, base=10)

int函数默认以10进制将x转化为整数,其他进制2、8、16同样支持。long函数同int。

h = hex(123)    #123转化为16进制数
i = int(h, base=16)
print i

output:
123

7、range(start, stop[, step])

range函数用来构造一个范围性的list,常用语for循环,默认的start=0,step=1,所以平时使用时一般只传入stop即可,但是在特殊需求时,则start和step参数就派上用场了,而且step支持负数。同xrange函数,只不过xrange返回的是一个迭代器,构造大list时推荐使用。

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)
[0, 3, 6, 9]

8、all(iterable)

当iterable中的所有元素都为True则该函数返回True,否则有任一元素不为真,则返回False

9、any(iterable)

只要iterable中有一个元素为True则该函数返回True,如果iterable为空,则返回False。

10、divmod(a, b)

divmod函数返回一个元组,第一个元素为商,第二个元素为余数

>>>divmod(5,2)
(2,1)

11、type(object) && type(name, bases, dict)

只传入一个参数时,type返回object的类型,经常结合isinstance函数使用,来判断对象类型。如果传入三个参数,则是用来动态的声明一个类,name即类的名称,bases为要继承的类的元组,dict为类的属性字典。

class A(object):
    a=1
B = type('B', (A,), dict(b=2))
c = B()
print c.a,c.b

output:
1 2

12、bin(x)、oct(x)、hex(x)

将整数转化为二进制、八进制、十六进制数

print bin(123)
print oct(456)
print hex(789)

output:
0b1111011
0710
0x315

13、cmp(x, y)

比较对象x、y的大小,x>y返回1;x<y返回-1; x==y返回0

print cmp(1, 2)
print cmp(2, 1)
print cmp(2, 2)

output:
-1
1
0

14、round(number[, ndigits])

round函数返回number四舍五入后的浮点值,ndigits为保留的小数位数,默认为0

>>> round(2.67)
3.0
>>> round(2.67, 1)
2.7

 

未完待续…

Comments are closed.