2016-03-18 3 views
0

Независимо от того, хорошая идея или нет, я хотел знать, можно ли заставить метод принять определенный ввод, например символ без кавычек («!»). Exempli gratia:Как заставить функцию Python принять определенный вход?

def special_print(text): 
    """Print <text> unless ! (no quotes!) is passed as argument.""" 
    if text == !: 
     print("Easter egg!") 
    else: 
     print(text) 


special_print("Hello, World"!) 
>>> Hello, World! 

special_print("!") 
>>> ! 

special_print(!) 
>>> Easter egg! 

Возможно ли это? Просто любопытно.

+2

Не, если Вы не хотели бы раскошелиться Python с собственным синтаксисом. – TigerhawkT3

ответ

1

Это невозможно, если вы не создаете собственную сборку источника Python.

Исключение составляет только ..., что соответствует объекту Ellipsis в Python 3 (не Python 2). Таким образом, вы можете сделать:

def special_print(text): 
    """Print <text> unless ... (no quotes!) is passed as argument.""" 
    if text == ...: 
     print("Easter egg!") 
    else: 
     print(text) 

... предназначен для использования в срезах, но на Python 3 вы можете использовать его в любом месте.

1

Нет, это невозможно в том, как вы описали, но я предполагаю, что вы хотите использовать такой синтаксис в интерактивной оболочке, иначе я даже не могу представить, как это может быть полезно. В этом случае вы сможете создать собственную оболочку с модулем cmd. Например:

import cmd 

class SpecialPrint(cmd.Cmd): 

    def do_print(self, line): 
     print line 

    def do_exit(self, line): 
     return True 

if __name__ == '__main__': 
    SpecialPrint().cmdloop() 

Запуск этого кода будет порождать оболочку, которая работает следующим образом:

(Cmd) print ! 
! 
(Cmd) print anything you want 
anything you want 
(Cmd) exit 
1

Вы вроде просят другой вопрос окольным путем. Python динамически типизирован, поэтому функция принимает любой тип. Вы можете сделать что-то похожее на то, что хотите, используя другие типы, возможно используя объекты Sentinel.

Sentinel = object() 

def special_print(text): 
    if text is Sentinel: 
     print("Easter egg!") 
    else: 
     print(text) 

special_print(Sentinel) 

Вы не можете использовать ! характер, потому что это не является допустимым именем переменной. Вы не должны использовать Sentinel объекты либо просто использовать не строковые переменные

def special_print(text): 
    if isinstance(text, int): 
     print("Easter egg!") 
    else: 
     print(text) 

special_print(1) 
Смежные вопросы