プログラミング

プロおよび熱狂的プログラマーのためのQ&A

6
Pythonでは、メソッドではなく関数をいつ使用すればよいですか?
PythonのZenは、物事を行う方法は1つだけである必要があると述べています。 ささいな例であるChessBoardオブジェクトを見てみましょう。理事会でキングの合法的な動きをすべて利用できるようにする方法が必要だとしましょう。ChessBoard.get_king_moves()またはget_king_moves(chess_board)を記述しますか? これが私が調べたいくつかの関連する質問です: なぜPythonは「マジックメソッド」を使用するのですか? Python文字列に文字列長メソッドがない理由はありますか? 私が得た答えはほとんど決定的ではありませんでした: なぜPythonは一部の機能(list.index()など)にメソッドを使用し、他の機能(たとえばlen(list))に関数を使用するのですか? 主な理由は歴史です。関数は、タイプのグループに対して一般的であり、メソッドをまったく持たないオブジェクト(タプルなど)でも機能することを目的とした操作に使用されました。Pythonの関数機能(map()、apply()など)を使用するときに、アモルファスオブジェクトのコレクションに簡単に適用できる関数があると便利です。 実際、組み込み関数としてlen()、max()、min()を実装する方が、実際には、各型のメソッドとして実装するよりもコードが少なくて済みます。個々のケースについて疑問を投げかけることはできますが、それはPythonの一部であり、そのような根本的な変更を今行うには遅すぎます。関数は、大規模なコード破損を回避するために残しておく必要があります。 興味深いことですが、上記では実際に採用する戦略についてはあまり触れていません。 これが理由の1つです。カスタムメソッドを使用すると、開発者はgetLength()、length()、getlength()などの異なるメソッド名を自由に選択できます。Pythonは厳密な命名を強制するため、共通の関数len()を使用できます。 もう少し面白い。私の見解では、関数はある意味では、インターフェースのPythonicバージョンです。 最後に、グイド自身から: 能力/インターフェースについて話すと、「ローグ」の特別なメソッド名のいくつかについて考えさせられました。言語リファレンスでは、「クラスは、特殊な名前でメソッドを定義することにより、特殊な構文(算術演算や添え字やスライスなど)によって呼び出される特定の演算を実装できる」と述べています。しかし、構文のサポートではなく、組み込み関数の利点のために提供されているように見える、__len__またはのような特別な名前を持つこれらすべてのメソッドが__unicode__あります。それはので、おそらく、インターフェイスベースのPythonで、これらの方法は、ABCの定期的な名前のメソッドに変わるでしょう __len__になるだろう class container: ... def len(self): raise NotImplemented それについてもう少し考えますが、すべての構文操作が特定のABCで適切な通常の名前のメソッドを呼び出さ<object.lessthancomparable.lessthanないのはなぜかわかりません。「」は、例えば、あろうおそらく呼び出し「(あるいは「」「)。したがって、もう1つの利点は、Pythonをこの複雑な名前の奇妙さから引き離すことができることです。これは、HCIの改善のようです。 うーん。同意するかどうかはわかりません(図:-)。 最初に説明したいのが「Pythonの理論的根拠」です。 まず、HCIの理由から、x.len()ではなくlen(x)を選択しました(def __len__()かなり後になりました)。実際には2つの理由があり、どちらもHCIです。 (a)一部の操作では、接頭表記は単にpostfixよりも読みやすくなります-接頭辞(およびインフィックス!)の操作は数学において長い伝統があり、ビジュアルが問題について数学者が考える助けとなる表記法を好みます。式を次のようx*(a+b)に書き換える簡単さを比較してくださいx*a + x*b生OO表記を使用して同じことをやっての不器用さにします。 (b)何かの長さを要求していることlen(x)を知っているというコードを読んだとき。これは2つのことを教えてくれます。結果は整数であり、引数はなんらかのコンテナです。逆に、私がを読んだときx.len()、それがxインターフェイスを実装しているコンテナ、または標準を持つクラスから継承しているコンテナの一種であることをすでに知っている必要がありますlen()。マッピングを実装していないクラスにget()or keys() メソッドがある場合、またはファイルではないものにwrite()ください。 同じことを別の言い方をすると、「len」は組み込みの操作と見なされ ます。それを失うのは嫌だ。あなたがそれを意味していたのかどうかははっきりしませんが、 'def len(self):...'は通常の方法に降格したいようです。私はそのことを強く-1としています。 説明することを約束したPythonの理論的根拠の2番目のビットは、__special__単に見るだけでなく、 特別な方法を選んだ理由specialです。クラスがオーバーライドする可能性のある多くの操作、一部の標準(__add__またはまたは__getitem__)、一部の標準ではない(たとえば、ピクルス__reduce__は長い間Cコードでまったくサポートされていなかった)を予期していました。これらの特別な操作で通常のメソッド名を使用したくありませんでした。そのため、既存のクラス、またはすべての特別なメソッドのエンサイクロペディックメモリを持たないユーザーが作成したクラスは、実装するつもりのない操作を誤って定義してしまう可能性があります。 、悲惨な結果をもたらす可能性があります。IvanKrstićはこれをより簡潔に彼のメッセージで説明しました。メッセージは私がこれをすべて書いた後に届きました。 ---Guido van Rossum(ホームページ:http ://www.python.org/~guido/ ) これについての私の理解は、特定のケースでは、プレフィックス表記がより意味をなす(つまり、Duck.quackがquack(Duck)よりも言語の観点から理解できる)ことであり、関数も「インターフェース」を許可します。 そのような場合、私の推測は、Guidoの最初の点のみに基づいてget_king_movesを実装することです。しかし、それでも、同様のプッシュメソッドとポップメソッドを使用してスタッククラスとキュークラスを実装するなど、関数またはメソッドのどちらであるかについて、未解決の問題が数多く残っています。(私は本当にプッシュポップインターフェイスに信号を送りたいので、ここでは関数を推測します) TLDR:関数とメソッドのどちらを使用するかを決定するための戦略を誰かが説明できるか?

3
新しい日時APIを使用して日付をフォーマットする
私は新しい日付時間APIで遊んでいましたが、これを実行すると: public class Test { public static void main(String[] args){ String dateFormatted = LocalDate.now() .format(DateTimeFormatter .ofPattern("yyyy-MM-dd HH:mm:ss")); System.out.println(dateFormatted); } } それは投げます: Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: HourOfDay at java.time.LocalDate.get0(LocalDate.java:680) at java.time.LocalDate.getLong(LocalDate.java:659) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) at java.time.format.DateTimeFormatterBuilder$NumberPrinterParser.format(DateTimeFormatterBuilder.java:2543) at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182) at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745) at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719) at java.time.LocalDate.format(LocalDate.java:1685) at Test.main(Test.java:23) LocalDateクラスのソースコードを見ると、次のことがわかります。 private int …

3
Goのペア/タプルデータ型
Tour of Goの最後の練習をしているときに、(string、int)ペアのキューが必要だと判断しました。とても簡単です。 type job struct { url string depth int } queue := make(chan job) queue <- job{url, depth} しかし、これは私に考えさせました:Goに組み込みのペア/タプルデータ型はありますか?関数から複数の値を返すことがサポートされていますが、生成された複数の値のタプルは、Goの型システムでは一流の市民ではありません。それは事実ですか? 「何を試しましたか」の部分については、明白な構文(PythonプログラマーのPOVから) queue := make(chan (string, int)) うまくいきませんでした。
118 go  tuples 



16
「未定義のプロパティを読み取れません」エラーを回避するにはどうすればよいですか?
私のコードでは、多くのオブジェクトが相互にネストされているエントリを持つ配列を扱います。次のようになります。 // where this array is hundreds of entries long, with a mix // of the two examples given var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}]; 時々配列を反復処理する必要があるため、これは私に問題を引き起こしています、そして矛盾は私にそのようなエラーを投げています: for (i=0; i<test.length; i++) { // ok on i==0, but 'cannot read property of undefined' on i==1 console.log(a.b.c); } 私は言うことができることは承知していますがif(a.b){ console.log(a.b.c)}、5つまたは6つまでのオブジェクトが互いにネストされている場合、これは非常に面倒です。エラーをスローせずにconsole.logが存在する場合にのみそれを実行できるようにする他の(より簡単な)方法はありますか?
118 javascript 

6
エラー:ORA-65096:Oracleの共通ユーザーまたはロール名が無効です
StackаэтотвопросестьответынаStack Overflowнарусском:Ошибка-ORA-65096:invalid common user or role name-присозданиипользователя oracle11gをインストールしたところ、Scottスキーマがありませんでした。だから私はそれを自分で生成しようとしています。「Scott」スキーマのSQLスクリプトを取得しましたが、「tigerで識別されるScottを作成するユーザー」というクエリを実行しようとすると、次のエラーが表示されます。 ORA-65096:Oracleの共通ユーザーまたはロール名が無効です。 基本的に、ユーザー「Scott」を作成することはできません。それはなぜですか、どうすれば問題を解決できますか?
118 oracle  oracle12c 


12
Bootstrap 4のドロップダウンで矢印を削除する方法は?
ブートストラップ4を使用しています。ドロップダウンの矢印を削除しようとしました。 答えブートストラップ3はもはや動作しないために私が見つけました。 jsfiddleはこちらです。 <div class="dropdown open"> <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Dropdown </button> <div class="dropdown-menu" aria-labelledby="dropdownMenu1"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> </div> </div>

6
LIKEフィルターでアンダースコア文字を使用すると、すべての結果が得られるのはなぜですか?
以下のSQLクエリをLIKE条件付きで記述しました。 SELECT * FROM Manager WHERE managerid LIKE '_%' AND managername LIKE '%_%' のLIKE下線を検索したいのです%_%が、列のデータに下線文字がないことがわかります。 クエリでテーブルのすべてのレコードが返されるのはなぜですか? サンプルデータ: create table Manager( id int ,managerid varchar(3) ,managername varchar(50) ); insert into Manager(id,managerid,managername)values(1,'A1','Mangesh'); insert into Manager(id,managerid,managername)values(2,'A2','Sagar'); insert into Manager(id,managerid,managername)values(3,'C3','Ahmad'); insert into Manager(id,managerid,managername)values(4,'A4','Mango'); insert into Manager(id,managerid,managername)values(5,'B5','Sandesh'); Sql-Fiddle
118 sql  sql-server 


2
複数のfont-weights、1つの@ font-faceクエリ
私はKlavikaフォントをインポートする必要があり、複数の形状とサイズでそれを受け取りました: Klavika-Bold-Italic.otf Klavika-Bold.otf Klavika-Light-Italic.otf Klavika-Light.otf Klavika-Medium-Italic.otf Klavika-Medium.otf Klavika-Regular-Italic.otf Klavika-Regular.otf 次に、クエリでを@font-face定義している-queryを1つだけ使用してCSSにインポートできるかどうかを知りたいと思いweightます。クエリを8回コピー/貼り付けしたくない。 したがって、次のようなもの: @font-face { font-family: 'Klavika'; src: url(../fonts/Klavika-Regular.otf), weight:normal; src: url(../fonts/Klavika-Bold.otf), weight:bold; }
118 css  fonts  font-face 

7
WindowsのGit Bashでエイリアスを設定するにはどうすればよいですか?
git-scm.comからダウンロードしたGit Bash for Windowsでコマンドをエイリアスする方法 つまり、GitではなくBashコマンドです。 (windows7) 編集: .bashrc(@gturriで示唆されているように)ファイルにエイリアスを書き込んで、コンソールに追加しない(システムの再起動後)(lsコマンドのエイリアスを書いたことがないため、デフォルトのエイリアスにする必要があります)
118 git  bash 

3
$ 0とBASH_SOURCEの間で選択
一つは間どのように選択しない"$0"と、"${BASH_SOURCE[0]}" GNUからのこの説明は私にはあまり役に立ちませんでした。 BASH_SOURCE An array variable whose members are the source filenames where the corresponding shell function names in the FUNCNAME array variable are defined. The shell function ${FUNCNAME[$i]} is defined in the file ${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}
118 bash 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.