2012年11月5日月曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のII部(ビルトインオブジェクト)のまとめ演習9(不変性オブジェクト)を解いてみる。

その他参考書籍

9.

文字列は不変性を持つオブジェクトなので、インデックスによる位置の指定と値の代入では文字列を変更することはできない。なのでインデクシング、スライシング、連結、あるいはスライシングと連結を使うにしても、文字列を変更するのではなく、新しい文字列を作成することになる。

確認

コード(TextWrangler)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

L = [1,2,3,4]
L[2] = []
print(L) # [1,2,[],4]
L[2:3] = []
print(L) # [1,2,4]
del L[0]
print(L) # [2,4]
# 以下python2.xからpython3.xで挙動が変わったみたい
# エラー del L[0:]
# エラー L[1:2] = 1

入出力結果(Terminal)

$ python
Python 3.3.0 (default, Sep 29 2012, 08:16:08) 
[GCC 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.58)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> s="spam"
>>> s1=s[0]+"l"+s[2]+s[3]
>>> s
'spam'
>>> s1
'slam'
>>> s2=s[:1]+"l"+s[2:]
>>> s
'spam'
>>> s2
'slam'
>>> s3=s[0]+"l"+s[2:]
>>> s
'spam'
>>> s3
'slam'
>>> s[1]="l"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> quit()
$

ちなみにJavaScriptの場合。

コード(TextWrangler)

var s = "spam";
var s1 = s[0] + "l" + s[2] + s[3];
var s2 = s.substring(0,1) + "l" + s.substring(2);
var s3 = s[0] + "l" + s.substring(2);
var result = "";
s[1] = "l";
var strs = [s1,s2,s3];
for(var i = 0; i < strs.length; i++){
  result += s + "\n" + strs[i] + "\n";
}
$('#pre0').text(result);


JavaScriptの場合、インデックスにりょる位置のしてと値の代入で、エラーは起こらなかったけど、文字列の値の変更はPythonと同様にできなかった。(もうちょっと正確には、最後に代入しようとした「l」が返されるだけだった。)

0 コメント:

コメントを投稿