无论它是否是个好主意,我想知道是否有可能强制某个方法接受某个输入,例如没有引号的字符("!&#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!
这可能吗?好奇。
答案 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)