・配列で要素を追加するときはappendじゃなくてpushじゃないの?
過去に議論があったようだが英語がよくわからない。。
https://stackoverflow.com/questions/1566266/why-do-python-lists-have-pop-but-not-push
スタックが実現したいならそれ用のクラスを作りなさいって言ってる?
https://docs.python.org/ja/3/library/array.html
アレイはシーケンス (sequence) 型であり、中に入れるオブジェクトの型に制限があることを除けば、リストとまったく同じように振る舞います。
[1,2,3]
とあったときに、これはリスト?配列?
リストに対して追加なら、appendでいいと思うが、
配列ならpushの方がいいのではないか?
・内包表記のインデントにルールがない
・Perlの
if ($var =~ /foo(.+)/) {
# do something with $1
} elsif ($var =~ /bar(.+)/) {
# do something with $1
} elsif ($var =~ /baz(.+)/) {
# do something with $1
}
をPythonで書くのがつらい
if文の条件式内で代入ができるようにしないのかな?
・joinが文字列型のメソッドである
通常、処理の対象になる配列やリストのメソッドにするんじゃないの?
joinを文字列にするんだったら、整数の総和とかもintのメソッドにしなくていいの?
例えば、こんな感じに
>>> INT.sum([1,2,4,[5,6,[10,20]]]) 48 >>> INT.sum((1,2,4,(5,6,(10,20)))) 48
・コマンド引数に数字を書いても文字列として扱う
(sum.py)
#!/usr/bin/env python3 import sys sum = 0 for arg in sys.argv[1:]: sum += arg print(sum)
$ ./sum.py 1 2 3 Traceback (most recent call last): File "./sum.py", line 7, insum += arg TypeError: unsupported operand type(s) for +=: 'int' and 'str'
例外が発生する。。pythonは動的型付けをうたってるんじゃないの?
・よくはまる
MariaDBからデータをとってくるスクリプトを実行したらエラーになった。
(mysql.py)
#!/usr/bin/env python3 import mysql.connector conn = mysql.connector.connect(user='root', password='', host='localhost', database='test') cur = conn.cursor() cur.execute("select * from articles;") for row in cur.fetchall(): print(row) cur.close conn.close
実行結果
$ ./mysql.py Traceback (most recent call last): File "./mysql.py", line 2, inimport mysql.connector File "/home/fukumiya/test/python/mysql.py", line 2, in import mysql.connector ModuleNotFoundError: No module named 'mysql.connector'; 'mysql' is not a package
インポートしたモジュールと同じ名前のファイルが、同じディレクトリにあるといけない?
$ ls __pycache__ mysql.py $ mv mysql.py my_sql.py $ ls __pycache__ my_sql.py $ ./my_sql.py (1, 'タイトル', 'これは、記事の本文です。', datetime.datetime(2019, 8, 15, 23, 22, 52), None) (2, 'またタイトル', 'そこに本文が続きます。', datetime.datetime(2019, 8, 15, 23, 22, 52), None) (3, 'タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', datetime.datetime(2019, 8, 15, 23, 22, 53), None) $ touch mysql.py $ ls __pycache__ my_sql.py mysql.py $ ./my_sql.py Traceback (most recent call last): File "./my_sql.py", line 2, inimport mysql.connector ModuleNotFoundError: No module named 'mysql.connector'; 'mysql' is not a package $
むむ。こういう仕様なのか?
$ python3 Python 3.6.8 (default, May 2 2019, 20:40:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> print(sys.path) ['', '/usr/lib64/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/usr/lib64/python3.6/site-packages', '/usr/lib/python3.6/site-packages']
カレントディレクトリを先に見ているからか?
はまってる人は何人かいるみたい。
PythonのModuleNotFoundErrorについて
https://teratail.com/questions/125683
ImportError: No module named 'MySQL'
https://stackoverflow.com/questions/32877671/importerror-no-module-named-mysql