はじめてのひき - PythonSucks Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
! 基本的な入出力
print のクソっぷりは 3000 で解決するらしい。
!! print が文
>>> map(str, [1,2])
['1', '2']
>>> map(print, [1,2])
File "<stdin>", line 1
map(print, [1,2])
^
SyntaxError: invalid syntax
!! print とコンマ
print "abc",
print "def",
は "abc def" と出力した後でインタプリタ終了時に改行が足されるって感じか。
print "abc\n",
print "def\n",
は "abc\ndef\n" なのである。
!! raw_input("hoge") とかで出力もできる
!! まともな標準入出力は
import sys
sys.stdout.write("Hello, world!\n")
めんどくさいなぁ。
!! input
一行入力して「evalして」かえす関数
!! sys.exit('foo')
foo と出力してから exit(1)
! 一つのことは一つの方法で
!! リスト内包表記と map
>>> [x+1 for x in [1,2]]
[2, 3]
>>> map(lambda x: x+1, [1,2])
[2, 3]
もちろん普通にループを書いても良い
!! 引数
>>> len("hoge")
4
>>> len("hoge",)
4
!! クォート
"hoge\n" と 'hoge\n' は同じ意味。
!! not in 演算子
>>> 2 not in [1,2]
False
>>> not 2 in [1,2]
False
!! is not 演算子
>>> type("") is not str
False
>>> not type("") is str
False
>>> type("") not is str
File "<stdin>", line 1
type("") not is str
^
SyntaxError: invalid syntax
! デフォルト引数
一度しか初期化されない。
def f(a=[]):
a.append(1)
return a
print f()
print f() # [1, 1]
! タプル
!! 1要素タプル
空タプルは () 。 2要素タプルは (1, 2) 。 1要素は (1,)
!! タプルと % 演算子
ごく稀にびっくりする
>>> "%s" % [1,2]
'[1, 2]'
>>> "%s" % (1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: not all arguments converted during string formatting
!! assert
Warning 出してくれるから被害は起きにくい
>>> assert(False, 'message!')
<stdin>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?
! 標準ライブラリ
!! スーパー便利関数 str#title()
>>> "abc def".title()
'Abc Def'
>>> "wendy's".title()
"Wendy'S"
!! どのモジュールに?
os.chdir, os.path.dirname, sys.stdout, __builtin__.open
悪くもないんだけど、覚えられない。
!! os.removedirs vs rm -rf
removedirs(name)
removedirs(path)
Super-rmdir; remove a leaf directory and all empty intermediate
ones. Works like rmdir except that, if the leaf directory is
successfully removed, directories corresponding to rightmost path
segments will be pruned away until either the whole path is
consumed or an error occurs. Errors during this latter phase are
ignored -- they generally mean that a directory was not empty.
! 定番
!! self
self 多い。
class C:
def f(self):
print 'hoge'
def g(self):
f() # NameError: global name 'f' is not defined
C().g()
個人的には下記のケースの方がエラーメッセージで混乱する。
class C:
def f():
print 'hoge'
def g(self):
self.f() # TypeError: f() takes no arguments (1 given)
C().g()
!! del と len
これらが obj.del や obj.len で無いという文句も定番。
del 予約語は 3000 で消えるらしい。
!! list comprehension と lambda
>>> fs = [ lambda: i for i in range( 8 ) ]
>>> fs[0]()
7
>>> i = 3
>>> fs[0]()
3
! 文字列リテラル
>>> 'r'=='r'
True
>>> 'r'==''r''
False
>>> 'r'=='''r'''
True
>>> 'r'==''''r''''
File "<stdin>", line 1
'r'==''''r''''
^
SyntaxError: EOL while scanning string literal
>>> 'r'=='''''r'''''
False
>>> 'r'==''''''r''''''
False
>>> 'r'=='''''''r'''''''
True
>>> 'r'==''''''''r''''''''
False
>>> 'r'=='''''''''r'''''''''
True
[[stromgas|http://stromgas.onlinewebshop.net]]
print のクソっぷりは 3000 で解決するらしい。
!! print が文
>>> map(str, [1,2])
['1', '2']
>>> map(print, [1,2])
File "<stdin>", line 1
map(print, [1,2])
^
SyntaxError: invalid syntax
!! print とコンマ
print "abc",
print "def",
は "abc def" と出力した後でインタプリタ終了時に改行が足されるって感じか。
print "abc\n",
print "def\n",
は "abc\ndef\n" なのである。
!! raw_input("hoge") とかで出力もできる
!! まともな標準入出力は
import sys
sys.stdout.write("Hello, world!\n")
めんどくさいなぁ。
!! input
一行入力して「evalして」かえす関数
!! sys.exit('foo')
foo と出力してから exit(1)
! 一つのことは一つの方法で
!! リスト内包表記と map
>>> [x+1 for x in [1,2]]
[2, 3]
>>> map(lambda x: x+1, [1,2])
[2, 3]
もちろん普通にループを書いても良い
!! 引数
>>> len("hoge")
4
>>> len("hoge",)
4
!! クォート
"hoge\n" と 'hoge\n' は同じ意味。
!! not in 演算子
>>> 2 not in [1,2]
False
>>> not 2 in [1,2]
False
!! is not 演算子
>>> type("") is not str
False
>>> not type("") is str
False
>>> type("") not is str
File "<stdin>", line 1
type("") not is str
^
SyntaxError: invalid syntax
! デフォルト引数
一度しか初期化されない。
def f(a=[]):
a.append(1)
return a
print f()
print f() # [1, 1]
! タプル
!! 1要素タプル
空タプルは () 。 2要素タプルは (1, 2) 。 1要素は (1,)
!! タプルと % 演算子
ごく稀にびっくりする
>>> "%s" % [1,2]
'[1, 2]'
>>> "%s" % (1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: not all arguments converted during string formatting
!! assert
Warning 出してくれるから被害は起きにくい
>>> assert(False, 'message!')
<stdin>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?
! 標準ライブラリ
!! スーパー便利関数 str#title()
>>> "abc def".title()
'Abc Def'
>>> "wendy's".title()
"Wendy'S"
!! どのモジュールに?
os.chdir, os.path.dirname, sys.stdout, __builtin__.open
悪くもないんだけど、覚えられない。
!! os.removedirs vs rm -rf
removedirs(name)
removedirs(path)
Super-rmdir; remove a leaf directory and all empty intermediate
ones. Works like rmdir except that, if the leaf directory is
successfully removed, directories corresponding to rightmost path
segments will be pruned away until either the whole path is
consumed or an error occurs. Errors during this latter phase are
ignored -- they generally mean that a directory was not empty.
! 定番
!! self
self 多い。
class C:
def f(self):
print 'hoge'
def g(self):
f() # NameError: global name 'f' is not defined
C().g()
個人的には下記のケースの方がエラーメッセージで混乱する。
class C:
def f():
print 'hoge'
def g(self):
self.f() # TypeError: f() takes no arguments (1 given)
C().g()
!! del と len
これらが obj.del や obj.len で無いという文句も定番。
del 予約語は 3000 で消えるらしい。
!! list comprehension と lambda
>>> fs = [ lambda: i for i in range( 8 ) ]
>>> fs[0]()
7
>>> i = 3
>>> fs[0]()
3
! 文字列リテラル
>>> 'r'=='r'
True
>>> 'r'==''r''
False
>>> 'r'=='''r'''
True
>>> 'r'==''''r''''
File "<stdin>", line 1
'r'==''''r''''
^
SyntaxError: EOL while scanning string literal
>>> 'r'=='''''r'''''
False
>>> 'r'==''''''r''''''
False
>>> 'r'=='''''''r'''''''
True
>>> 'r'==''''''''r''''''''
False
>>> 'r'=='''''''''r'''''''''
True