30

我从 url 传递的值是:

user_data = {}
if (request.args.get('title')) :
    user_data['title'] =request.args.get('title')
if(request.args.get('limit')) :
    user_data['limit'] =    request.args.get('limit')

然后将其用作

if 'limit' in user_data :
    limit = user_data['limit']
conditions['id'] = {'id':1}
int(limit)
print type(limit)
data = db.entry.find(conditions).limit(limit)

它打印:<type 'unicode'>

但我不断得到typeas limitunicode这会引发查询错误!我正在将 unicode 转换为 int 但为什么它不转换?请帮忙!!!

4

2 回答 2

54

int(limit)返回转换为整数的值,并且在您调用函数时不会更改它(这是您所期望的)。

改为这样做:

limit = int(limit)

或者在定义时limit

if 'limit' in user_data :
    limit = int(user_data['limit'])
于 2013-05-10T06:34:30.070 回答
7

在 python 中,整数和字符串是不可变的,并且是按值传递的。您不能将字符串或整数传递给函数并期望修改参数。

所以要将字符串转换limit="100"为数字,你需要做

limit = int(limit) # will return new object (integer) and assign to "limit"

如果你真的想绕过它,你可以使用一个列表。列表在 python 中是可变的;当你传递一个列表时,你传递的是参考,而不是副本。所以你可以这样做:

def int_in_place(mutable):
    mutable[0] = int(mutable[0])

mutable = ["1000"]
int_in_place(mutable)
# now mutable is a list with a single integer

但你不应该真的需要它。(也许有时当您使用递归并需要传递一些可变状态时)。

于 2013-05-10T06:51:48.690 回答