自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python解釋器簡(jiǎn)介(2):代碼對(duì)象

開發(fā) 后端
這是Python解釋器簡(jiǎn)介的第二部分。第一部分請(qǐng)點(diǎn)擊這里 。

這是Python解釋器簡(jiǎn)介的第二部分。***部分請(qǐng)點(diǎn)擊這里 。

完成編譯之前的三個(gè)步驟都是在檢查一個(gè)簡(jiǎn)單的函數(shù)對(duì)象。我們現(xiàn)在來談?wù)劯顚哟蔚膶?duì)象——函數(shù)的代碼對(duì)象。

  1. >>> def foo(a): 
  2. ...     x = 3 
  3. ...     return x + a 
  4. ... 
  5. >>> foo 
  6. <function foo at 0x107ef7aa0
  7. >>> foo.func_code 
  8. <code object foo at 0x107eeccb0, file "<stdin>", line 1

從上面的代碼,你能發(fā)現(xiàn)所謂的代碼對(duì)象就是函數(shù)對(duì)象的一個(gè)屬性。(這個(gè)函數(shù)對(duì)象還有許多其它的屬性,但它們大多都很無聊,因?yàn)?foo 函數(shù)實(shí)在是太簡(jiǎn)單了。)

代碼對(duì)象是在Python編譯器中生成的,并且在解釋器中完成解釋工作。它向解釋器傳遞“開工了”的信息。我們?cè)賮砜纯创a對(duì)象的屬性。

  1. >>> dir(foo.func_code) 
  2. ['__class__''__cmp__''__delattr__''__doc__''__eq__''__format__''__ge__'
  3. '__getattribute__''__gt__''__hash__''__init__''__le__''__lt__''__ne__''__new__'
  4. '__reduce__''__reduce_ex__''__repr__''__setattr__''__sizeof__''__str__'
  5. '__subclasshook__''co_argcount''co_cellvars''co_code''co_consts''co_filename'
  6. 'co_firstlineno''co_flags''co_freevars''co_lnotab''co_name''co_names''co_nlocals'
  7. 'co_stacksize''co_varnames'

這個(gè)屬性列表雖然很長(zhǎng),但是其中大多數(shù)屬性我們今天并不會(huì)涉及。我們只關(guān)注3個(gè)有趣的 foo 函數(shù)代碼對(duì)象的屬性。

  1. >>> foo.func_code.co_varnames 
  2. ('a''x'
  3. >>> foo.func_code.co_consts 
  4. (None3
  5. >>> foo.func_code.co_argcount 
  6. 1 

通過調(diào)用它們,我們能依次得到:變量名、函數(shù)中已知的常量和函數(shù)參數(shù)的數(shù)量。但是目前為止,我們還是不知道生成代碼對(duì)象的指令到底是什么。事實(shí)上,這個(gè)指令叫做字節(jié)碼。字節(jié)碼也是代碼對(duì)象的一個(gè)屬性:

  1. >>> foo.func_code.co_code 
  2. 'd\x01\x00}\x01\x00|\x01\x00|\x00\x00\x17S' 

我們得到了許多待分解的信息。這里到底發(fā)生了什么?在下一部分,我們將深入研究字節(jié)碼。

原文鏈接:http://blog.jobbole.com/56300/

責(zé)任編輯:陳四芳 來源: 伯樂在線
相關(guān)推薦

2014-01-21 09:15:12

Python函數(shù)

2010-03-04 11:07:21

Python解釋器

2021-07-07 10:31:19

對(duì)象池模式解釋器模式設(shè)計(jì)模式

2009-08-06 10:55:46

C#代碼解釋器

2016-09-12 14:05:27

PythonPython解釋器Web

2019-07-24 13:42:34

Python編程語(yǔ)言代碼

2024-05-15 10:07:11

Agents人工智能CSV

2023-10-18 10:48:44

Python解釋器

2010-02-01 17:11:45

Python 解釋器

2010-02-03 15:01:33

Python 解釋器

2010-10-28 10:54:46

oracle對(duì)象權(quán)限

2010-02-01 13:55:12

Python 解釋器

2010-02-01 17:41:54

Python 解釋器

2010-02-22 16:40:22

Python解釋器

2010-03-12 09:29:04

Python 代碼

2022-01-05 08:58:08

Python解釋器編程語(yǔ)言

2009-09-29 13:36:41

Spring業(yè)務(wù)服務(wù)對(duì)

2020-07-20 07:56:28

JavaScript開發(fā)技術(shù)

2018-09-18 15:58:46

硬盤JVMPython

2010-12-16 13:56:57

匿名對(duì)象.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)