web-dev-qa-db-ja.com

pythonでUnicodeデータをintに変換する

私は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'>

しかし、typelimitunicodeとして取得し続けると、クエリからエラーが発生します!! Unicodeをintに変換していますが、なぜ変換しないのですか?助けてください!!!

27
Sankalp Mishra

int(limit)は、整数に変換された値を返し、関数を呼び出すときに値を変更しません(期待どおりです)。

代わりにこれを行います:

limit = int(limit)

または、limitを定義する場合:

if 'limit' in user_data :
    limit = int(user_data['limit'])
51
TerryA

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

ただし、実際には必要ないはずです。 (おそらく、再帰を使用して、いくつかの可変状態を渡す必要がある場合)。

7
Jakub M.