声明:
本博客欢迎转发,但请保留原作者信息!
新浪微博:@孔令贤HW;
博客地址:http://blog.csdn.net/lynn_kong
内容系本人及本人团队学习、研究和总结,如有雷同,实属荣幸!
示例:
>>> 'http://blog.csdn.net/lynn_kong'.partition('://') ('http', '://', 'blog.csdn.net/lynn_kong') >>> 'blog.csdn.net/lynn_kong'.partition('://') ('blog.csdn.net/lynn_kong', '', '')返回一个3元的tuple,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。如果找不到指定的分隔符,则返回仍然是一个3元的tuple,第一个为整个字符串,第二和第三个为空串。
与split(sep, 1)的区别在于:split返回的可能不是固定长度的返回值,它返回的是一个list,如果找到,则返回一个2元list,如果没找到,则返回一个1元的list,并不返回分隔符。partition其实是为了替换find,index而产生的,并不是为了替换split。
rpartition就从右到左匹配。
本节转自网络,源地址不详
filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回:
>>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] >>> def f(x): return x != 'a' >>> filter(f, "abcdef") 'bcdef'map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:
>>> def cube(x): return x*x*x >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] >>> def cube(x) : return x + x ... >>> map(cube , "abcde") ['aa', 'bb', 'cc', 'dd', 'ee']另外map也支持多个sequence,这就要求function也支持相应数量的参数输入:
>>> def add(x, y): return x+y >>> map(add, range(8), range(8)) [0, 2, 4, 6, 8, 10, 12, 14]reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:
>>> def add(x,y): return x + y >>> reduce(add, range(1, 11)) 55 (注:1+2+3+4+5+6+7+8+9+10) >>> reduce(add, range(1, 11), 20) 75 (注:1+2+3+4+5+6+7+8+9+10+20)lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,这些叫做lambda的函数,是从LISP借用来的,可以用在任何需要函数的地方:
>>> g = lambda x: x * 2 >>> g(3) 6 >>> (lambda x: x * 2)(3) 6
对 l 中的所有元素以':'做分割,得出一个列表。对这个列表的每一个元素做字符串strip,形成一个列表。对这个列表的每一个元素做直接返回操作(这个地方可以加上过滤条件限制),最终获得一个字符串被':'分割的列表,列表中的每一个字符串都做了strip,并可以对特殊字符串过滤。
关于lambda函数再举一个例子:
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
lambda函数在布尔环境中总是返回为真。
如果collapse变量为真,则分割s字符串,否则返回原字符串。
而不必像其他高级语言一样,写一个函数,两个入参,在函数内判断collapse变量。
def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class MyClass: pass
使用:
>>> a = MyClass()
>>> b = MyClass()
>>> a == b
True
另一种方法:
class VRMClient(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(VRMClient, cls).__new__(cls, *args, **kwargs) return cls._instance
import socket socket.gethostbyname(socket.gethostname()) socket.gethostbyname_ex(socket.gethostname())方法二:
import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) def getHwAddr(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', ifname[:15])) return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]使用:
def __str__(self): if len(self.__dict__) > 0: plist = [] for field in self.__dict__: plist.append(str(field) + ": " + str(self.__dict__[field])) return reduce(lambda x,y: x + "\n" + y, plist) else: return ""
import pkg_resources plugins = [] for ep in pkg_resources.iter_entry_points(group='my_ep_group_id'): plugins.append(ep.load()) print plugins[0]()
该函数是从字典中获取key的值,如果获取不到的时候就按照参数中设置该key。
>>> a={} >>> a['key']='123' >>> print (a) {'key': '123'} >>> print (a.setdefault('key','456')) #显示a这个字典的'key'值的内容,因为字典有,所以不会去设置它 123 >>> print (a.setdefault('key1','456')) #显示a这个字典的'key1'值的内容,因为字典没有,所以设置为456了 456 >>> a {'key1': '456', 'key': '123'}
property( [fget[, fset[, fdel[, doc]]]])
如果要使用property函数,首先定义class的时候必须是object的子类。通过property的定义,当获取成员x的值时,就会调用getx函数,当给成员x赋值时,就会调用setx函数,当删除x时,就会调用delx函数。使用属性的好处就是因为在调用函数,可以做一些检查。如果没有严格的要求,直接使用实例属性可能更方便。
而@property将提供一个ready-only property(除非提供@var.setter)
10.1、遍历 list 的同时获取索引
for i, element in enumerate(mylist): # Do something with i and element pass10.2、defaultdict
defaultdict 将会利用接受的参数为每个不存在的 key 创建对应的值,这里我们传递的是 list,所以它将为每个 key 创建一个 list 类型的值。
from collections import defaultdict persons_by_age = defaultdict(list) for person in persons: persons_by_age[person.age].append(person)
10.3、列表排序
函数原型:
L.sort(cmp=None, key=None, reverse=False)
cmp是比较函数,key是一个接受一个参数的函数,sort将按照返回值大小进行排序,举例:
port1={'network_id':'11111111', 'name':'port1'} port2={'network_id':'11111111', 'name':'port2'} port3={'network_id':'22222222', 'name':'port3'} port4={'network_id':'33333333', 'name':'port4'} ports = [port2, port1, port3, port4] network_ids = ['22222222', '11111111', '33333333'] if __name__ == '__main__': accessor = lambda x: x['network_id'] ports.sort(key=lambda i: network_ids.index(accessor(i))) print ports;
try: do_some_func() except KeyboardInterrupt: print "User Press Ctrl+C,Exit" except EOFError: print "User Press Ctrl+D,Exit"