繁体   English   中英

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

[英]How to force a Python's function to accept a certain input?

不管这是一个好主意,我都想知道是否有可能强制一种方法接受某个输入,例如不带引号的字符(“!”)。 示例:

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!

那有可能吗? 只是好奇。

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

唯一的例外是... ,它等于Python 3(不是Python 2)中的Ellipsis对象。 因此,您可以执行以下操作:

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

...被设计用于切片,但是从Python 3开始,您可以在任何地方使用它。

不,这不可能按照您描述的方式进行,但是我想您想在交互式外壳程序中使用这种语法,否则我什至无法想象这有什么用。 在这种情况下,使用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

您有点以回旋处的方式提出另一个问题。 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM