【4.2】python常用的内置函数--index/rindex/get/callable/locals

一、index与rindex

>>> s='love python love python!'
>>> s.index('python') #返回左边第一个子串'python'的下标
5
>>> s.rindex('python')#返回右边第一个子串'python'的下标
17

a ='aa12bb12cc12dd'
>>> a[:a.rindex('12')]
'aa12bb12cc'

str.index(sub[, start[, end]] ) 只能返回范围内的第一次出现该元素的index,但有的时候我们想要返回string内此元素所有的index,可以这样做

find_all = lambda c, s: [x for x in range(c.find(s), len(c)) if c[x] == s]

S = 'loveleetcode'
C = 'e'
index_all = find_all(S, C) # [3, 5, 6, 11]

二、字典 get()方法

语法:

dict.get(key, default=None)

参数:

下面是详细参数:

key:key在字典中查找。 default:在key不存在的情况下返回值None。

#!/usr/bin/python

dict = {'Name': 'Zara', 'Age': 7}

print "Value : %s" %  dict.get('Age')
print "Value : %s" %  dict.get('Sex', "Never")

这将输出以下结果:

Value : 7
Value : Never

三、callable

  1. 方法用来检测对象是否可被调用,可被调用指的是对象能否使用()括号的方法调用。

     >>> callable(callable)
     True
     >>> callable(1)
     False
     >>> 1()
     Traceback (most recent call last):
       File "<pyshell#5>", line 1, in 
     	1()
     TypeError: 'int' object is not callable
     >>>
    
  2. 可调用对象,在实际调用也可能调用失败;但是不可调用对象,调用肯定不成功。

  3. 类对象都是可被调用对象,类的实例对象是否可调用对象,取决于类是否定义了__call__方法。

     >>> class A: #定义类A
     	pass
    
     >>> callable(A) #类A是可调用对象
     True
     >>> a = A() #调用类A
     >>> callable(a) #实例a不可调用
     False
     >>> a() #调用实例a失败
     Traceback (most recent call last):
       File "<pyshell#31>", line 1, in 
     	a()
     TypeError: 'A' object is not callable
    
    
     >>> class B: #定义类B
     	def __call__(self):
     		print('instances are callable now.')
    
    
     >>> callable(B) #类B是可调用对象
     True
     >>> b = B() #调用类B
     >>> callable(b) #实例b是可调用对象
     True
     >>> b() #调用实例b成功
     instances are callable now.
    

四、locals

[python] view plain copy print?
def foo(arg, a):  
	x = 1  
	y = 'xxxxxx'  
	for i in range(10):  
		j = 1  
		k = i  
	print locals()  
   
#调用函数的打印结果    
foo(1,2)  
#{'a': 2, 'i': 9, 'k': 9, 'j': 1, 'arg': 1, 'y': 'xxxxxx', 'x': 1}  

配合着format用起来可爽了

cmd = (gzip_cmd + " | head -n {head_count} | "
					  "{seqtk} sample -s42 - {tocheck} | "
					  "awk '{{if(NR%4==2) print length($1)}}' | sort | uniq -c")
	count_out = subprocess.check_output(cmd.format(**locals()), shell=True,
										executable="/bin/bash")

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn