首页 > 代码库 > Python 常用内置函数

Python 常用内置函数

abs 取绝对值

print(abs(-1))  #结果1

all(...)

    all(iterable) -> bool

    

    Return True if bool(x) is True for all values x in the iterable.

    If the iterable is empty, return True.

 

如果iterable的所有元素不为0、‘‘、False或者iterable为空,all(iterable)返回True,否则返回False;函数等价于:

1 def all(iterable):
2 
3     for element in iterable:
4         if not element:
5             return False
6     return True

 

示例:

 1 >>> all([‘a‘, ‘b‘, ‘c‘, ‘d‘])  #列表list,元素都不为空或0
 2 True
 3 >>> all([‘a‘, ‘b‘, ‘‘, ‘d‘])  #列表list,存在一个为空的元素
 4 False
 5 >>> all([0, 1,2, 3])  #列表list,存在一个为0的元素
 6 False
 7    
 8 >>> all((‘a‘, ‘b‘, ‘c‘, ‘d‘))  #元组tuple,元素都不为空或0
 9 True
10 >>> all((‘a‘, ‘b‘, ‘‘, ‘d‘))  #元组tuple,存在一个为空的元素
11 False
12 >>> all((0, 1,2, 3))  #元组tuple,存在一个为0的元素
13 False
14    
15 >>> all([]) # 空列表
16 True
17 >>> all(()) # 空元组
18 True

注意:空元组、空列表返回值为True,这里要特别注意。

any(...)

    any(iterable) -> bool

    

    Return True if bool(x) is True for any x in the iterable.

    If the iterable is empty, return False.

 

any(iterable)说明:参数iterable:可迭代对象;

如果当iterable所有的值都是0、‘‘或False时,那么结果为False,如果所有元素中有一个值非0、‘‘或False,那么结果就为True

函数等价于:

1 def any(iterable):
2 
3    for element in iterable:
4 
5        if  element:
6 
7            return False
8 
9    return True

 

示例:

 1 >>> any([‘a‘, ‘b‘, ‘c‘, ‘d‘])  #列表list,元素都不为空或0
 2 True
 3  
 4 >>> any([‘a‘, ‘b‘, ‘‘, ‘d‘])  #列表list,存在一个为空的元素
 5 True
 6  
 7 >>> any([0, ‘‘, False])  #列表list,元素全为0,‘‘,false
 8 False
 9  
10 >>> any((‘a‘, ‘b‘, ‘c‘, ‘d‘))  #元组tuple,元素都不为空或0
11 True
12  
13 >>> any((‘a‘, ‘b‘, ‘‘, ‘d‘))  #元组tuple,存在一个为空的元素
14 True
15  
16 >>> any((0, ‘‘, False))  #元组tuple,元素全为0,‘‘,false
17 False
18   
19 >>> any([]) # 空列表
20 False
21  
22 >>> any(()) # 空元组
23 False

 

ascii(object)

    As repr(), return a string containing a printable representation of an object, but escape the non-ASCII characters in the string returned by repr() using \x\u or \U escapes. This generates a string similar to that returned by repr() in Python 2.

 

说明:

    1. 返回一个可打印的对象字符串方式表示,如果是非ascii字符就会输出\x,\u或\U等字符来表示。与python2版本里的repr()是等效的函数。

>>> ascii(1)
‘1‘
>>> ascii(‘&‘)
"‘&‘"
>>> ascii(9000000)
‘9000000‘
>>> ascii(‘中文‘) #非ascii字符
"‘\\u4e2d\\u6587‘"

 

bin,oct,hex

print(bin(10)) #10进制转2进制
print(oct(10)) #10进制转8进制
print(hex(10)) #10进制转16进制

 

bytearray([source[, encoding[, errors]]])

返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。可以通过“字节与字节数组操作”章节来查看相关字节数组的内容。下面说明一下几种特别的使用方法:

1. 如果source是一个字符串,那么必须给出endcoding是什么样编码的,以便转换为合适的字节保存。

2. 如果source是一个整数,那么这个数组将初始化为空字节。

3. 如果source是一个有缓冲区接口的对象,那么只读的接口初始到数组里。

4. 如果source是一个迭代对象,那么这个迭代对象的元素都必须符合0 <= x < 256,以便可以初始化到数组里。

 

如果没有输入任何参数,默认就是初始化数组为0个元素。

 

例子:

#bytearray()函数  
  
a = bytearray(1234深圳, utf-8)  
print(a)  
  
b = bytearray()  
print(b)  
  
c = [1,4,5,7,8]  
print(bytearray(c)) 

输出结果如下:

bytearray(b1234\xe6\xb7\xb1\xe5\x9c\xb3)

bytearray(b‘‘)

bytearray(b\x01\x04\x05\x07\x08)

bytes

返回一个新的数组对象,这个数组对象不能对数组元素进行修改。每个元素值范围: 0 <= x < 256。bytes函数与bytearray函数主要区别是bytes函数产生的对象的元素不能修改,而bytearray函数产生的对象的元素可以修改。因此,除了可修改的对象函数跟bytearray函数不一样之外,其它使用方法全部是相同的。最后它的参数定义方式也与bytearray函数是一样的。

#bytes()函数  
  
a = bytes(abc, utf-8)  
print(a)  
  
b  = bytes(1)  
print(b)  
  
c = bytes([2,3,6,8])  
print(c)  

输出结果如下:

b‘abc‘

b‘\x00‘

b‘\x02\x03\x06\x08‘

callable 是否是可被调用的,返回True或False

print(callable(bytes))
print(callable(abs))

打印结果:
True
True

chr() 函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符

>>> chr(65)
A

ord() 函数是chr()函数(对于8位的ASCII字符串)或unichr()函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值,如果所给的Unicode字符超出了你的Python定义范围,则会引发一个TypeError的异常。

>>>ord(a) 
97

 

compile()--编译   执行字符串表示的函数,并为该函数提供全局变量

  这个函数有什么用呢? 一个最简单的例子, 就是我们的代码, 会被解释器读取,解释器读取后的其实是字符串, 然后通过compile编译后, 又转换成python可识别的代码.这样python就能执行了. 

  这里就有一个例子, 是将一段str字符串, 通过compile编译为python代码. 具体如下: 

  参考自http://www.cnblogs.com/wupeiqi/p/4592637.html

本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!usr/bin/env python
#coding:utf-8
  
namespace = {‘name‘:‘wupeiqi‘,‘data‘:[18,73,84]}
  
code =  ‘‘‘def hellocute():return  "name %s ,age %d" %(name,data[0],) ‘‘‘
  
func = compile(code, ‘<string>‘"exec")
  
exec func in namespace
  
result = namespace[‘hellocute‘]()
  
print result

此段代码的执行结果是:name wupeiqi,age 18

上述代码解析:

  • 第6行,code是一个字符串,该字符串的内容是一个函数体。
  • 第8行,将code字符串编译成函数 hello
  • 第10行,将函数 hello 添加到namespace字典中(key为hello),同时也将python的所有内置函数添加到namespace字段中(key为__builtins__),如此一来,namespace中的内容好比是一个个的全局变量,即
    1
    2
    3
    4
    5
    name = wupeiqi
    data = [18,73,84]
     
    def hellocute():
        return  "name %s ,age %d" %(name,data[0],)
  • 第12行,执行Hello函数并将返回值复制给result
  • 第14行,输入result

这段代码用的很是巧妙有木有,亮瞎狗眼有木有,居然把字符串变成了函数并且还为该函数提供了全局变量。对于该功能,它就是python的web框架中模板语言部分至关重要的部分,因为在模板处理过程中,首先会读取html文件,然后分割html文件,再然后讲分割的文件组成一个字符串表示的函数,再再然后就是利用上述方法执行字符串表示的函数。

complex([real[, imag]]) 

本函数可以使用参数real + imag*j方式创建一个复数。也可以转换一个字符串的数字为复数;或者转换一个数字为复数。如果第一个参数是字符串,第二个参数不用填写,会解释这个字符串且返回复数;不过,第二个参数不能输入字符串方式,否则会出错。real和imag参数可以输入数字,如果imag参数没有输入,默认它就是零值,这个函数就相当于int()或float()的功能。如果real和imag参数都输入零,这个函数就返回0j。有了这个函数,就可以很方便地把一个列表转换为复数的形式。

注意:当想从一个字符串的复数形式转换复数时,需要注意的是在字符串中间不能出现空格,比如写成complex(‘1+2j’),而不是写成complex(1 +2j’), 否则会返回ValueError异常。

#complex()  
  
print(complex(1))  
print(complex(2+1j))  
print(complex(2, 5))  
  
l = [1, 3, 4, 5]  
for i in l:  
    print(complex(i, 5))  

结果输出如下:

(1+0j)

(2+1j)

(2+5j)

(1+5j)

(3+5j)

(4+5j)

(5+5j)

dict()  函数用于创建一个字典。返回一个字典

语法:

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

参数说明:

  • **kwargs -- 关键字
  • mapping -- 元素的容器。
  • iterable -- 可迭代对象
>>>dict()                        # 创建空字典
{}
>>> dict(a=a, b=b, t=t)     # 传入关键字
{a: a, b: b, t: t}
>>> dict(zip([one, two, three], [1, 2, 3]))   # 映射函数方式来构造字典
{three: 3, two: 2, one: 1} 
>>> dict([(one, 1), (two, 2), (three, 3)])    # 可迭代对象方式来构造字典
{three: 3, two: 2, one: 1}
>>>

dir() 返回包含要查询对象的所有属性名称的列表

要查看python某个模块可以干什么,先要导入模块,之后用上面讲过的方式查看就可以。比如要查看sys模块都可以干什么,可以像下边这样操作:

>>> import sys  # 获得属性列表,在这里是sys模块的属性列表

>>> dir(sys)
[__displayhook__, __doc__, __excepthook__, __name__, __package__, __stderr__, __stdin__, __stdout__, _clear_type_cache, _compact_freelists,_current_frames, _getframe, api_version, argv, builtin_module_names, byteorder, call_tracing, callstats, copyright, displayhook, dllhandle, dont_write_bytecode, exc_info, excepthook, exec_prefix, executable,exit, flags, float_info, getcheckinterval, getdefaultencoding, getfilesystemencoding, getprofile, getrecursionlimit, getrefcount, getsizeof,gettrace, getwindowsversion, hexversion, intern, maxsize, maxunicode, meta_path, modules, path, path_hooks, path_importer_cache, platform, prefix, ps1, ps2, setcheckinterval, setprofile, setrecursionlimit, settrace, stderr, stdin, stdout, subversion, version, version_info, warnoptions, winver]

divmod(a,b)  方法返回的是a//b(除法取整)以及a对b的余数,返回结果类型为tuple,参数:a,b可以为数字(包括复数)

>>> divmod(9,2)
(4, 1)
>>> divmod(11,3)
(3, 2)
>>> divmod(1+2j,1+0.5j)
((1+0j), 1.5j)

enumerate() 

  • enumerate()是python的内置函数
  • enumerate在字典上是枚举、列举的意思
  • 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
  • enumerate多用于在for循环中得到计数
  • enumerate()返回的是一个enumerate对象,例如: 

技术分享

例:

  • 如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

 

list1 = ["", "", "一个", "测试"]
for i in range (len(list1)):
    print i ,list1[i]
  • 上述方法有些累赘,利用enumerate()会更加直接和优美:
list1 = ["", "", "一个", "测试"]
for index, item in enumerate(list1):
    print index, item
>>>
0 这
12 一个
3 测试
  • enumerate还可以接收第二个参数,用于指定索引起始值,如:
list1 = ["", "", "一个", "测试"]
for index, item in enumerate(list1, 1):
    print index, item
>>>
123 一个
4 测试

eval() 将字符串str当成有效的表达式来求值并返回计算结果

语法: eval(source[, globals[, locals]]) -> value

  参数:

    source:一个Python表达式或函数compile()返回的代码对象

    globals:可选。必须是dictionary

    locals:可选。任意map对象

可以把list,tuple,dict和string相互转化。
#################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type str>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type list>
#################################################
字符串转换成字典
>>> a = "{1: ‘a‘, 2: ‘b‘}"
>>> type(a)
<type str>
>>> b = eval(a)
>>> print b
{1: a, 2: b}
>>> type(b)
<type dict>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type str>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type tuple>

exec() 是Python的built-in函数。其作用很好描述,就是执行以string类型存储的Python代码

>>> i = 2
>>> j = 3
>>> exec("ans = i + j")
>>> print("Answer is: ", ans)
Answer is:  5
>>>

在上个例子里面,ans变量并没有显式的定义,但仍然可以在print函数中调用。这是exec语句执行了"ans = i + j"中的代码,定义了ans变量。

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:

def is_odd(x):
    return x % 2 == 1

然后,利用filter()过滤掉偶数:

>>>filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

结果:
[1, 7, 9, 17]

float() 函数功能将一个数值或者字符转换成浮点型数值

>>> float(3)
3.0
>>> float(3)
3.0

format() 函数

语法

它通过{}和:来代替%。

“映射”示例

通过位置

In [1]: ‘{0},{1}‘.format(‘kzc‘,18) Out[1]: ‘kzc,18‘ In [2]: ‘{},{}‘.format(‘kzc‘,18) Out[2]: ‘kzc,18‘ In [3]: ‘{1},{0},{1}‘.format(‘kzc‘,18) Out[3]: ‘18,kzc,18‘

字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。
通过关键字参数

In [5]: ‘{name},{age}‘.format(age=18,name=‘kzc‘) Out[5]: ‘kzc,18‘

通过对象属性

class Person: def __init__(self,name,age): self.name,self.age = name,age def __str__(self): return ‘This guy is {self.name},is {self.age} old‘.format(self=self)
In [2]: str(Person(‘kzc‘,18)) Out[2]: ‘This guy is kzc,is 18 old‘

通过下标

In [7]: p=[‘kzc‘,18] In [8]: ‘{0[0]},{0[1]}‘.format(p) Out[8]: ‘kzc,18‘

有了这些便捷的“映射”方式,我们就有了偷懒利器。基本的python知识告诉我们,list和tuple可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数(通过和*)。所以可以轻松的传个list/tuple/dict给format函数。非常灵活。

格式限定符

它有着丰富的的“格式限定符”(语法是{}中带:号),比如:

填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
比如

In [15]: ‘{:>8}‘.format(‘189‘) Out[15]: ‘ 189‘ In [16]: ‘{:0>8}‘.format(‘189‘) Out[16]: ‘00000189‘ In [17]: ‘{:a>8}‘.format(‘189‘) Out[17]: ‘aaaaa189‘

精度与类型f
精度常跟类型f一起使用

In [44]: ‘{:.2f}‘.format(321.33345) Out[44]: ‘321.33‘

其中.2表示长度为2的精度,f表示float类型。

其他类型
主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。

In [54]: ‘{:b}‘.format(17) Out[54]: ‘10001‘ In [55]: ‘{:d}‘.format(17) Out[55]: ‘17‘ In [56]: ‘{:o}‘.format(17) Out[56]: ‘21‘ In [57]: ‘{:x}‘.format(17) Out[57]: ‘11‘

用,号还能用来做金额的千位分隔符。

In [47]: ‘{:,}‘.format(1234567890)
Out[47]: ‘1,234,567,890‘

frozenset() 定义不可变集合,集合不能加也不能减

s1=frozenset({1,2,3,4})
print(type(s1))

globals()查看全局作用域

print(globals())

hash() 返回对象的哈希值,用整数表示。哈希值在字典查找时,可用于快速比较键的值,相等的数值,即使类型不一致,计算的哈希值是一样的

>>> 1.0 == 1
True
>>> hash(1.0)
>>> hash(1)
>>> hash(1.0000)

help() 查看帮助文档

#给函数加文档解释,用到单引号,双引号,三引号
def func():
    # ‘‘‘
    # test function
    # :return:
    # ‘‘‘
    pass

print(help(func))

id() 是python解释器实现的功能,只是反映了变量在内存的地址,但并不是真实的内存地址

x=1
print(id(x))

input() 提供了promat参数,首先将参数值输出到标准的输出,并且不换行。函数读取用户输入的值,将其转换成字符串。

>>> s = input(please input your name:)
please input your name:Ain
>>> s
Ain

int() 将一个数字或base类型的字符串转换成整数

int(3.14)            # 3
int(2e2)             # 200
int(100, 2)          # 出错,base 被赋值后函数只接收字符串

int(23, 16)      # 35
int(Pythontab, 8)      # 出错,Pythontab不是个8进制数

isinstance()来判断一个对象是否是一个已知的类型

如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True。如果object不是一个给定类型的的对象, 则返回结果总是False。
如果classinfo不表示一个类(类型对象), 那么它要么是一个类的元组, 或者递归地包含这样的(由数据类型构成的)元组.其他的序列类型是不被允许的。
如果classinfo不是一种数据类型或者由数据类型构成的元组,将引发一个TypeError异常。
举例:
>>> isinstance(1, int)
True
>>> isinstance(1.0, float)
True

 

Python 常用内置函数