私は完全な iPython 初心者ですが、最後に割り当てられた変数の値を取得する方法があるかどうか疑問に思っていました:
In [1]: long_variable_name = 333
In [2]: <some command/shortcut that returns 333>
Rには次のものがあります.Last.value
:
> long_variable_name = 333
> .Last.value
[1] 333
入力されたコマンド/ステートメントと、それらのステートメントの対応する出力 (存在する場合) を含むIPythonIn
と変数を使用できます。Out
したがって、素朴なアプローチは、これらの変数を%last
魔法のメソッドを定義する基礎として使用することです。
ただし、すべてのステートメントが必ずしも出力を生成するわけIn
でOut
はなく、同期的ではないためです。
したがって、私が思いついたアプローチは、 を解析し、それらの行In
の出現箇所を探して解析し、出力することでした。=
def last_assignment_value(self, parameter_s=''):
ops = set('()')
has_assign = [i for i,inpt in enumerate(In) if '=' in inpt] #find all line indices that have `=`
has_assign.sort(reverse=True) #reverse sort, because the most recent assign will be at the end
for idx in has_assign:
inpt_line_tokens = [token for token in In[idx].split(' ') if token.strip() != ''] #
indices = [inpt_line_tokens.index(token) for token in inpt_line_tokens if '=' in token and not any((c in ops) for c in token)]
#Since assignment is an operator that occurs in the middle of two terms
#a valid assignment occurs at index 1 (the 2nd term)
if 1 in indices:
return ' '.join(inpt_line_tokens[2:]) #this simply returns on the first match with the above criteria
最後に、IPython で独自のカスタム コマンドを作成します。
get_ipython().define_magic('last', last_assignment_value)
そして、今あなたは呼び出すことができます:
%last
そして、これは割り当てられた用語を文字列として出力します(これはあなたが望むものではないかもしれません)。
ただし、これには注意点があります。代入を伴う誤った入力を入力した場合。例: (a = 2)
、このメソッドはそれを取得します。また、割り当てに変数が含まれる場合: たとえばa = name
、このメソッドはnameの値name
ではなくを返します。
その制限を考慮して、モジュールを使用して、次のような式を試して評価できます (最後のparser
に追加できます)。last_assignment_value
if statement
import parser
def eval_expression(src):
try:
st = parser.expr(src)
code = st.compile('obj.py')
return eval(code)
except SyntaxError:
print 'Warning: there is a Syntax Error with the RHS of the last assignment! "%s"' % src
return None
ただし、 の可能性のある悪を考えると、eval
その包含はあなたに任せました.
しかし、正直に言うと、真に健全な方法には、ステートメントを解析して、見つかった入力やその前の入力などの有効性を検証することが含まれます。