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.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


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 
结果: 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_@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.1.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.1-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: l0n0lc-0.7.1.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.1.tar.gz
Algorithm Hash digest
SHA256 549b898c205ced6ccdd3f367de7920fe2dccbf1ac76bbfb8db02255136f61726
MD5 34d4d0362994e07d38c614702308bbb7
BLAKE2b-256 555b33acdb0a2384b26d27fb7d0d8f8c3660204aeb8d9f2225d9bc9b8212622f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: l0n0lc-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 13.5 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 99523c5c3e6123064eea09c1c5190a918d6bb594cc6bd028e66fe52aaa8f0083
MD5 64e7474963c2e096b9de67ff6c325b00
BLAKE2b-256 49b573b66f2ee568b76e2054680c5725f8be40dd93c0d5722494d637bf19666b

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