如何限制python函数的参数必须是字符串或类似lambda表达式的函数
例如,在下面的示例中,第一个参数应限制为字符串,第二个参数应为函数。但是,这两种语法都是错误的。任何人都可以帮助建议正确的语法来施加类型限制吗如何限制python函数的参数必须是字符串或类似lambda表达式的函数,python,python-3.x,Python,Python 3.x,例如,在下面的示例中,第一个参数应限制为字符串,第二个参数应为函数。但是,这两种语法都是错误的。任何人都可以帮助建议正确的语法来施加类型限制吗 def GetArg(msg:String, converter:lambda, default): print("{}, the default is '{}':".format(msg, default)) return converter(stdin.readline().strip()) 这是错误的 Traceback (mos
def GetArg(msg:String, converter:lambda, default):
print("{}, the default is '{}':".format(msg, default))
return converter(stdin.readline().strip())
这是错误的
Traceback (most recent call last):
File "E:/stdin_ext.py", line 4, in <module>
def GetArg(msg:String, converter, default:String):
NameError: name 'String' is not defined
您应该使用
str
而不是String
和lambda:
from typing import Callable
def GetArg(msg:str, converter:Callable, default):
print("{}, the default is '{}':".format(msg, default))
return converter(stdin.readline().strip())
也就是说,除非您有一个名为String
的特定类,并且您需要其类型的参数
当您编写lambda
时,您正在定义一个新的lambda,而不是为函数指定一个类型,从而导致错误
我认为还必须指出,python中的类型只是一种有用的表示法,但它本身不会引发任何错误,例如,我仍然可以调用
GetArg(1,2,3)
,并且仅仅通过类型暗示不会得到任何错误(当然,之后我会在尝试将参数传递给int时出错).您可以使用打字模块
from typing import Callable
def get_arg(msg: str, converter: Callable[[str], str], default) -> str:
print(f"{msg}, the default is '{default}':")
return converter(stdin.readline().strip())
假设您的函数converter
使用字符串
a返回字符串
,并且get_arg
返回字符串
。注意,代码也被修改为遵循python的格式,并在旧样式的格式字符串上使用
还要注意,这些
类型提示
只是提示。它们不会在静态或运行时进行检查。尽管如此,某些IDE将帮助您确保它们是正确的。不是注释,例如get\u next\u item:Callable[],str]
a better fit?Callable[],str]
意味着函数不带参数并返回字符串。事实并非如此,因为函数显然采用了字符串@RachSharp只是举个例子。
from typing import Callable
def get_arg(msg: str, converter: Callable[[str], str], default) -> str:
print(f"{msg}, the default is '{default}':")
return converter(stdin.readline().strip())