python内部提供了很多内建函数。下面让我们从a-z开始学习python的内建函数
1.1
callable(object)
如果object参数是可以调用的对象(callable),则返回true,否则就返回false。
a = 123
def fun():
print("hello")
print(callable(a))
print(callable(fun()))
输出的结果是:
False
hello
False
func()是可以调用的对象,所以返回true,但是变量a不是,所以返回false
1.2
chr(i)
返回unicode代码是i的字符
print(chr(97))
输出的结果是:a
i的有效只范围是0~1114111,超过范围会报错。
1.3
classmethod(function)
把类函数当作类的一个方法返回。类方法第一个参数是指明类,跟类中函数一样,第一个参数是指明类实例。类方法修饰符采用下面的格式来使用:
class C:
@classmethod
def f(cls, arg1, arg2, ...):
...
从上面格式来看,@classmethod是函数在前置的一个修饰符,可以查看语言参考手册。经过类方法修饰符的函数,可以直接通过类来调用,比如C.f()方式;也可以通实例的方式来调用,比如C().f()方式,但这个实例在这个函数里被忽略掉了,没起到什么作用。如果类方法修饰符的函数,在继承类时,派生类作为第一个参数传递给这个函数,也就是cls等于派生类。
类方法修饰符定义的函数与C++或JAVA里静态函数是不一样的,如果要相似的功能,需要使用另外一个修饰符staticmethod。
classmethod设计的目的是什么呢?其实与Python面向对象编程有关的,因为Python不支持多个的参数重载构造函数,比如在C++里,构造函数可以根据参数个数不一样,可以写多个构造函数。Python为了解决这个问题,采用classmethod修饰符的方式,这样定义出来的函数就可以在类对象实例化之前调用这些函数,就相当于多个构造函数,解决多个构造函数的代码写在类外面的问题。
与修饰符staticmethod的区别是类方法有一个类型参数,而静态方法没有。静态方法主要用来解决全局函数的作用域的问题,而类方法是解决多个构造函数的问题,因此应用场境不一样。
1.3这个函数的说明引用来自csdn:http://blog.csdn.net/caimouse/article/details/41016797
1.4
complex([real[,imag])
大多数有语言基础的应该都很了解这个complex不管入门哪种语言,感觉刚开始都回去写一个复数类
complex([real[,imag]])
返回一个复数,并且格式是:
real + imag * j
当然,你可以把一个字符串或者一个数字转换为一个复数,如果第一个参数real就是一个字符串,那么这个字符串就会被理解成复数。并且不需要第二个参数
complex就会立即执行。字符串只能是第一个参数,第二个参数绝不可能是字符串的。当你传入的参数是字符串,这个字符串一定不能包含空格,否则会报错
请看几个实例:
print(complex(1,2))
输出的结果是:(1+2j)
print(complex(1))
输出的结果是:(1+0j)
print(complex('1+2j'))
输出的结果是:(1+2j)
print(complex('1 + 2j'))
报错:ValueError: complex() arg is a malformed string
1.5
delattr(object,name)
函数的参数包括一个obj和一个字符串,字符串必须是obj的属性,这个函数删除指定的属性。
class example:
pass
a = example()
setattr(a,'ok','hello')
print('before--a.ok:',a.ok)
delattr(a,'ok')
print('after--a.ok:',a.ok)
看看输出的结果:
before--a.ok: hello
Traceback (most recent call last):
File "D:\Python\xode\try.py", line 7, in <module>
print('after--a.ok:',a.ok)
AttributeError: 'example' object has no attribute 'ok'
显然,a的'ok'属性被删除。
1.6
dir([object])
参数object可选,当没有参数时,返回当前范围内的列表名;有参数的时候,试图返回该对象的有效属性列表
如果这个对象有一个方法名:__dir__(),这个方法将被调用并且返回其属性列表。如果对象没有提供__dir__()
,这个函数会试图去从对象的__dict__属性收集信息。
这是python3.4.3文档给出的例子:
>>> import struct
>>> dir() # show the names in the module namespace
['__builtins__', '__name__', 'struct']
>>> dir(struct) # show the names in the struct module
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
'__initializing__', '__loader__', '__name__', '__package__',
'_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
>>> class Shape:
... def __dir__(self):
... return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']
1.7
divmod(a,b)
需要两个数字参数,并且返回一系列由这两个参数整除而产生的商和余数
对于不同的操作符,运用二进制算术运算符
1.对于整数integers,这个函数的运算结果是(a//b,a%b)
2.对于浮点数float,这个函数的运算结果是(q,a%b),其中q = math.floor(a/b)
几个实例:
print(divmod(15,4))
运算的结果是:(3, 3)
print(divmod(15.2,4))
运算的结果是:(3.0, 3.1999999999999993)
print(divmod(15.2,0))
ZeroDivisionError: float divmod()
1.8
enumerate(iterable,start = 0)
返回一个枚举(enumerate)对象,iterable必须是一个可以迭代的对象,
people = ['girl','boy','man','woman']
print(list(enumerate(people)))
返回的结果是:
[(0, 'girl'), (1, 'boy'), (2, 'man'), (3, 'woman')]
如果这样
print(list((enumerate(people,start = 5))))
返回的结果是:
[(5, 'girl'), (6, 'boy'), (7, 'man'), (8, 'woman')]
可以看出第二个参数start是开始枚举开始的序号。默认是0。
1.9
eval(expression, globals=None, locals=None)
参数是一个字符串,和可选的全局和本地,如果提供了全局这个参数,那么
全局参数必须是一个字典对象。如果提供本地参数,本地必须是映射对象。
x = 1
print(eval('x+1'))
输出是:2
江苏南京 钟志远 904727147