2011-10-20 9 views
1

Matlabにはsymvarという関数があります。これは通常、有効なmatlab命令を含む文字列式を取り、変数を識別します。これらは、表現を評価するために処理/置換することができます。例えばMatlab symvar関数のPython代替

symvar('cos(pi*x - beta1)') 

戻り

{'beta1';'x'} 

はPythonで似たような機能はありますか?

これは私がこれを使う方法の例です: 私はDataFrame DFを持っていると言っています(この場合、pandasモジュールを参照していますが、numpy recordarrayにも当てはまります)例えば、A、B、C。私は内部

私のユーザーは(DF、 "D =ログ(A)+ C * 3")add_field

のようなものを指定することで、追加の列を追加できるようにしたい、関数はA、Cを認識することとなりますDを変数として抽出し、データフレームからAとDを抽出し、(evalなどを使用して)計算を実行し、Dを新しい列としてデータフレームに追加します。 Pythonの式から識別子のリストを取得するには

+1

答えは「はい。」これはあまり有用ではないので、**あなたが本当に知っておくべきこと**を求めるためにあなたの質問を編集したいかもしれません。たとえば、これを行う方法。またはそれをいかに活用するか。または、存在チェック以外のもの。 –

答えて

3

一つの方法は、astモジュールを使用することです

ありがとう:

import ast 
class IdentifierExtractor(ast.NodeVisitor): 
    def __init__(self): 
     self.ids = set() 
    def visit_Name(self, node): 
     self.ids.add(node.id) 
extractor = IdentifierExtractor() 
extractor.visit(ast.parse("cos(pi*x - beta1)")) 
print extractor.ids 

プリント

set(['x', 'cos', 'pi', 'beta1']) 

また、定義された名前を除外することができmathモジュール(または他の名前空間):

枚の
print extractor.ids - set(vars(math)) 

プリント

set(['beta1', 'x']) 

(私はまだこのすべてが...するのに有用であるかもしれないものの任意の手掛かりを持っていないことに注意してください)