2013-05-10 3 views
23

でintにUnicodeデータを変換します<type 'unicode'>のように私はURLから渡された値を取得していますのpython

をしかし、私は得続ける:

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) 

としてそれを使用してそれは印刷しtypelimitとしてunicodeとなっているため、クエリからエラーが発生します。私はintにUnicodeを変換していますが、なぜ変換していないのですか? 助けてください!

答えて

43

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

limit = int(limit) 

またはlimitをdefiniting:

が代わりにこれを行うPythonで

if 'limit' in user_data : 
    limit = int(user_data['limit']) 
+0

論理を得ました。ありがとうございます。 –

+1

+1「すぐに変更しない」とは、参照によって変更されないことを意味します。 – Jared

+0

@ Jaredこれを追加します、ありがとう:)私は言葉が何らかの形で完璧ではなかったことを知っていた:p – TerryA

7

を、整数や文字列はimmutableであり、passed by valueです。関数に文字列または整数を渡すことはできず、引数を変更する必要があります。

だから、数に文字列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 

しかし、本当に必要はありません。 (たぶん、再帰で作業し、いくつかの可変状態を渡す必要があるとき)。

関連する問題