2016-03-29 30 views
0

Python-> curses modülünü kullanarak, çok fazla çizim/yenileme deneyimi yaşadım. Aynı programı C++ 'da yazdım ve sorunum olmadı. Kodu: Program ekranda her hücre için rengini değiştirmek için bir kaçış dizisi gönderdiği içinPython Curses, birbirini izleyen farklı renklerde yavaş yavaş yenileme

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import curses 
import locale 

# Inint global console config 
locale.setlocale(locale.LC_ALL, '') 


def main(stdscr): 
    curses.start_color() 
    curses.use_default_colors() 
    curses.init_pair(1, curses.COLOR_YELLOW, 0) 
    curses.init_pair(2, curses.COLOR_RED, 0) 

    max_rows, max_cols = stdscr.getmaxyx() 
    max_cont = max_rows * max_cols 
    try: 
     for i in range(1, max_cont): 
      stdscr.addstr('█', curses.color_pair(i % 2 + 1)) 
    except curses.ERR: 
     pass 
    stdscr.refresh() 
    stdscr.getch() 

curses.wrapper(main) 

cevap

0

O yavaştır. Bu, '█' (3 bayt UTF-8 dizesi) göndermek yerine, renk bilgisine ek olarak gönderir. (unmap ile) okunabilir biçimde, böyle bir şey de:

\E[31m 
\E[40m\342\226\210 
\E[33m 
\E[40m\342\226\210 
\E[31m 
\E[40m\342\226\210 
... 

(birkaç terminalleri bağımsız bunları yapamaz beri) lanetler her hücre için ön plan ve arka plan renklerini hem yazıyor çünkü. Bu, veri için kaçış dizileri ve 3 bayt için 10 bayttır, bu da 4 kat daha yavaş hale getirir.

+0

Fakat neden C++ ile yazılmış aynı kod çok hızlı? Ve '█' karakterini değiştirsem bile, örneğin 'A' ile hala yavaştır. –

+0

Python bir yorumlayıcıdır ve C++ uygulamasında bir derleyici uygulamasından daha fazla iş vardır. –

+0

Gönderilen veri miktarının buradaki sorun olduğunu sanmıyorum çünkü söylediğim gibi sadece renkler değiştiğinde daha yavaştır. Yalnızca bir renk çifti kullanırsam, gönderilen veri miktarı aynıdır ancak süper hızlı çalışır. –