質問

この質問に答えはこちら

うかのStackOverflow地域と考えるのに重要な言語機能(わざ)のエラーになります。特定義されるプログラマーとしてPythonic.

Python(pythonic)ム-"コード表現の"自然の特徴の言語のエラーになります。

プラス、イディオムは全てのPythonプログラマを学ぶ早いますか?

かまいません。

関連:

役に立ちましたか?

解決

Python言語で記述できるとして、

"ルールすることができる 手のひらを大きな袋の フック".

においては、ほとんどすべてのpythonでは以下のと同様の簡単なる。すべてが利用可、変更、tweakable.が非常に少数言語のレベルです。

たとえば、len(データ)が組み込みます。 len(data) 作るだけでチェックのための data.__len__() 方法、それと同じものを見ることができないを返します。るというように len() でのanyオブジェクトを実装するためのものです __len__() 方法。


開始による学習については、基本的な構文:

  1. 動的強く型付けされた言語
  2. bool,int,float,string,リストタプル辞を設定
  3. 諸表記述は、オブジェクト"
  4. 基本的な機能の定義

その場合についてのpython製作所

  1. 輸入モジュール(簡単な)
  2. pythonのパス(sys.パス)
  3. dir() 機能
  4. __builtins__

一度理解しているといいただくと、より高度な言語機能:

  1. 反復子
  2. オーバーライドのように __len__ (トン)
  3. リストの理解や発電機
  4. クラスとオブジェクト(再度、シンプルでまったらカップルルール)
  5. python相続規則

最後にふたつのメッセージのコンフォートレベルのこれらの項目を中心としpythonic)は、具体的な項目:

  1. スレッドにpythonの注世界の通訳-ロック)
  2. コマ
  3. データベースアクセス
  4. ファイルのIO
  5. ソケット
  6. など---。

とも忘れられない 禅のPythonの (ティム-ピーターズ)

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

他のヒント

このページでは、すべての主要なPythonのイディオムをカバーしています:ます。http:// python.net/~goodger/projects/pycon/2007/idiomatic/handout.htmlする

Pythonで重要なイディオムはドキュメンテーション文字列です。

すべてのオブジェクトは、そのオブジェクトのヘルプを取得するために使用することができます__doc__属性を持っています。あなたはこのようなモジュール、クラス、メソッド、および機能上の__doc__属性を設定することができます:

# this is m.py
""" module docstring """

class c:
    """class docstring"""
    def m(self):
        """method docstring"""
        pass

def f(a):
    """function f docstring"""
    return

さて、あなたはhelp(m)を入力すると、help(m.f)などには、ヘルプメッセージとしてドキュメンテーション文字列を出力します。

それだけで通常のオブジェクトのイントロスペクションの一部だから

これはepydocようなdocumention生成システムによって使用されるか、またはユニットテストによりテスト目的のために使用することができる。

また、(すなわち、非慣用)より型破りに置くことができ、このような<のhref = "http://www.ibm.com/developerworks/linux/library/l-cpdpars.html?caにおける文法として使用しています= DGR-lnxw82DParser」REL = "noreferrer"> Dparser の

それはさらに興味深い私になるところがあり、そのたとえのドキュメントのある読み取り専用、ほとんどのオブジェクトに属性を使用すると、このようにどこでもそれらを使用することができます:

x = 5
""" pseudo docstring for x """

とドキュメント epydoc のようなツールは、それらをピックアップし、反対に、(それらを適切にフォーマットすることができますコードのフォーマット内に留まる通常のコメントへ。

デコレータは私の票を取得します。他にどこあなたのような何かを書くことができます:

def trace(num_args=0):
  def wrapper(func):
    def new_f(*a,**k):
      print_args = ''
      if num_args > 0:
        print_args = str.join(',', [str(x) for x in a[0:num_args]])
      print('entering %s(%s)' %(f.__name__,print_args))
      rc = f(*a,**k)
      if rc is not None:
        print('exiting %s(%s)=%s' %(f.__name__,str(rc)))
      else:
        print('exiting %s(%s)' %(f.__name__))
      return rc
    return new_f
  return wrapper

@trace(1)
def factorial(n):
  if n < 2:
    return 1
  return n * factorial(n-1)
factorial(5)

などの出力を取得します:

entering factorial(5)
entering factorial(4)
entering factorial(3)
entering factorial(2)
entering factorial(1)
entering factorial(0)
exiting factorial(0)=1
exiting factorial(1)=1
exiting factorial(2)=2
exiting factorial(3)=6
exiting factorial(4)=24
exiting factorial(5)=120
使用状況を一覧表示するために接続されている

すべて。
内包表記、発電機、など。

より高度な観点からは、辞書はPythonで内部的に使用されている方法を理解します。クラス、関数、モジュール、参照が辞書上のすべてのプロパティだけです。これが理解されれば、それはどのようにモンキーパッチを理解し、強力な__gettattr__、__setattr__、および__call__メソッドを使用して簡単です。

ここで助けることができるものです。

:違いは何ですか
[ foo(x) for x in range(0, 5) ][0]

( foo(x) for x in range(0, 5) ).next()

答え: 第二の例では、fooが一度だけ呼ばれます。 fooが副作用を有する場合、またはリストを構築するために使用される反復可能が大きい場合、これは重要であるかもしれない。

個人的には、MicrosoftのBasicやVisual Basicのよう(、のインデントのを使用することにより、およびない言葉でコードブロックを定義する私は本当にPythonの構文などは「BEGIN」と「END」 - 私は好きではありませんこれらの)またはC、C ++、Javaの、Perlでのように(左右の括弧を使用して - 私は)これらが好き

。 インデントはいつも私にとって非常に重要となっているが、私はそれについて多くの「ノイズ」に行っていない、ので、

これは本当に私を驚かせた - 私はそれと住んでいた、そしてスキルは他の人々を読むことができると考えられています、「スパゲッティ」コード。さらに、私は別のプログラマは言語の一部インデントを作ることをお勧め聞いたことがありません。パイソンまで!私は私が最初にこのアイデアを実現していた希望します。

私にとっては、それはあなたが良い、読みやすいコードを書くためにPythonの構文力かのようです。

さて、私は私のソープボックスをオフに取得します。 ; - )

特にPython的には動的型付けとPythonで使用されるリストのさまざまな味、特にタプルあったように。

私を襲った

2つのこと

Pythonのリストの強迫観念は、LISP-Yであると言うことができますが、それはそれ自身の独特の風味を持っています。以下のような行:

return HandEvaluator.StraightFlush, (PokerCard.longFaces[index + 4], 
  PokerCard.longSuits[flushSuit]), []

あるいは

return False, False, False

ちょうどPythonと何もないように見えます。 (技術的には、あなたが同様のLuaで後者を参照してくださいね、しかし、Luaは一般的にはかなりPython的である。)

文字列置換を使用します:

name = "Joe"
age = 12
print "My name is %s, I am %s" % (name, age)

私は簡単な使用は、私が最も欠場するものであることを、Pythonでプログラミングをしていないときます。

あなたは十分に早く開始することはできませんもう一つは、おそらくテストしています。ここでは特にdoctestを、同時にそれを説明することで、あなたのコードをテストする素晴らしい方法です。

のdoctestはこのような対話インタプリタセッションに加えてテキストを含む単純なテキストファイルです

Let's instantiate our class::

>>> a=Something(text="yes")
>>> a.text
yes

Now call this method and check the results::

>>> a.canify()
>>> a.text
yes, I can

の場合、例えばa.textは、テストが失敗する別の何かを返します。

のdoctestは、内部ドキュメンテーション文字列またはスタンドアロンのテキストファイルとすることができ、のdoctestモジュールを用いて実行されます>。もちろん、もっと知られているユニットテストも用意されています。

私は、オンラインチュートリアルや書籍が唯一最善の方法で物事をやっていない、ことをやっについて話だと思います。 Pythonの構文に加えて、私はいくつかのケースではそのスピードが重要だと思います。

のPythonは、実際には2つのベンチマーク機能への道を提供する!!

一つの方法はそうのような、profileモジュールを使用することです

import profile

def foo(x, y, z):
    return x**y % z # Just an example.

profile.run('foo(5, 6, 3)')

これを実行する別の方法は、このように、timeitモジュールを使用することです

import timeit

def foo(x, y, z):
    return x**y % z # Can also be 'pow(x, y, z)' which is way faster.

timeit.timeit('foo(5, 6, 3)', 'from __main__ import *', number = 100) 
# timeit.timeit(testcode, setupcode, number = number_of_iterations)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top