我有Python客户端调用Thrift服务,其中包含一些可选参数:
bool postTweet(1: required Tweet tweet, 2: i32 x = 100);
如果我试图从Python客户端调用此服务而不传递可选参数x,我会得到一个例外:
TypeError: postTweet() takes exactly 2 arguments (1 given)
为什么我得到这个异常的任何线索,但它是带有默认值的可选参数?
答案 0 :(得分:5)
不可能用默认值定义一个节俭功能(至少从我读完节俭白皮书后的理解)
你可以做的是定义一个特殊的参数结构,让你省略一些字段。
示例旧货代码:
struct PostTweetParameter {
1: required Tweet tweet;
2: optional i32 x;
}
bool postTweet(1: PostTweetParameter param);
然后,您可以构建PostTweetParameter
并忽略字段x
。
答案 1 :(得分:1)
必须从其他参数中定义x参数。否则,它会弄乱其他东西。要创建可选参数,您的函数必须类似于: def函数(x = 0): 有了这个,你可以选择x是使用参数的值,但是如果你通过说来调用函数 功能() X自动分配为0。 请记住,x必须单独在参数中设置,而不是与其他参数混合。