Форум программистов, компьютерный форум, киберфорум
Наши страницы
Hyppoprogramm
Войти
Регистрация
Восстановить пароль
Оценить эту запись

С++ в Python

Запись от Hyppoprogramm размещена 03.01.2020 в 18:23
Метки python

Как Вы думаете, на каком языке программирования написан данный код?
Код:
cout<<"hello, world!";
На Python.
Да, да на Python!

Вы можете сами попробовать!
Только перед этим надо ввести этот код (разбирать будем позже):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys, inspect
def excepthook(cls,msg,tb):
    if cls == NameError:
        lines = inspect.getsourcelines(tb.tb_frame)[0];line = lines[tb.tb_lineno-1]
        if line[:5] == 'cin>>':
            line = line[5:-1]
            if line[-1] == ';':line = line[:-1]
            cin>>line
sys.excepthook = excepthook
class Cout():
    def __lshift__(self,text):sys.stdout.write(str(text));sys.stdout.flush();return cout;
class Cin():
    def __rshift__(self,var):frame = inspect.currentframe().f_back;frame.f_locals[var] = input();return cin;
cout = Cout();Cout = None;del(Cout)
cin = Cin();Cin = None;del(Cin)
Далее, пишем, например
Python
1
2
cin>>x;
cout<<"hello!";
Это делает то же самое, что и код
Python
1
2
x = input()
print("hello!",end='',flush=True)
Давайте разбирать мою дребедень!
Сначала немного понятнее напишем: добавим комментарии, сделаем код читаемым.
Вот что получится:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Импортируем нужные модули
import sys, inspect
 
# Пишем хук
def excepthook(cls,msg,tb):
    # Если без хука, то cin>>x; будет выдавать NameError, ведь переменной x нету.
    if cls == NameError:
        lines = inspect.getsourcelines(tb.tb_frame)[0]
        line = lines[tb.tb_lineno-1]
        if line[:5] == 'cin>>':
            line = line[5:-1]
            if line[-1] == ';':
                line = line[:-1]
            cin>>line
# Изменяем значение sys.excepthook
sys.excepthook = excepthook
# Создаём класс Cout
class Cout():
    # Назначаем функцию для оператора <<
    def __lshift__(self,text):
        # Выводим текст
        sys.stdout.write(str(text))
        # Обновляем
        sys.stdout.flush()
        # Возвращаем экземпляр класса Cout (строка 37)
        return cout;
        # Без return cout нельзя было бы делать cout << "hello, " << "world";
# Создаём класс Cin
class Cin():
    # Назначаем функцию для оператора >>
    def __rshift__(self,var):
        # Получаем frame-объект
        frame = inspect.currentframe().f_back
        # Назначаем переменную
        frame.f_locals[var] = input();
# Создаём экземпляр класса Cout
cout = Cout()
# Удаляем класс Cout (он нам больше не нужен)
# Без Cout = None 43 строка выдала бы ошибку:
#   NameError: name "Cout" is not defined
Cout = None
# Удаляем из памяти объект Cout
del(Cout)
# Удаляем класс Cin
cin = Cin()
Cin = None
del(Cin)
Далее, почитаем комментарии и разберёмся, что к чему.
P.S. Про хуки потом.
Благодаря данному коду можно писать кое-что в Python на языке C++
И не только cout и cin: модули для Python могут быть также написаны на C или C++.
Размещено в Python
Просмотров 196 Комментарии 4
Всего комментариев 4
Комментарии
  1. Старый комментарий
    В первом коде точку с запятой добавьте, для аутентичности
    Запись от ТабуретY размещена 04.01.2020 в 03:48 ТабуретY вне форума
  2. Старый комментарий
    Аватар для Hyppoprogramm
    Цитата:
    Сообщение от ТабуретY Просмотреть комментарий
    В первом коде точку с запятой добавьте, для аутентичности
    Спасибо, исправил.
    Запись от Hyppoprogramm размещена 04.01.2020 в 07:32 Hyppoprogramm вне форума
  3. Старый комментарий
    Аватар для Новичок
    Прикольно по-своему, но зачем ? Разве что попрактиковаться в Python.
    Запись от Новичок размещена 07.01.2020 в 00:39 Новичок вне форума
  4. Старый комментарий
    Аватар для Hyppoprogramm
    Цитата:
    Сообщение от Новичок Просмотреть комментарий
    но зачем ?
    У меня в блоге про Python всё просто так
    Ну, или чтобы изучить python изнутри (ещё будут статейки).
    Запись от Hyppoprogramm размещена 07.01.2020 в 14:12 Hyppoprogramm вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.