python의 바이트 코드
15936 단어 programmingpythontutorialbytecode
머리말
이것은 바이트 코드,python 바이트 코드에 관한 강좌입니다.primero habiarrancado a hacer 이것은 바이트 코드에 관한 강좌입니다. 그의 코드는 github.io이고 가상 세계에 관한 개발팀입니다. 그의 개발팀은 매우 중요한 개발팀입니다.
선결 조건
구렁이 군단
구렁이는 무엇입니까?
파이톤은 polimorfismo, 대상방향 프로그래밍 (POO/OOP), 프로그래밍 명령을 지원하는 다중 반경을 설명하는 프로그래밍 언어이다.
무슨 기능이 있습니까?
커다란 구렁이는 해석 과정에서 더욱 조용해지고, 해석 과정에서 컴퓨터에서 작동하며 설명에 사용된다.Python no generals un código de máquina como generaría un program a en c o c++,sino que function a más o menos como Java,tiene una maquina virtual que interpretata bytecode.이것은 컴퓨터 바이트 코드에 관한 완전한 버전이다.Acáno vamos a utilizar compiledators, si no que vamos a manejar implementations del lenguaje, básicamente intérpretes que justamente, 바이트 코드를 설명합니다.IronPython(Implementación C#), Jython(Implementación hecha puro Java), Micropython(버전 hecha en C y optimizada para ejbutarse en micro controller) 등 다양한 estos가 존재한다.
이것은 구렁이의 기능에 대한 연구이자 구렁이에 대한 묘사이다.
실용 바이트 코드
Bueno, tenemos dos cosas, primero, 바이트 코드 pelado, es decIr, 16진수 바이트 표시 및 조작 코드 y parámetros, y en segundo lugar, tenemos
CodeType
, Python의 데이터와 sirve para crear 바이트 코드 SIRVA.무장력, 군사력, 군사력, 군사력 dis, 군사력, 군사력, 문서와 데이터.import dis
def suma(x, y):
return x+y
dis.dis(suma)
셀리다 델레타조 데코디고 데시지언트 호텔1. 4 0 LOAD_FAST 0(x)
2. 2 LOAD_FAST 1(y)
3. 4 BINARY_ADD
4. 6 RETURN_VALUE
>>>
Como podemos ver, todo eso es 바이트, ahora la explicación.관찰 과정에서 우리는 이것이 매우 좋은 해석이라는 것을 발견하였다.
파이톤의Cada instrucción은 하나의 조작 코드(Código de operación)이다. 특히caso usamos 3
LOAD_FAST BINARY_ADD RETURN_VALUE
은 명확한 Cada uno이다.x
e y
파라 사마로스 데비즈 0 y 1은 없나요?".부에노, 나는 오덴의 응답자다.
0 (x)
y (y)
y 1 CodeType
)*.Cómore creamos nuestra función para hacerla 바이트 코드?
부에노에서 주요 수입 상품은
FunctionType
과 CodeType: argcount, kwonlyargcount, nlocals, stacksize, flags, codestring, constants, names, varnames, filename, name, firstlineno, lnotab, freevars, freecellvars
(제3자 기능 부문), 주요 수입 상품은 types이다.import dis
from types import CodeType, FunctionType
def suma(x, y):
return x+y
이것은 새로운 목표이다import dis
from types import CodeType, FunctionType
def suma(x, y):
return x+y
# Esto lo voy a explicar despues, son flags
CO_OPTIMIZED = 0x0001
CO_NEWLOCALS = 0x0002
CO_NOFREE = 0x0002
mi_codigo = CodeType(
2, #argcount
0, #kwonlyargcount
2, #nlocals
2, #stacksize
(CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE), #flags
bytes([124, 0, 124, 1, 23, 0, 83, 0]), #codestring
(0,), #constantes
(), #nombres de las constantes o globales (names)
('x','y',), #nombres de variables (varnames)
'blog_sin_nombre', #filename
'suma_crafteada', #name (nombre del codigo/funcion)
9, #Firstlineno (Primer linea donde aparece este cod.)
b'', #lnotab
(), #freevars
() ,#freecellvars
)
부에노, 부에노...이것은 새로운 시작이고 명확한 시작이다.b''
논문푸시옹을 묘사하다
argcount
콘티다드 아그소스 호텔
kwonlyargcount
Cantidad de 키워드 매개변수
nlocals
변수 로케일 수량(En este caso 2, x e y)
스택 크기
Máximo tama to 는 비교적 짧은 el stack (el stack 프레임 안의caso 2 porque x+y 요구 사항의espacios에 있음)
깃발
바이트 코드를 확정하는 과정에서 사용자는 referencia을 선택할 수 있다.아만자도에는 아덴트라르의 깃발이 하나도 없다.
코드 열
Esto es una lista (배열) de bytes contennendo lasequencecia en cuestión, en el 124 유효 로딩 속도, 23 바이너리 추가 y 83 반환값
상수
Como numeros enteros, False, True, 내장 함수...)
성함
군사 탄틴부르크 공원
varnames
Nombre de variables locales
파일 이름
이것은 대표적인 거문고 줄로, 미국 동남부에는 어떠한 거문고 줄도 없다
이름:
Nombre del code object o la función
일선 번호
초급 도서의 대표성, 건축과 관련된 중요한 도서, 더 많은 위장 도서 포함
나타브
바이트 코드 대상의 편이량과 직선 편이량에 대해 우리가 흥미를 느끼지 않는 것은 레네아스의 정보입니다. 사용자는
FunctionType
입니다.프리바
강좌 avanzado에서 변수를 설명하고 패키지에서 실용 프로그램을 사용합니다
cellvars
이것은 아주 좋은 해석이다
마지막 목표는
FunctionType: code, globals, name, argdefs, closure
년의 미래를 준비하는 것이다. 첫 번째 목표는 0 목표이고 두 번째 목표는 조작 코드이다. 예를 들어 [124, 0,...]son el argumento,y la segunda es que cada bytecode puede variar de version on en version,para saber u orientate sobre el code string,podes utilizar el siguiente snippetdef suma(x,y):
return x+y
suma.__code__.co_code
# Salida esperada en Python 3.7.9 (La versión que yo uso)
# b'|\x00|\x01\x17\x00S\x00'
# Los bytes los interpreta como characters, probablemente para que sea mas legible. (Si ponemos chr(124) nos va a imprmír el carácter |)
수공예품
Vamos a utilizar FunctionType ahora.
mi_codigo
논문푸시옹을 묘사하다
코드
Código objeto(osea, 코드 유형)
전역 변수
이 모드는 전 세계적으로 {Nombre: Valor Nombre} de ese modo, Nombre pasa ser Un identificator, y luego se에 el-como si fuese 변수를 추가합니다.
이름(Opcional)
Sobreescribe el valor que tiene el código objeto)
argdefs(선택 사항)
이것은 특수한 변론 방식의 하나이다
닫기
자유로운 길에서 너는 매우 불편함을 느낄 것이다
부에노, 클레로입니다. 아헬라 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로 소로입니다.
import dis
from types import CodeType, FunctionType
def suma(x, y):
return x+y
이것은 새로운 목표이다import dis
from types import CodeType, FunctionType
def suma(x, y):
return x+y
# Esto lo voy a explicar despues, son flags
CO_OPTIMIZED = 0x0001
CO_NEWLOCALS = 0x0002
CO_NOFREE = 0x0002
mi_codigo = CodeType(
2, #argcount
0, #kwonlyargcount
2, #nlocals
2, #stacksize
(CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE), #flags
bytes([124, 0, 124, 1, 23, 0, 83, 0]), #codestring
(0,), #constantes
(), #nombres de las constantes o globales (names)
('x','y',), #nombres de variables (varnames)
'blog_sin_nombre', #filename
'suma_crafteada', #name (nombre del codigo/funcion)
9, #Firstlineno (Primer linea donde aparece este cod.)
b'', #lnotab
(), #freevars
() ,#freecellvars
)
_suma = FunctionType(mi_codigo, {})
resultado = _suma(213,3)
print(resultado)
# Salida esperada
# 216
이것은 저의 토도 폴 아홀라입니다. 저는 보이의sub荐r otro 강좌에서 설명하기를 희망합니다. closures을 보십시오.벤트스
Reference
이 문제에 관하여(python의 바이트 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/torswq/python-bytecode-pelado-i-5e2j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)