2017-09-04 13 views
0

文字列として表される変数の型を推測する関数を記述しようとしています。 だから私はいくつかの型の変数を持っている場合は、どのような変数の種類を見つけるために私はのような関数のtype()を使用することができます。しかし、どのように私は簡潔にpythonicalyは、整数の場合は 'int'のような出力になるように、この関数の出力を文字列に変換する 'bool'ブールの場合など。 私が見ることができる唯一の方法これは最初にstr(type(var))を使用して、正規表現を使用して型を示す部分を削除します。次のようにPythonのtype()関数の出力を文字列に変換する簡単な方法はありますか?

だから基本的に私はPythonの機能を推測する単純型を書くことができます。varはタイプstrである

import ast 
import re 


def guess_type(var): 
    return re.findall('\w+',str(type(ast.literal_eval(var))))[1] 

。しかし、私の質問は、 "同じ結果を得るもっと簡単な方法はありますか?"

パフォーマンスといえば:

In [156]: %timeit guess_type 
10000000 loops, best of 3: 28.1 ns per loop. 
+2

なぜ型を文字列に変換しますか?ここでの全体的な目的は何ですか?型をチェックしたいのであれば、正規表現が必要な理由は分かりません。 – roganjosh

+0

「[1、2、3]」のタイプを確認するにはどうすればよいですか? – Foobard

+0

それはあなたにそれがリストであると言うでしょう...編集待ち、あなたはリストの文字列表現を持っていますか?したがって、 'ast.literal_eval'を使用して、そのタイプを取得してください – roganjosh

答えて

2
>>> type(0).__name__ 
'int' 
>>> type('').__name__ 
'str' 
>>> type({}).__name__ 
'dict' 
+0

これはまさに私が探していたものです!大いに感謝する! – Foobard

3

あなたが実際にやろうとしていますか?あなただけのオブジェクトのクラスの名前を取得したい場合は、使用できます。

type(var).__name__ 

は、これはあなたのオブジェクトvarのクラスの名前を与えます。

関連する問題