2014-09-20 61 views
-2

該代碼檢查系統是Windows還是Linux,導入所需的庫並定義一個可用的「getch」函數。
但是...函數「_d」可以在lambda內完成嗎?將函數轉換爲lambda表示

def _d(): 
    import sys, tty, termios 
    f = sys.stdin.fileno() 
    o = termios.tcgetattr(f) 
    try: 
     tty.setraw(sys.stdin.fileno()) 
     c = sys.stdin.read(1) 
    finally: 
     termios.tcsetattr(f, termios.TCSADRAIN, o) 
    return c 

_u = type('',(), { 
    '__init__': lambda s: setattr(s, '', (None for sys in [__import__('sys')] for tty in [__import__('tty')])), 
    '__call__': _d() 
}) 

_w = None if ImportError else __import__("msvcrt").getch() 

getch = (type('',(), { 
    '__init__': lambda s: setattr(s, 'i', _u()) if ImportError else setattr(s, 'i', _w()), 
    '__call__': lambda s: s.i() 
}))() 


我目前有:

setattr(type('',(),{}), '', (
    None for sys in [__import__('sys')] 
    for tty in [__import__('tty')] 
    for termios in [__import__('termios')] 
    for f in sys.stdin.fileno() 
    for o in termios.tcgetattr(f) 
    for _ in tty.setraw(sys.stdin.fileno()) 
    for c in sys.stdin.read(1) 
    for _ in termios.tcsetattr(f, termios.TCSADRAIN, o) 
)) 

但是,這並不讓我回到 「C」。

+5

哇...爲什麼地球上做你想做的事是什麼?另外,'lambda s:_d()'應該是'_d'。 – Veedrac 2014-09-20 00:59:56

+0

只是因爲。 而thx,我改變了「_u .__ call__」中的代碼後錯過了那個。 – 2014-09-20 01:01:36

+3

這是一個非常非常糟糕的主意。釘不適合鑽孔,好嗎?請停止嘗試將它塞入。你將打破該死的事情。 – 2014-09-20 01:08:22

回答

0

好吧,如果你必須:

lambda: exec(""" 
def _d(): 
    import sys, tty, termios 
    f = sys.stdin.fileno() 
    o = termios.tcgetattr(f) 
    try: 
     tty.setraw(sys.stdin.fileno()) 
     c = sys.stdin.read(1) 
    finally: 
     termios.tcsetattr(f, termios.TCSADRAIN, o) 
    return c 
""", globals()) or _d() 

似乎比其它更具可讀性。


要解決您定的代碼,雖然嘗試:

lambda: next(
    c 
    for sys in [__import__('sys')] 
    for tty in [__import__('tty')] 
    for termios in [__import__('termios')] 
    for f in [sys.stdin.fileno()] 
    for o in [termios.tcgetattr(f)] 
    for _ in [tty.setraw(sys.stdin.fileno())] 
    for c in [sys.stdin.read(1)] 
    for _ in [termios.tcsetattr(f, termios.TCSADRAIN, o)] 
) 
+2

那麼,「可讀」不是我想要我的代碼的東西。 – 2014-09-20 01:06:48

+1

@WilliamFernandes那麼,最好使用Perl。在Python **可讀性計數中。** – 2014-09-20 01:08:34

+0

@AshwiniChaudhary我試圖讓整個代碼適合單個變量語句,以便在我的Python腳本中使用它。 – 2014-09-20 01:11:49