Python リファレンスを読む

気分転換にPython

ブロック(block)

  • モジュール
  • 関数本体
  • クラス定義

スコープ(scope)

ラムダ(lambda)

  • lambda_form ::= "lambda" [parameter_list] ":" expression *1
  • parameter_list ::= (defparameter ",")* ( ... )
  • defparameter ::= parameter ["=" expression]
  • parameter ::= identifier | "(" sublist ")"
  • sublist ::= parameter ("," parameter)* [","]
  • statement を含むことができない.expression だけ.

呼び出し(call)

  • 呼び出し可能オブジェクト

関数定義

  • funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
  • suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
  • stmt_list ::= simple_stmt ( ";" simple_stmt)* [";"]
  • statement ::= stmt_list NEWLINE | compound_stmt
  • simple_stmt ::= ...

ふむ.suite だと,NEWLINE or DEDENT が無いとダメなのか.

分岐/ループ

  • if_stmt ::= "if" expression ":" suite
  • for_stmt ::= "for" target_list "in" expression_list ":" suite

ブール演算(boolean operation)

  • expression ::= or_test | lambda_form
  • or_test ::= and_test | or_test "or" and_test
  • and_test ::= not_test | and_test "and" not_test
  • not_test ::= comparison | "not" not_test

exec 文

  • exec_stmt ::= "exec" expression ["in" expression ["," expression]]

ふむ.やっぱりこれしかないかぁ.

$ python -c 'exec "def a():\n print \"Hello, world\"\na();a()"'

引数の受け渡し

引数のパース

*1:http://www.python.jp/doc/release/ref/lambdas.html だと,lambda のところの":" がクォートしてなかったよ