如何强制Python函数接受特定的输入?

2024-04-29 21:34:05 发布

您现在位置: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!

有可能吗?只是好奇。你知道吗


Tags: 方法texthelloworldeggdef字符引号
3条回答

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

唯一的例外是...,它等同于python3(而不是python2)中的Ellipsis对象。所以你可以:

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

...被设计成在片中使用,但是从python3开始,您可以在任何地方使用它。你知道吗

你在迂回地问另一个问题。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)

不,这在你描述的方式中是不可能的,但是我猜你想在交互式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

相关问题 更多 >