mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
...
This commit is contained in:
parent
18ca12ab9c
commit
eb378af1c3
167
docs/cheatsheet.md
Normal file
167
docs/cheatsheet.md
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
---
|
||||||
|
icon: log
|
||||||
|
title: 'Cheat Sheet'
|
||||||
|
order: 22
|
||||||
|
---
|
||||||
|
|
||||||
|
## Basics
|
||||||
|
|
||||||
|
Setup pocketpy
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "pocketpy.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
Create a python virtual machine
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
VM* vm = new VM();
|
||||||
|
```
|
||||||
|
|
||||||
|
Dispose a python virtual machine
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
delete vm;
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute a source string
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
vm->exec("print('Hello!')");
|
||||||
|
```
|
||||||
|
|
||||||
|
Evaluate a source string
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* obj = vm->eval("123");
|
||||||
|
std::cout << CAST(i64, obj); // 123
|
||||||
|
```
|
||||||
|
|
||||||
|
Compile a source string into a code object
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
CodeObject_ co = vm->compile("print('Hello!')", "main.py", EXEC_MODE);
|
||||||
|
```
|
||||||
|
|
||||||
|
Execute a compiled code object
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
try{
|
||||||
|
vm->_exec(co); // may throw
|
||||||
|
}catch(Exception& e){
|
||||||
|
std::cerr << e.summary() << std::endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Interop with native types
|
||||||
|
|
||||||
|
Create primitive objects
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* obj;
|
||||||
|
obj = VAR(1); // create a int
|
||||||
|
obj = VAR(1.0); // create a float
|
||||||
|
obj = VAR("123"); // create a string
|
||||||
|
obj = VAR(true); // create a bool
|
||||||
|
```
|
||||||
|
|
||||||
|
Create a tuple object
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// obj = (1, 1.0, '123')
|
||||||
|
Tuple t(3);
|
||||||
|
t[0] = VAR(1);
|
||||||
|
t[1] = VAR(1.0);
|
||||||
|
t[2] = VAR("123");
|
||||||
|
PyObject* obj = VAR(std::move(t));
|
||||||
|
```
|
||||||
|
|
||||||
|
Create a list object
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// obj = [1, 1.0, '123']
|
||||||
|
List t;
|
||||||
|
t.push_back(VAR(1));
|
||||||
|
t.push_bask(VAR(1.0));
|
||||||
|
t.push_back(VAR("123"));
|
||||||
|
PyObject* obj = VAR(std::move(t));
|
||||||
|
```
|
||||||
|
|
||||||
|
Create a dict object
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// obj = {'x': 1, 'y': '123'}
|
||||||
|
Dict d(vm);
|
||||||
|
d.set(VAR('x'), VAR(1));
|
||||||
|
d.set(VAR('y'), VAR('123'));
|
||||||
|
PyObject* obj = VAR(std::move(d));
|
||||||
|
```
|
||||||
|
|
||||||
|
Get native types from python objects
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* obj;
|
||||||
|
i64 a = CAST(i64, obj);
|
||||||
|
f64 b = CAST(f64, obj);
|
||||||
|
Str& c = CAST(Str&, obj); // reference cast
|
||||||
|
bool d = CAST(bool, obj);
|
||||||
|
|
||||||
|
Tuple& e = CAST(Tuple&, obj); // reference cast
|
||||||
|
List& f = CAST(List&, obj); // reference cast
|
||||||
|
Dict& g = CAST(Dict&, obj); // reference cast
|
||||||
|
```
|
||||||
|
|
||||||
|
## Access python types
|
||||||
|
|
||||||
|
Access built-in python types
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* int_t = vm->_t(vm->tp_int);
|
||||||
|
PyObject* float_t = vm->_t(vm->tp_float);
|
||||||
|
PyObject* object_t = vm->_t(vm->tp_object);
|
||||||
|
PyObject* tuple_t = vm->_t(vm->tp_tuple);
|
||||||
|
PyObject* list_t = vm->_t(vm->tp_list);
|
||||||
|
```
|
||||||
|
|
||||||
|
Access extended python types
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* voidp_t = VoidP::_type(vm);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Access attributes
|
||||||
|
|
||||||
|
Check an object supports attribute access
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* obj;
|
||||||
|
bool ok = !is_tagged(obj) && obj->is_attr_valid();
|
||||||
|
```
|
||||||
|
|
||||||
|
Get and set attributes
|
||||||
|
|
||||||
|
```python
|
||||||
|
class MyClass:
|
||||||
|
def __init__(self, x, y):
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
```
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* obj = vm->exec("MyClass(1, 2)");
|
||||||
|
PyObject* x = vm->getattr(obj, "x"); // obj.x
|
||||||
|
vm->setattr(obj, "x", VAR(3)); // obj.x = 3
|
||||||
|
```
|
||||||
|
|
||||||
|
## Call python functions
|
||||||
|
|
||||||
|
```python
|
||||||
|
def add(a, b):
|
||||||
|
return a + b
|
||||||
|
```
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PyObject* f_add = vm->eval("add");
|
||||||
|
PyObject* ret = vm->call(f_add, VAR(1), VAR(2));
|
||||||
|
std::cout << CAST(i64, ret); // 3
|
||||||
|
```
|
@ -3,7 +3,7 @@ output: .retype
|
|||||||
url: https://pocketpy.dev
|
url: https://pocketpy.dev
|
||||||
branding:
|
branding:
|
||||||
title: pocketpy
|
title: pocketpy
|
||||||
label: v1.1
|
label: v1.2
|
||||||
logo: "./static/logo.png"
|
logo: "./static/logo.png"
|
||||||
favicon: "./static/logo.png"
|
favicon: "./static/logo.png"
|
||||||
meta:
|
meta:
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <random>
|
#include <random>
|
||||||
|
|
||||||
#define PK_VERSION "1.1.6"
|
#define PK_VERSION "1.1.7"
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user