No.3ベストアンサー
- 回答日時:
> print(food_list.count(apple))とすれば、中のappleの数をかえしてくれますが、
> print(numlist.reverse())とするとnoneが返ってきます。
うーん、基本的に「仕様」を見るべきなんですが、これはぶっちゃけ説明がややこしい。
まず、例えば
>>> food_list = ["apple", "orange", "apple"]
とでもして、print使わずに
>>> food_list.count('apple')
とでもしてみましょう。
>>> food_list.count('apple')
2
>>>
となりますね。
これはcountと言うメソッドが「返り値」を持ってる事を意味します。この場合は返り値が2ですね。
注: 「返り値を持つ」と言うのは、メソッドcountの設計に於いて、return文が使われてる事を意味する、と今の所は覚えておけば良い。
一方、
>>> numlist = [1, 2, 3, 7, 5]
の時、
>>> numlist.reverse()
してみましょう。
>>> numlist.reverse()
>>>
何も表示されていませんね。つまり、reverse()と言うメソッドは「返り値を持たない」のです。
注: 一般的なプログラミング言語では「返り値を持たない」と表現するが、Pythonの場合は「Noneを返す」と言う言い方をしたりする。だが、あくまで一般的なプログラミング言語の文脈で「返り値を持たない」とここでは表現することにする。
またこれが意味する事は、reverseと言うメソッドの設計に於いてreturn文は使われていない。
しかも、numlistはreverseメソッドを使われた時点で
>>> numlist
[5, 7, 3, 2, 1]
>>>
と「中身が書き換えられて」います。
これを「破壊的変更」と言い、字面で見れば分かる通り、numlistは元々のnumlistではありません。データが「破壊的に」書き換えられて、元(の形のままの)データは既に無くなってしまいました。
つまり、メソッドには(と言うか関数もそうですけど)
1. return文を用いた「返り値」があるもの
2. return文を用いない「返り値」がないもの -> 「副作用目的」の関数と呼ぶ
と言う二種類が存在するのです。
注1: 従って「データの破壊的変更」も「副作用」の一つである。他には「出力」や「入力」も「副作用」である
注2: 一般的なプログラミング用語では「副作用目的の何か」は「関数」と呼ばずに「手続き」あるいは「プロシージャ」と称する。C言語以降では全てを「関数」と称する事が多くなっただけ。
Pythonの学びづらさで最大のトコってのはここでしょうねぇ。
つまり、メソッドと言っても実態は二種類ある、と言う事です。
「返り値」が目的なのか、あるいは「副作用」が目的なのか、当然メソッド名では判断が付きません。
従って、今回のような場合、やはりリファレンスをその度に読んで
「どっちが目的で組み立てられたのか」
一々調べないとならない、と言う事です。
ですから今回のこの発見は幸いですよ。これからはリファレンスでどっちが目的なのか、調べなければいけない、と言う習慣を手にしたのですから。
No.2
- 回答日時:
プログラミングを本気で勉強したいなら
どうしても仕様書を自分で読む必要があります
そんなの覚える必要もない程度なら解答しますがそれでよろしいですか?
ヒント
("apple")
()
の違いに有ります
https://docs.python.jp/3.6/index.html
この回答へのお礼
お礼日時:2018/10/31 16:58
プログラミング自体初めてだから、というと言い訳かもしれませんが、まだ自分にはこの仕様書を読むだけの語彙力がありません。
とりあえずこの疑問にお答えいただけると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
JSPで<SELECT>の中にDBから持っ...
-
配列のメソッド
-
Labelコントロールに数字を代入...
-
VBAでSaveAs使用し、指定してい...
-
Application.Wait の参照設定
-
クエリ文字列の"?"の後を非表示...
-
Excel VBA シェイプの原型のサ...
-
VBA コピーが出来ません…!
-
PropertyGridの中央の縦線
-
Refreshメソッドの使い方
-
エクセルVBAにおけるON TIMEメ...
-
eclipse-Tomcatでのデバッグに...
-
コマンドプロンプト実行後に画...
-
DataGridViewでセルクリックイ...
-
javascriptからjavaを呼び出したい
-
タブコントロールの問題 (VB)
-
Strutsで「setterメソッドが見...
-
(String args[])というメッソ...
-
onClickで関数呼出し後に、結果...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
DataGridViewでセルクリックイ...
-
final修飾子を使っているのに、...
-
javascriptからjavaを呼び出したい
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
vbaエクセルマクロ RemoveDupli...
-
【sendkeysメソッドが動かずに...
-
mainメソッドのthrows節で設定...
-
エクセルVBAにおけるON TIMEメ...
-
Refreshメソッドの使い方
-
onClickで関数呼出し後に、結果...
-
ウィンドウを最前面にできません
-
JSPで<SELECT>の中にDBから持っ...
-
コマンドプロンプト実行後に画...
-
Application.Wait の参照設定
-
Excel VBA でExcelを終了したい...
-
配列のメソッド
-
エクセルのマクロでプリンタを...
-
Excel VBA シェイプの原型のサ...
おすすめ情報