用python写c
Project description
将python函数翻译为c++函数并运行
hello_world.py
import l0n0lc as lc
import math
@lc.映射函数(math.ceil, ['<cmath>'])
def cpp_ceil(v):
return f'std::ceil({lc.toCString(v)});'
@lc.映射函数(print, ['<iostream>'])
def cpp_cout(*args):
code = f'std::cout'
for arg in args:
code += f'<< {lc.toCString(arg)} << " "'
code += '<< std::endl;'
return code
@lc.jit(每次运行都重新编译=True)
def test_add(a: int, b: int) -> int:
if a > 1:
return a + b
for i in range(1, 10, 2):
a += i
for i in [1, 2, 3]:
a += i
a = math.ceil(12.5)
cc = {'a': 1, 'b': 2}
cc['123'] = 111
aa = [1, 3, 2]
aa[0] = 134
for i in range(3):
print(i, aa[i])
print('Hello World', a, b)
return a + b + 1
print(test_add(1, 3))
执行hello_world.py
$ python hello_world.py
0 134
1 3
2 2
Hello World 13 3
17
查看生成的c++代码文件
$ ls -al l0n0lcoutput
total 44
drwxr-xr-x 2 root root 4096 Sep 11 01:38 .
drwxrwxrwx 12 1000 1000 4096 Sep 10 02:36 ..
-rw-r--r-- 1 root root 599 Sep 11 01:38 test_add_@402bbf73254216d8.cpp
-rw-r--r-- 1 root root 150 Sep 11 01:38 test_add_@402bbf73254216d8.h
-rwxr-xr-x 1 root root 25264 Sep 11 01:38 test_add_@402bbf73254216d8.so
test_add_@402bbf73254216d8.h
#include <cmath>
#include <cstdint>
#include <iostream>
#include <string>
#include <unordered_map>
extern "C" int64_t test_add (int64_t a, int64_t b);
test_add_@402bbf73254216d8.cpp
#include "test_add_@402bbf73254216d8.h"
extern "C" int64_t test_add (int64_t a, int64_t b)
{
if ((a > 1))
{
return a + b;
}
for (int64_t i = 1; i < 10; i += 2)
{
a = a + i;
}
for (auto i : {1,2,3})
{
a = a + i;
}
a = std::ceil(12.5);;
std::unordered_map<std::string, int64_t> cc = {{ u8"a", 1 },{ u8"b", 2 }};
cc[u8"123"] = 111;
int64_t aa[] = {1,3,2};
aa[0] = 134;
for (int64_t i = 0; i < 3; ++i)
{
std::cout<< i << " "<< aa[i] << " "<< std::endl;
}
std::cout<< u8"Hello World" << " "<< a << " "<< b << " "<< std::endl;
return a + b + 1;
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
l0n0lc-0.6.0.tar.gz
(12.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
l0n0lc-0.6.0-py3-none-any.whl
(13.3 kB
view details)
File details
Details for the file l0n0lc-0.6.0.tar.gz.
File metadata
- Download URL: l0n0lc-0.6.0.tar.gz
- Upload date:
- Size: 12.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ae8aa91f1a8c8e3d849fe18497b39b0e38da94791869c4c72304372fdcc8282
|
|
| MD5 |
3e089f3c1c306316837ebb70a07fc375
|
|
| BLAKE2b-256 |
2385185ea622d2975715a0b8d4621b592c156494729b09e55d53a6c22e9bc41c
|
File details
Details for the file l0n0lc-0.6.0-py3-none-any.whl.
File metadata
- Download URL: l0n0lc-0.6.0-py3-none-any.whl
- Upload date:
- Size: 13.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce054c932088e53a8ef2d97db7e1963a7b4448c10c2359ed79a08e8629155b89
|
|
| MD5 |
18f90ce0543ea773ae4e03e9224c895a
|
|
| BLAKE2b-256 |
299c53739b8b91efe75eafdf29878110952af8b2fc4b1f6a26255b5c7e205b4f
|