Python 学習:eval 関数

2014-08-24 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、3、0、1、0、 2、0、0、0、0(41)で、換算ポイント 60pt 。
「化学業界」一昨日夕方、6位にアップ。
「Firefox」今朝方、6位にアップ。
ところで、
今朝方の“blogram.jp”は異常だった?
いずれも下位(300位以下)だが、
「数学」「イギリス」からランクアウトし、
「マーケティング」「携帯電話」「社会」「アメリカ」「学校」「経済」
にランクインしていた。が、先ほど元に戻った。
・-・ - -・

さて、本文。

今年2月(2014-02-11)の記事:
「.cif」ファイルの表示では...
で、
  ・・・・・
  ・・・・・
  「COD ID: 5000092」を選んでみた。
  (Aluminium oxide)「Space group: R -3 c :H」とある。
  この物質の座標データは、「5000092.cif」で得られる。
  このファイルの中では、原子は2つしか定義されていない:

_atom_site_calc_flag
Al1 Al3+ 12 c 0. 0. 0.35216(8) 1. 0 d
O1 O2- 18 e 0.3061(5) 0. 0.25 1. 0 d


  ですが、1組5原子(アルミが2つ、酸素が3つ)で、
  1ユニットセル内に6組入っているとある。
  つまり、単位格子内には30原子あることになる。
  ・・・・・
  ・・・・・
と書いている。

この様に、「.cif」ファイルでは、
基本となる原子の座標位置を明示し、
あとは、
“対称性操作”を施して、(この場合は)アルミを2つ、酸素を3つ
座標計算する。

その“対称性操作”については、同じ「.cif」ファイル内に、

_symmetry_equiv_pos_as_xyz
x,y,z
-y,x-y,z
y-x,-x,z
-y,-x,1/2+z
x,x-y,1/2+z
y-x,y,1/2+z
-x,-y,-z
y,y-x,-z
x-y,x,-z
y,x,1/2-z
-x,y-x,1/2-z
x-y,-y,1/2-z
1/3+x,2/3+y,2/3+z
2/3+x,1/3+y,1/3+z
1/3-y,2/3+x-y,2/3+z
2/3-y,1/3+x-y,1/3+z
1/3-x+y,2/3-x,2/3+z
2/3-x+y,1/3-x,1/3+z
1/3-y,2/3-x,1/6+z
2/3-y,1/3-x,5/6+z
1/3+x,2/3+x-y,1/6+z
2/3+x,1/3+x-y,5/6+z
1/3-x+y,2/3+y,1/6+z
2/3-x+y,1/3+y,5/6+z
1/3-x,2/3-y,2/3-z
2/3-x,1/3-y,1/3-z
1/3+y,2/3-x+y,2/3-z
2/3+y,1/3-x+y,1/3-z
1/3+x-y,2/3+x,2/3-z
2/3+x-y,1/3+x,1/3-z
1/3+y,2/3+x,1/6-z
2/3+y,1/3+x,5/6-z
1/3-x,2/3-x+y,1/6-z
2/3-x,1/3-x+y,5/6-z
1/3+x-y,2/3-y,1/6-z
2/3+x-y,1/3-y,5/6-z


の様に書いてある。

この“対称性操作”をプログラムするには???

おそらく、「eval」関数(?)でできる???

そこで、
Python eval」で検索してみると、

真っ先に、
「Python 2.7ja1 documentation」の
「Python 標準ライブラリ」の
2. 組み込み関数
が見つかる。

eval()
ですね。

  eval(expression[, globals[, locals]])
   文字列とオプションの引数 globals, locals をとります。
   globals を指定する場合には辞書でなくてはなりません。
   locals は任意のマップ型にできます。
   バージョン 2.4 で変更: 以前は ・・・
   引数 expression は Python の表現式 (技術的にいうと、条件のリストです)
   として構文解釈され、評価されます。
   このとき辞書 globals および locals はそれぞれグローバルおよび
   ローカルな名前空間として使われます。
   global 辞書が存在するが、'__builtins__' が欠けている場合、
   expression を解析する前に現在のグローバル変数を globals にコピーします。
   このことから、 expression は通常、標準の __builtin__ モジュールへの
   完全なアクセスを有し、制限された環境が伝播するようになっています。
   locals 辞書が省略された場合、標準の値として globals に設定されます。
   辞書が両方とも省略された場合、表現式は eval() が呼び出されて
   いる環境の下で実行されます。構文エラーは例外として報告されます。

   以下に例を示します :
   > x = 1
   > print eval( 'x+1' )
   2

   この関数は (compile() で生成されるような) 任意のコードオブジェクトを
   実行するために利用することもできます。
   この場合、文字列の代わりにコードオブジェクトを渡します。
   このコードオブジェクトが、引数 mode を 'exec' として
   コンパイルされている場合、 eval() が返す値は、 None になります。

   ヒント: 文の動的な実行は exec 文でサポートされています。
   ファイルからの文の実行は関数 execfile() でサポートされています。
   関数 globals() および locals() は、それぞれ現在の
   グローバルおよびローカルな辞書を返すので、
   eval() や execfile() で使うことができます。
   リテラルだけを含む式の文字列を安全に評価できる関数、
   ast.literal_eval() も参照してください。


その他に見つかったページの幾つか、・・・・・

(1)「267:文字列をPythonスクリプトとして実行する
  「exec 文」と「eval 関数」
序でに、
このページの親サイト:「PythonRecipe


(2)「Python おそるおそる
  Python の基本的な部分について観察したとき、
  面白れえなあと思ってメモしたものなり。
と云うこと?


(3)「フィボナッチにeval(a,b)使ってみたけどはやいわけじゃなかった
  「eval(a,b)」使用例???

で、このページの「参考先サイト様
更に、その先の「satosystemsの日記」の「フィボナッチで各種言語をベンチマーク
と、些か脱線しすぎ???


最後に、ウィキペディア(日本語):
Eval
  ・・・・・
  ・・・・・
  実例
  ・・・・・
  ・・・・・
  Perl
  Perl の eval は、文字列をプログラムとして解釈するほか、
  例外処理機構としても機能する。
  コードの塊をテストし、必要ならそれに関して警告することができる。
  例えば、除算において実行時エラーが発生すると
  $@で警告を出力することができる。
  ・・・・・
  ・・・・・
  Python
  Python での eval 関数は単一の式を評価する。
  文を実行することはできないが、文を実行する関数を実行することはできる。
  exec 文は文を実行することができる。
  eval の例(対話モード):
  ・・・・・
  ・・・・・
  exec の例(対話モード):
  ・・・・・
  ・・・・・


以上の結果から(?!?)・・・・・
「.cif」ファイルを読み込んで、「.xyz」ファイルを作る、
“Python”プロフラムが作れそうだ。
(序でに、Perl でも???)


本日はここまで。


Python 学習は続く???


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140805
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク