如何强制Python函数接受某个输入?

时间:2016-03-18 21:51:46

标签: python function methods input

无论它是否是个好主意,我想知道是否有可能强制某个方法接受某个输入,例如没有引号的字符("!&#34 )。 Exemptigratia:

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!

这可能吗?好奇。

3 个答案:

答案 0 :(得分:1)

除非您自己构建Python源代码,否则这是不可能的。

唯一的例外是...,它等同于Python 3中的Ellipsis对象(不是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 :(得分:1)

这不可能以你描述的方式实现,但我想你想在交互式shell中使用那种语法,否则我甚至无法想象它是如何有用的。在这种情况下,使用cmd模块编写自己的shell将是最佳选择。例如:

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()

运行此代码将生成一个shell,其工作方式如下:

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

答案 2 :(得分: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)