こまごましたpython学習ノート(一)-20121202
18308 ワード
今日からpythonを勉强します.
Ok start...
複数行の文字列を三重引用符で定義します.
では、3つの連続引用符('''または""")をエスケープで印刷する場合は、どのように使用しますか?
テストします.複数行の文字列では、すでに三重引用符で始まるので、エスケープ記号+三重引用符を直接使用できます.
a = '''a\'''b''' print a
出力:
a'''b
しかし、上記の例にbがない場合、解釈器は、
''' + a +\' + ''' + ' + '
すなわち、複数行の文字列a'と空の文字列が結合され、結果は
a'
文字列を一重引用符で定義する場合は、文字列の二重引用符には特別な意味はありません.エスケープ記号を使用する必要はありません.
逆もまた然り.
三重引用符でもいいです.
自然文字列を定義するには、r+文字列を使用します.
a = r'\t\r'
Unicode文字列を定義するには、u+文字列を使用します.
# coding=GBK
...
a=u'は'
ではUnicodeを定義する自然文字列は?
テストの結果、ur+文字列を使用する.
ru+文字列はエラーを報告します.
a=ur'は'
オブジェクト向けプログラミングユーザへのコメントは,それぞれのものが数,文字列,さらには関数を含めてオブジェクトである点でPythonは極めて完全にオブジェクトに向いている.
この点はjavaとは違います
チュートリアルでは'+'オペレータは説明されていません
テストの検出:
i++が働かない:エラーを報告する
++iは間違っていませんが、何もしていないようで、iの値は変わりません.
だから......ああ、++--慣れないから、できるだけしましょう.
**はべき乗という意味です.
//同除法ですが、商を整理します.
>>および<
と、||!and、or、notになりました.いいでしょう.もっと読めるかもしれません.
行番号:
pythonではセミコロンを使用できます.支店記号として……使わなくてもいいし、複数の文を1行書いていなければ.
変数の命名の自由度はまだ高い.書き込み可能なテスト:
True = False if True: print 'xxxx'
解釈は、新しい変数Trueを定義し、その値は偽である(False)
入力結果print'xxxx'が実行されていません
次のように書くこともできます.
False = True True = False if True: print 'xxxx'
出力結果印刷xxxx
うーん...こんなコードに出会わないでほしい
では、前例のようにグローバル定義が上書きされたらどうしますか.
使えると思います
True = 1==1 False = 1!=1
それを戻します.しかし、他にもっと良い方法はありますか?
そこでstackoverflowで質問をpostしました.誰かが答えてくれることを願っていますね・・・リンクはこちらです.
To Be Continued ... まずゆっくり下を見てみましょう
-更新:stackoverflowはやはり効率的で、すでに回答がありました.
方法1、直接
del True
del False
元の値に戻ります.
メソッド2、使用_buildin__.True/False
勉強しました.
Pythonではこれらのものはまだ少し葛藤していて、言語を学ぶときは最初からこれらの葛藤の場所を明らかにすべきだと思っています.
いくつかの拡張を行いました.
==およびis:
==比較値が等しいか
is比較が同じobjectを指すかどうか
javaの==とobjectのようなものですequals()/compareTo()メソッド.(pythonクラスで同様の方法を定義できますか?調査対象)
pythonでは、予め定義されたタイプ(javaのprimitive typesなど)について、文字列と同じ処理を行うようです.すなわち、字面量は読み取り専用で、すべての値が同じ変数は同じobjectを指し、変数の値を変更すると、その指向するアドレスが変更されます(多分、深く研究されていません).具体的には、
a = 3
b = 3
print a==b
print a is b
結果:
True
True
同じobjectを指しているようです.
でも、もし
a = 3
b = 3.0
print a==b
print a is b
結果:
True
False
タイプによって、指すobjectは自然に違います.
(より正確な言い方を見つける:For all built-in Python objects(like strings,lists,dicts,functions,etc.)、if x is y,then x=y is also True.)、
では、Pythonの定義に従って、ゼロでない変数はすべて空ではありません.
trueと判断する
ここでtrueと判断することはtrueに等しいとは限らない.例:
if 'aaa':
do something
do somethingコードが実行されます.
でも
if'aaa'==True:(または'aaa'is True)
do something
できない.
うんうん
もう1つの問題は、演算子の優先順位です.チュートリアルに従って:
演算子は通常、左から右へ結合されます.すなわち、同じ優先度を持つ演算子は、左から右への順序で計算されます.例えば、
ここまで書いてお腹すいた・・・お腹すいたなぁ.
うーん、switch文はないけど...
うんうん、whileが循環したらelseと...これは変に見えて、面白いですね.チュートリアルによると、elseブロックは実際には余計です.その中の文を同じブロック(
更新:ここで間違いです.公式サイトtutorial:loop’s else clause runs when no break occurs.
教材はやはり原版を見なければならないようですが...
ははは
じゃあ...ホワイトは?見えませんでした.anyway、使えます
while True ... if ...:break
実現します.
for ... in ... loop:これはmatlabのfor loopに似ているように見えますが、いいですね.range関数はstep変数も受け入れられ、例えばrange(0,10,3)は[0,3,6,9]を得る.でもC++の柔軟性はありませんか?でも、そんなに柔軟が必要ならwhileを使ってもいいです.C++やjavaでは柔軟なfor loopが使い慣れていて便利です.
忘れそうになりましたが、重要で基本的な問題:入出力
または
出力ダイレクトprint
ファイルの入出力ですか、後で話します.
関数内でglobal変数を宣言する--これは本当に慣れていません.宣言に相当するはずです.変数定義は、宣言の後または前に使用できます.
重要なパラメータ--これは本当に素晴らしいです.そんなに重荷関数を書かなくてもいいわハハハ
怠け者を盗んだら、チュートリアルの例を使います.
Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls:
This will print
If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:
Functions can also be called using keyword arguments of the form kwarg=value. For instance, the following function:
accepts one required argument (voltage) and three optional arguments (state, action, and type). This function can be called in any of the following ways:
but all the following calls would be invalid:
In a function call, keyword arguments must follow positional arguments. All the keyword arguments passed must match one of the arguments accepted by the function (e.g. actor is not a valid argument for the parrot function), and their order is not important. This also includes non-optional arguments (e.g. parrot(voltage=1000) is valid too). No argument may receive a value more than once.
It could be called like this:
ここでパラメータテーブルのdictに注意して、key部分は引用符を打っていませんが、pythonは自動的に文字列に変換しているようです.調査関数にこれらのkeyは確かに文字列形式で格納されています.
引用符を付けると、逆にエラーが発生します.
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", 'shopkeeper'='Michael Palin', 'client'="John Cleese", 'sketch'="Cheese Shop Sketch") SyntaxError: keyword can't be an expression
keywordにスペースがある場合もエラー:
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shop keeper='Michael Palin', client="John Cleese", sketch="Cheese Shop Sketch") SyntaxError: invalid syntax
dict定義構文を使用してもエラーが発生しました.
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", 'shop keeper':'Michael Palin', 'client':"John Cleese", 'sketch':"Cheese Shop Sketch") SyntaxError: invalid syntax
うんうん.これはkeyword arguments変参入力の実現にすぎず,入力がdictであることを理解すべきではない.
ドキュメント文字列:
ドキュメント文字列の慣例は、最初の行が大文字で始まり、ピリオドが終わる複数の行文字列です.2行目は空行で、3行目から詳細な説明です.
Javadocに似ていますが、全く同じではありません.
うんうん、ちょっと疲れたから、先にここまで.
Ok start...
複数行の文字列を三重引用符で定義します.
では、3つの連続引用符('''または""")をエスケープで印刷する場合は、どのように使用しますか?
テストします.複数行の文字列では、すでに三重引用符で始まるので、エスケープ記号+三重引用符を直接使用できます.
a = '''a\'''b''' print a
出力:
a'''b
しかし、上記の例にbがない場合、解釈器は、
''' + a +\' + ''' + ' + '
すなわち、複数行の文字列a'と空の文字列が結合され、結果は
a'
文字列を一重引用符で定義する場合は、文字列の二重引用符には特別な意味はありません.エスケープ記号を使用する必要はありません.
逆もまた然り.
三重引用符でもいいです.
自然文字列を定義するには、r+文字列を使用します.
a = r'\t\r'
Unicode文字列を定義するには、u+文字列を使用します.
# coding=GBK
...
a=u'は'
ではUnicodeを定義する自然文字列は?
テストの結果、ur+文字列を使用する.
ru+文字列はエラーを報告します.
a=ur'は'
オブジェクト向けプログラミングユーザへのコメントは,それぞれのものが数,文字列,さらには関数を含めてオブジェクトである点でPythonは極めて完全にオブジェクトに向いている.
この点はjavaとは違います
チュートリアルでは'+'オペレータは説明されていません
テストの検出:
i++が働かない:エラーを報告する
++iは間違っていませんが、何もしていないようで、iの値は変わりません.
だから......ああ、++--慣れないから、できるだけしましょう.
**はべき乗という意味です.
//同除法ですが、商を整理します.
>>および<
と、||!and、or、notになりました.いいでしょう.もっと読めるかもしれません.
行番号:
pythonではセミコロンを使用できます.支店記号として……使わなくてもいいし、複数の文を1行書いていなければ.
変数の命名の自由度はまだ高い.書き込み可能なテスト:
True = False if True: print 'xxxx'
解釈は、新しい変数Trueを定義し、その値は偽である(False)
入力結果print'xxxx'が実行されていません
次のように書くこともできます.
False = True True = False if True: print 'xxxx'
出力結果印刷xxxx
うーん...こんなコードに出会わないでほしい
では、前例のようにグローバル定義が上書きされたらどうしますか.
使えると思います
True = 1==1 False = 1!=1
それを戻します.しかし、他にもっと良い方法はありますか?
そこでstackoverflowで質問をpostしました.誰かが答えてくれることを願っていますね・・・リンクはこちらです.
To Be Continued ... まずゆっくり下を見てみましょう
-更新:stackoverflowはやはり効率的で、すでに回答がありました.
方法1、直接
del True
del False
元の値に戻ります.
メソッド2、使用_buildin__.True/False
勉強しました.
Pythonではこれらのものはまだ少し葛藤していて、言語を学ぶときは最初からこれらの葛藤の場所を明らかにすべきだと思っています.
いくつかの拡張を行いました.
==およびis:
==比較値が等しいか
is比較が同じobjectを指すかどうか
javaの==とobjectのようなものですequals()/compareTo()メソッド.(pythonクラスで同様の方法を定義できますか?調査対象)
pythonでは、予め定義されたタイプ(javaのprimitive typesなど)について、文字列と同じ処理を行うようです.すなわち、字面量は読み取り専用で、すべての値が同じ変数は同じobjectを指し、変数の値を変更すると、その指向するアドレスが変更されます(多分、深く研究されていません).具体的には、
a = 3
b = 3
print a==b
print a is b
結果:
True
True
同じobjectを指しているようです.
でも、もし
a = 3
b = 3.0
print a==b
print a is b
結果:
True
False
タイプによって、指すobjectは自然に違います.
(より正確な言い方を見つける:For all built-in Python objects(like strings,lists,dicts,functions,etc.)、if x is y,then x=y is also True.)、
では、Pythonの定義に従って、ゼロでない変数はすべて空ではありません.
trueと判断する
ここでtrueと判断することはtrueに等しいとは限らない.例:
if 'aaa':
do something
do somethingコードが実行されます.
でも
if'aaa'==True:(または'aaa'is True)
do something
できない.
うんうん
もう1つの問題は、演算子の優先順位です.チュートリアルに従って:
演算子は通常、左から右へ結合されます.すなわち、同じ優先度を持つ演算子は、左から右への順序で計算されます.例えば、
2 + 3 + 4
は、(2 + 3) + 4
として計算される.付与演算子のようないくつかの演算子は、右から左に結合され、すなわちa = b = c
がa = (b = c)
として処理される.ここまで書いてお腹すいた・・・お腹すいたなぁ.
うーん、switch文はないけど...
うんうん、whileが循環したらelseと...これは変に見えて、面白いですね.チュートリアルによると、elseブロックは実際には余計です.その中の文を同じブロック(
while
と同じ)に置くことができ、while
文の後に続くと、同じ効果を得ることができます.更新:ここで間違いです.公式サイトtutorial:loop’s else clause runs when no break occurs.
教材はやはり原版を見なければならないようですが...
ははは
じゃあ...ホワイトは?見えませんでした.anyway、使えます
while True ... if ...:break
実現します.
for ... in ... loop:これはmatlabのfor loopに似ているように見えますが、いいですね.range関数はstep変数も受け入れられ、例えばrange(0,10,3)は[0,3,6,9]を得る.でもC++の柔軟性はありませんか?でも、そんなに柔軟が必要ならwhileを使ってもいいです.C++やjavaでは柔軟なfor loopが使い慣れていて便利です.
忘れそうになりましたが、重要で基本的な問題:入出力
s =
raw_input
(
'Enter something : '
)
または
guess =
int
(
raw_input
(
'Enter an integer : '
))
出力ダイレクトprint
ファイルの入出力ですか、後で話します.
関数内でglobal変数を宣言する--これは本当に慣れていません.宣言に相当するはずです.変数定義は、宣言の後または前に使用できます.
重要なパラメータ--これは本当に素晴らしいです.そんなに重荷関数を書かなくてもいいわハハハ
怠け者を盗んだら、チュートリアルの例を使います.
def
func
(a, b=
5
, c=
10
):
print
'a is'
, a,
'and b is'
, b,
'and c is'
, c
func(
3
,
7
)
func(
25
, c=
24
)
func(c=
50
, a=
100
)
Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
This will print
[1]
[1, 2]
[1, 2, 3]
If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
Functions can also be called using keyword arguments of the form kwarg=value. For instance, the following function:
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
print "-- This parrot wouldn't", action,
print "if you put", voltage, "volts through it."
print "-- Lovely plumage, the", type
print "-- It's", state, "!"
accepts one required argument (voltage) and three optional arguments (state, action, and type). This function can be called in any of the following ways:
parrot(1000) # 1 positional argument
parrot(voltage=1000) # 1 keyword argument
parrot(voltage=1000000, action='VOOOOOM') # 2 keyword arguments
parrot(action='VOOOOOM', voltage=1000000) # 2 keyword arguments
parrot('a million', 'bereft of life', 'jump') # 3 positional arguments
parrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword
but all the following calls would be invalid:
parrot() # required argument missing
parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument
parrot(110, voltage=220) # duplicate value for the same argument
parrot(actor='John Cleese') # unknown keyword argument
In a function call, keyword arguments must follow positional arguments. All the keyword arguments passed must match one of the arguments accepted by the function (e.g. actor is not a valid argument for the parrot function), and their order is not important. This also includes non-optional arguments (e.g. parrot(voltage=1000) is valid too). No argument may receive a value more than once.
def cheeseshop(kind, *arguments, **keywords):
print "-- Do you have any", kind, "?"
print "-- I'm sorry, we're all out of", kind
for arg in arguments:
print arg
print "-" * 40
keys = sorted(keywords.keys())
for kw in keys:
print kw, ":", keywords[kw]
It could be called like this:
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper='Michael Palin',
client="John Cleese",
sketch="Cheese Shop Sketch")
ここでパラメータテーブルのdictに注意して、key部分は引用符を打っていませんが、pythonは自動的に文字列に変換しているようです.調査関数にこれらのkeyは確かに文字列形式で格納されています.
引用符を付けると、逆にエラーが発生します.
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", 'shopkeeper'='Michael Palin', 'client'="John Cleese", 'sketch'="Cheese Shop Sketch") SyntaxError: keyword can't be an expression
keywordにスペースがある場合もエラー:
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shop keeper='Michael Palin', client="John Cleese", sketch="Cheese Shop Sketch") SyntaxError: invalid syntax
dict定義構文を使用してもエラーが発生しました.
>>> cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", 'shop keeper':'Michael Palin', 'client':"John Cleese", 'sketch':"Cheese Shop Sketch") SyntaxError: invalid syntax
うんうん.これはkeyword arguments変参入力の実現にすぎず,入力がdictであることを理解すべきではない.
ドキュメント文字列:
ドキュメント文字列の慣例は、最初の行が大文字で始まり、ピリオドが終わる複数の行文字列です.2行目は空行で、3行目から詳細な説明です.
Javadocに似ていますが、全く同じではありません.
うんうん、ちょっと疲れたから、先にここまで.