Skip to main content

用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.直接调用函数
def test_直接调用():
    return 123

@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['c'] = 3
    print('输出map:')
    for ii in cc:
        print(ii.first, ii.second) # type: ignore
    aa = [1, 3, 2]
    aa[0] = 134
    print('输出list:')
    for i in range(3):
        print(i, aa[i])
    print('Hello World', a, b)
    return a + b + 1 + test_直接调用()

print('结果:', test_add(1, 3))

执行hello_world.py

$ python hello_world.py
输出map: 
c 3 
a 1 
b 2 
输出list: 
0 134 
1 3 
2 2 
Hello World 13 3 
结果: 140

查看生成的c++代码文件

$ ls -al l0n0lcoutput/ 
total 48
drwxr-xr-x  2 root root  4096 Sep 11 02:32 .
drwxrwxrwx 11 1000 1000  4096 Sep 11 02:32 ..
-rw-r--r--  1 root root   794 Sep 11 02:32 test_add_@0bfbc28de3631ddd.cpp
-rw-r--r--  1 root root   150 Sep 11 02:32 test_add_@0bfbc28de3631ddd.h
-rwxr-xr-x  1 root root 29496 Sep 11 02:32 test_add_@0bfbc28de3631ddd.so

test_add_@0bfbc28de3631ddd.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_@0bfbc28de3631ddd.cpp

#include "test_add_@141921ba1aaa0352.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"c"] = 3;
  std::cout<< u8"输出map:" << " "<< std::endl;
  for (auto ii : cc)
  {
    std::cout<< ii.first << " "<< ii.second << " "<< std::endl;
  }

  int64_t aa[] = {1,3,2};
  aa[0] = 134;
  std::cout<< u8"输出list:" << " "<< std::endl;
  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.7.4.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

l0n0lc-0.7.4-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file l0n0lc-0.7.4.tar.gz.

File metadata

  • Download URL: l0n0lc-0.7.4.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for l0n0lc-0.7.4.tar.gz
Algorithm Hash digest
SHA256 e053258d783aeb710bb26c29ed4637ecb56a839b13dd93a99ec6967169f29b0b
MD5 a55dae2a2d9da7d6f3e3205d1b0129bf
BLAKE2b-256 4a4ca76cb71315259486613a8c1a9ce44253087cb65e0496e66fc9a0ab581fec

See more details on using hashes here.

File details

Details for the file l0n0lc-0.7.4-py3-none-any.whl.

File metadata

  • Download URL: l0n0lc-0.7.4-py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for l0n0lc-0.7.4-py3-none-any.whl
Algorithm Hash digest
SHA256 eefb4df72f6be7074a4852ab8a024964ae8e29a47f60cd08bf57ec4b883d15b3
MD5 ecf4f8e00f588de9d7cf4e2cf99957ec
BLAKE2b-256 7d306d6c6aecddb4374eafeb2260fef865882849e779810a1ebd6f1f10ed0b1e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page