Python基础学习:内置函数(2)

11. @classmethod

       类方法装饰器调用的语法糖,它为被装饰的函数提供最基本的静态类方法。有关类方法的具体信息,请参阅标准类型层次结构中关于标准类型层次结构的文档。

 

12. compile(source,filename, mode, flags=0, dont_inherit=False, optimize=-1)

       该函数将source编译成代码或者AST对象。编译出的代码可以被函数exec()或函数eval()执行。被编译的source的具体存在形式可以是普通的字符串、字节字符串,或者是AST对象。

       filename参数提供source被读取的目录文件名。如果source不是从文件中读取,那么在此处filename参数通常为<string>。

       mode参数用于指定编译后代码的表示格式。如果source由一系列的语句构成,那么可以用exec()函数执行;如果source只由表达式组成,呢么可以用eval()函数执行;如果source由交互式声明单独构成,足可以用single()函数执行。

       flags与don’t_inhert都是可选参数,它们决定哪些future_statement语句会影响source的编译。如果不对两者进行赋值或者赋值为0,代码将与调用compile()函数中生效的future_statement语句同时生效。如果只给出了flags参数(dont_inhert参数未给出或给出为0),那么flags指定的future_statement语句也将生效。如果dont_inhert参数被给定了一个非零整型数字,flags就代表那么围绕compile()函数生效的future_statement语句。

       optimize参数决定编译的优化级别。默认值是-1(选择有-o选项给出的解释器优化级)。显式级别为0代表没有优化、__debug__的值为True;级别1代表断言被移除、__debug__的值为False;级别2中文档字符串也会被移除。

 

13. classcomplex([real[, imag]])

       该类可以用来构建复数,它将返回一个实例化的复数类(复数类也是一个基本的数字类型)。real代表实部,imag代表虚部(可以缺省,缺省时默认为0)。

该类支持类似如下调用法:

       complex(‘1+2j’)但不支持其中包含空格,

若包含空格如complex(‘1 + 2j’)解释器将会抛出ValueError错误。

 

14.delattr(object,name)

       object参数应当是一个对象;name参数是一个字符串,该字符串为object对象所包含的某个属性的名字。delattr()函数将在该对象允许删除该属性时,删除该对象内被name参数指定的属性。

例如:

delattr(x,'foobar')  等价于del x.foobar.

 

15. classdict(**kwarg)

   classdict(mapping, **kwarg)

   classdict(iterable, **kwarg)

       该类实例化后创造一个新的字典,创造的字典属于字典类。

 

16. dir([object])

       若[object]为空,该函数将返回本地作用域中的名称列表;若[object]不为空,该函数将返回object的有效属性列表。

       如果object有一个名叫__dir__()的方法(或函数),dir()函数必将返回object的属性列表。该原则允许那些可以自定义__getattr__()函数或__getattribute__()函数的对象,自主选择向dir()函数报告其属性的方式。

       如果该object不提供__dir__()方法,该函数将尽力从object的__dict__()方法(假如这个方法存在)里和其类型对象里收集属性信息;但该函数最后收集到的列表内的信息不一定完整,甚至在__getattr__()存在时会出现错误。

       由于该函数致力于收集最与object相关的信息,而非最完整的信息,该函数会对不同类型的对象产生不同的收集机制。

(1)如果object是模块对象,列表将包含模块的属性名;

(2)如果object是一个类型或者类对象,列表将包含其属性名,并包含其递归的属性所基于的属性;

(3)至于其他类型的object,列表将包含其属性名,并且包含其递归的属性所在类的基类。

例如:

>>> importstruct

>>> dir()   # 显示该模块空间内的属性名称

['__builtins__', '__name__', 'struct']

>>> dir(struct)  # 显示struct模块的属性名称

['Struct', '__all__', '__builtins__', '__cached__','__doc__', '__file__',

 '__initializing__', '__loader__', '__name__','__package__',

 '_clearcache','calcsize', 'error', 'pack', 'pack_into',

 'unpack','unpack_from']

>>> classShape:

...     def__dir__(self):

...         return ['area', 'perimeter', 'location']

>>> s = Shape()

>>> dir(s)

['area', 'location', 'perimeter']

17.divmod(a,b)

       参数a,b为非负数的数字。在使用整数除法时,该函数返回由a与b的商和余数组成的一堆数字,其结果类似于(a//b,a%b)。对于混合运算类型(包含浮点数float),该函数启用二元算数运算符规则,其结果类似于(q,a%b),q=math.floor(a/b),但q也可以小于1。无论如何,q * b + a%b的结果都十分接近于a(一般不等,这是由于计算机位数有限所必然产生的),如果a%b不为零,则它具有与b相同的符号,并且0<= abs(a%b)<abs(b)。

 

18. enumerate(iterable,start=0)

       该枚举函数返回一个枚举对象。iterable必须是一个序列、迭代器或者其它可迭代的对象。由enumerate函数返回的迭代器方法__next__()将输出一个由计数值(从start参数开始,默认值为0)和可迭代对象的一个顺序元素组成的元组。

例如:

>>> seasons= ['Spring','Summer','Fall','Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

该函数等价于下列函数:

>>> seasons= ['Spring','Summer','Fall','Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

19. eval(expression,globals=None, locals=None)

       参数expression是一个字符串,参数globals、locals属于可选参数。一旦选择传输globals,其对象应为字典;选择传输locals参数,其对象应为映射对象。

       expression参数所对应的字符串将被解析为Python表达式(或者说是条件列表),它使用globals和locals这两个参数所对应字典作为全局或本地命名空间。如果globals字典存在并且缺少'__builtins__'方法,则在解析表达式之前将当前全局变量复制到全局变量空间中。 这意味着表达式可以无障碍访问标准的builtins模块。如果省略了本地字典,则默认为全局字典。 如果两个字典均被省略,则在调用eval()的环境中执行表达式。返回值是评估表达式的结果,语法错误被报告为例外。

例如:

>>> x =1

>>> eval('x+1')

2

20. exec(object[,globals[, locals]])

       这个函数支持Python代码的动态执行。object必须是字符串或代码对象。如果它是一个字符串,则将该字符串解析为一组Python语句,然后执行该语句(除非发生语法错误)。 如果它是一个代码对象,它只是被执行。在任何情况下,执行的代码都应该作为有效的文件输入。请注意,即使在传递给exec()函数的代码的上下文中,return和yield语句也可能不在函数定义之外使用。返回值是None。

       在所有情况下,如果省略可选部件,则代码将在当前范围内执行。如果只提供全局变量,则它必须是一个字典,它将用于全局变量和局部变量。如果给定全局变量和局部变量,它们分别用于全局变量和局部变量。如果提供,本地人可以是任何映射对象。请记住,在模块级别,全局变量和本地变量是相同的字典。如果exec获取两个单独的对象作为全局变量和局部变量,那么代码将被嵌入类定义中执行。

       如果globals字典不包含键__builtins__的值,则将内置模块的内置字典的引用插入到该键下。通过这种方式,您可以通过将自己的__builtins__字典插入到全局变量中,然后将其传递给exec(),从而控制可执行代码可用的内建函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值