Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何限制python函数的参数必须是字符串或类似lambda表达式的函数_Python_Python 3.x - Fatal编程技术网

如何限制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())