__builtin__模块
这个模块包含Python中使用的内建函数,一般不用手动导入这个模块,Python会帮你做好一切。
下面将一一介绍这个模块所常有的函数。
1. 加载和重载模块:
import语句是用来导入外部模块的(也可使用from -- import)其实import是靠调用内建函数__import__来工作的。
例如 import spam 其实就是相当于执行下面一行代码
spam = __import__( 'spam' , globals() , locals() , [] , 0)
import spam.ham相当于执行下面一行代码
spam = __import__( 'spam.ham' , globals() , locals() , [] , 0)
from spam.ham import eggs , sausage as saus 相当于执行下面一行代码
_temp = __import__( 'spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)
eggs = _temp.eggs
saus = _temp.sausage
2. dir()
返回由给定模块,类,实例或其他类型的所有成员组成的列表。
import sys
def dump(value):
print(value,'=>',dir(value))
dump([]) #list
dump({}) #dictionary
dump('string')
dump(len) #function
dump(sys) #module
3. vars()
返回的是包含每个成员当前值的字典,如果你使用不带参数的vars,它将返回当前局部名称空间的可见元素(同locals()函数)
book = 'library2'
pages = 250
scripts = 350
print('the %(book)s book contains more than %(scripts)s scripts'%vars())
结果是:the library2 book contains more than 350 scripts
4. type()
允许你检查一个变量的类型,这个函数会返回一个type descriptor(类型描述符),它对于python解释器提供的每个类型都是不同的。
def dump(value):
print(type(value),value)
dump(1)
dump(1.0)
dump('one')
结果:
<class 'int'> 1
<class 'float'> 1.0
<class 'str'> one
5. callable()
可以检查一个对象是否是可调用的,对于函数,方法,lambda函式,类,以及实现了__call__方法的类实例,它都返回True
def dump(function):
if callable(function):
print(function,'is callable')
else:
print(function,'is not callable')
class A:
def method(self,value):
return value
class B:
def __call__(self,value):
return value
a = A()
b = B()
dump(0)
dump('string')
dump(callable)
dump(dump)
dump(A)
dump(B)
dump(a)
dump(b)
结果:
0 is not callable
string is not callable
<built-in function callable> is callable
<function dump at 0x00C4FED0> is callable
<class '__main__.A'> is callable
<class '__main__.B'> is callable
<__main__.A object at 0x00C6C1F0> is not callable
<__main__.B object at 0x00C6C2F0> is callable
6. isinstance()
检查一个对象是不是给定类(或其子类)的实例
class A:
pass
class B:
pass
class C(A):
pass
class D(A,B):
pass
def dump(object):
print(object,'=>')
if isinstance(object,A):
print('A')
if isinstance(object,B):
print('B')
if isinstance(object,C):
print('C')
if isinstance(object,D):
print('D')
a = A()
b = B()
c = C()
d = D()
dump(a)
dump(b)
dump(c)
dump(d)
dump(0)
dump('string')
结果:
<__main__.A object at 0x00BADA30> =>
A
<__main__.B object at 0x00C6C1F0> =>
B
<__main__.C object at 0x00C6C2F0> =>
A
C
<__main__.D object at 0x00C6C3B0> =>
A
B
D
0 =>
string =>
7. issubclass()
用于检查一个类对象是否与给定类相同,或者是给定类的子类,注意isinstance可以接收任何对象作为参数,而issubclass函数在接受非类对象参数时会引发TypeError异常。
8. eval()
将一个字符串作为python表达式值,你可以传递一串文本,简单的表达式,或者使用内建python函数。
def dump(expression):
result = eval(expression)
print(expression,'=>',result,type(result))
dump('1')
dump('1.0')
dump('str')
dump('1.0+2.0')
dump("'*'*10")
dump("len('world')")
结果:
1 => 1 <class 'int'>
1.0 => 1.0 <class 'float'>
str => <class 'str'> <class 'type'>
1.0+2.0 => 3.0 <class 'float'>
'*'*10 => ********** <class 'str'>
len('world') => 5 <class 'int'>
9. compile()
Eval函数只针对简单的表达式,如果处理大块的代码,你应该使用compile和exec函数,成功执行后,compile函数会返回一个代码对象,你可以使用exec语句执行它。
例1:
BODY = "print('the ant, an introduction')"
code = compile(BODY,'<script>','exec')
print(code)
exec(code)
结果:
<code object <module> at 0x00B0B5C0, file "<script>", line 1>
the ant, an introduction
例2:
class CodeGeneratorBackend:
def begin(self,tab='\t'):
self.code = []
self.tab = tab
self.level = 0
def end(self):
self.code.append('')
return compile(''.join(self.code),'<code>','exec')
def write(self,str):
self.code.append(self.tab*self.level+str)
def indent(self):
self.level = self.level + 1
def dedent(self):
if self.level == 0:
raise SyntaxError('internal error in code generator')
self.level = self.level - 1
c = CodeGeneratorBackend()
c.begin()
c.write('for i in range(5):')
c.indent()
c.write("print('code generator made easy')")
c.dedent()
exec(c.end())
结果:
code generator made easy
code generator made easy
code generator made easy
code generator made easy
code generator made easy
以上就是python的一些内建函数,当然这个是不全的,希望自己能够活学活用吧。