Pythonの冷たい知識
6187 ワード
1.省略記号も対象
PythonではEllipsisと呼ばれています.
Python 3では直接書いて...これを手に入れることができます.
2では...この文法はなく、Ellipsisを直接書いて取得するしかありません.
ブール値に変換すると真になります
最後に、これは単例です.
これは何の役に立つのですか.それはNumpyの文法糖で、Numpyを遊ばない人は、何の役にも立たないと言えるそうです.
ネットで見たのはこれだけ
2.類頭文字は必ずしも大文字ではない
通常、私たちが作成したコードは、クラス名の頭文字が大文字であることを黙認しているようで、インスタンスが小文字であるという準則があります.しかし、これは強制的ではありません.あなたが逆にしても大丈夫です.
しかし、いくつかの内蔵クラスがあり、頭文字は小文字で、インスタンスは大文字です.
例えばboolはクラス名であり、True、Falseはその例である.例えばellipsisはクラス名であり、Ellipsisはインスタンスである.またint,string,float,list,tuple,dictなどの一連のデータ型はクラス名であり,いずれも小文字である.
3.増分賦値の性能がより良い
ここでは+=を用いて,以下の2つの書き方を用い,効果的に等価である.
この2つの書き方にはどんな違いがありますか?
リストで例a+=bを用いて__を用いるiadd__ の場合はa.extend(b)を使用しているようで、__を使用するとadd__ では、a=a+bで、前者は元のリストに直接拡張し、後者は元のリストから値を取り出し、新しいリストで拡張してから、新しいリストオブジェクトを変数に返すので、後者の消費は明らかに大きい.
したがって、インクリメンタル付与が使用できる場合は、できるだけ使用します.
4.andとorの取値順
andとorは私たちがよく知っている2つの論理演算子です.私たちは通常それを判断するために使っていますが、それを使って値を取ることはめったにありません.
1つのor式のすべての値が真の場合、Pythonは最初の値を選択し、and式は2番目を選択します.
5.解釈プロンプトの変更方法
通常、私たちは端末でPythonコマンドを実行します.
06.デフォルトパラメータは可変オブジェクトでないことが望ましい
関数のパラメータは3種類あります可変パラメータ デフォルト キーワードパラメータ 既定のパラメータを渡すと、初心者は雷の穴を踏みやすいです.
まず例を見てみましょう
ここで、一時停止して、何を出力するか考えてみてください.
考えてみると、あなたの答えは次のように一致していますか?
もしそうなら、この部分をスキップしてもいいです.そうでなければ、下を見て、ここで分析してください.
Pythonのdef文は実行するたびに関数オブジェクトを初期化します.この関数オブジェクトは私たちが呼び出す関数で、一般的なオブジェクトと見なすことができますが、このオブジェクトには実行可能な方法と一部の属性があります.
パラメータに初期値が与えられたパラメータについては、Pythonの関数パラメータがオブジェクトを渡すため、転送アドレスとみなすこともでき、defを最初に初期化すると、この可変オブジェクトのメモリアドレスとして、このデフォルトパラメータitem_Listはこのメモリアドレスにバインドされます.後続の関数呼び出しでは、呼び出し元が新しいデフォルト値を指定すると、元のデフォルト値が上書きされます.呼び出し元が新しいデフォルト値を指定していない場合は、元のデフォルト値が使用されます.
07.アクセスクラス内のプライベートメソッド
クラス内で直接呼び出すことができるメソッドは、公有メソッド(protectedタイプのメソッドでもよいが、推奨しない)のみであることはよく知られている.すなわち,クラスのプライベートメソッドは直接呼び出すことができない.
ここではまず例を見てみましょう
すべての方法である以上、私たちは本当に直接呼び出す方法がありませんか?
もちろんありますが、決してそうしないことをお勧めします.ここは普及しているだけです.理解してください.
08.時にはスライス異常がない場合がある
実行すると、私たちが予想したようにインデックス異常が投げ出されます.
しかし、今日言うのは間違いなくこれではなく、あなたが知らないかもしれない冷たい知識です.
次のような書き方では、インデックス異常は報告されずmy_が実行されます.List[5:]は、新しいlist:[]を返します.
09.継続文字が不要な場合
コードを書く際には,コードの可読性のためにコードのレイアウトが特に重要である.
高可読性のコードを実現するためによく使われるのが続行符
では、どのような場合、継続文字を書く必要はありませんか?
まとめてみると、これらの記号の間のコード改行は、続行記号を省略することができる:
また、複数行のテキストコメントにおいて
簡単な例をいくつか挙げただけです.
しかし、あなたは一反三を挙げることを学ばなければなりません.同様に、以下のシーンでも同様に適用されます.クラス、および関数の定義. リスト導出式、辞書導出式、集合導出式、ジェネレータ式 10.Py 2はprint()も使用可能
Py 3しかprint()を使えないと思っている人も少なくないと思いますが、Py 2はprintしか使えないと思います」.
Python 2.6までは、サポートのみ
Python 2.6と2.7では、次の3つをサポートできます.
Python 3.xでは、次の2つをサポートできます.
元のアドレス:https://www.cnblogs.com/wongbingming/p/9393186.html
...
省略記号ですが、Pythonでは全て対象です.例外ではありません.PythonではEllipsisと呼ばれています.
Python 3では直接書いて...これを手に入れることができます.
>>> ...
Ellipsis
>>> type(...)
2では...この文法はなく、Ellipsisを直接書いて取得するしかありません.
>>> Ellipsis
Ellipsis
>>> type(Ellipsis)
>>>
ブール値に変換すると真になります
>>> bool(...)
True
最後に、これは単例です.
>>> id(...)
4362672336
>>> id(...)
4362672336
これは何の役に立つのですか.それはNumpyの文法糖で、Numpyを遊ばない人は、何の役にも立たないと言えるそうです.
ネットで見たのはこれだけ
...
パスの代わりに使うのは、ちょっと使いますが、使わなければならないわけではありません.try:
1/0
except ZeroDivisionError:
...
2.類頭文字は必ずしも大文字ではない
通常、私たちが作成したコードは、クラス名の頭文字が大文字であることを黙認しているようで、インスタンスが小文字であるという準則があります.しかし、これは強制的ではありません.あなたが逆にしても大丈夫です.
しかし、いくつかの内蔵クラスがあり、頭文字は小文字で、インスタンスは大文字です.
例えばboolはクラス名であり、True、Falseはその例である.例えばellipsisはクラス名であり、Ellipsisはインスタンスである.またint,string,float,list,tuple,dictなどの一連のデータ型はクラス名であり,いずれも小文字である.
3.増分賦値の性能がより良い
+=
および*=
これらの演算子を増分割付演算子と呼ぶ.ここでは+=を用いて,以下の2つの書き方を用い,効果的に等価である.
#
a = 1 ; a += 1
#
a = 1; a = a + 1
+=
その背後にある魔法の使い方は_iadd__,この方法が実現しなければ後退して次を求め、__を用いる.add__ . この2つの書き方にはどんな違いがありますか?
リストで例a+=bを用いて__を用いるiadd__ の場合はa.extend(b)を使用しているようで、__を使用するとadd__ では、a=a+bで、前者は元のリストに直接拡張し、後者は元のリストから値を取り出し、新しいリストで拡張してから、新しいリストオブジェクトを変数に返すので、後者の消費は明らかに大きい.
したがって、インクリメンタル付与が使用できる場合は、できるだけ使用します.
4.andとorの取値順
andとorは私たちがよく知っている2つの論理演算子です.私たちは通常それを判断するために使っていますが、それを使って値を取ることはめったにありません.
1つのor式のすべての値が真の場合、Pythonは最初の値を選択し、and式は2番目を選択します.
>>>(2 or 3) * (5 and 7)
14 # 2*7
5.解釈プロンプトの変更方法
通常、私たちは端末でPythonコマンドを実行します.
>>> for i in range(2):
... print (i)
...
0
1
>>>
と...
この2つのプロンプトも修正できると思いますか?>>> import sys
>>> sys.ps1
'>>> '
>>> sys.ps2
'... '
>>>
>>> sys.ps2 = '................'
>>> sys.ps1 = 'Python >>>'
Python >>>for i in range(2):
................ print (i)
................
0
1
06.デフォルトパラメータは可変オブジェクトでないことが望ましい
関数のパラメータは3種類あります
まず例を見てみましょう
def func(item, item_list=[]):
item_list.append(item)
print(item_list)
func('iphone')
func('xiaomi', item_list=['oppo','vivo'])
func('huawei')
ここで、一時停止して、何を出力するか考えてみてください.
考えてみると、あなたの答えは次のように一致していますか?
['iphone']
['oppo', 'vivo', 'xiaomi']
['iphone', 'huawei']
もしそうなら、この部分をスキップしてもいいです.そうでなければ、下を見て、ここで分析してください.
Pythonのdef文は実行するたびに関数オブジェクトを初期化します.この関数オブジェクトは私たちが呼び出す関数で、一般的なオブジェクトと見なすことができますが、このオブジェクトには実行可能な方法と一部の属性があります.
パラメータに初期値が与えられたパラメータについては、Pythonの関数パラメータがオブジェクトを渡すため、転送アドレスとみなすこともでき、defを最初に初期化すると、この可変オブジェクトのメモリアドレスとして、このデフォルトパラメータitem_Listはこのメモリアドレスにバインドされます.後続の関数呼び出しでは、呼び出し元が新しいデフォルト値を指定すると、元のデフォルト値が上書きされます.呼び出し元が新しいデフォルト値を指定していない場合は、元のデフォルト値が使用されます.
07.アクセスクラス内のプライベートメソッド
クラス内で直接呼び出すことができるメソッドは、公有メソッド(protectedタイプのメソッドでもよいが、推奨しない)のみであることはよく知られている.すなわち,クラスのプライベートメソッドは直接呼び出すことができない.
ここではまず例を見てみましょう
class Kls():
def public(self):
print('Hello public world!')
def __private(self):
print('Hello private world!')
def call_private(self):
self.__private()
ins = Kls()
# ,
ins.public()
# ,
ins.__private()
# ,
ins.call_private()
すべての方法である以上、私たちは本当に直接呼び出す方法がありませんか?
もちろんありますが、決してそうしないことをお勧めします.ここは普及しているだけです.理解してください.
# ,
ins._Kls__private()
ins.call_private()
08.時にはスライス異常がない場合がある
my_list = [1, 2, 3, 4, 5]
print(my_list[5])
実行すると、私たちが予想したようにインデックス異常が投げ出されます.
Traceback (most recent call last):
File "F:/Python Script/test.py", line 2, in
print(my_list[5])
IndexError: list index out of range
しかし、今日言うのは間違いなくこれではなく、あなたが知らないかもしれない冷たい知識です.
次のような書き方では、インデックス異常は報告されずmy_が実行されます.List[5:]は、新しいlist:[]を返します.
my_list = [1, 2, 3]
print(my_list[5:])
09.継続文字が不要な場合
コードを書く際には,コードの可読性のためにコードのレイアウトが特に重要である.
高可読性のコードを実現するためによく使われるのが続行符
\
です.>>> a = 'talk is cheap,'\
... 'show me the code.'
>>>
>>> print(a)
talk is cheap,show me the code.
では、どのような場合、継続文字を書く必要はありませんか?
まとめてみると、これらの記号の間のコード改行は、続行記号を省略することができる:
[]
,()
,{}
>>> my_list=[1,2,3,
... 4,5,6]
>>> my_tuple=(1,2,3,
... 4,5,6)
>>> my_dict={"name": "MING",
... "gender": "male"}
また、複数行のテキストコメントにおいて
'''
、継続文字は書かなくてもよい.>>> text = '''talk is cheap,
... show me the code'''
簡単な例をいくつか挙げただけです.
しかし、あなたは一反三を挙げることを学ばなければなりません.同様に、以下のシーンでも同様に適用されます.
Py 3しかprint()を使えないと思っている人も少なくないと思いますが、Py 2はprintしか使えないと思います」.
Python 2.6までは、サポートのみ
print "hello"
Python 2.6と2.7では、次の3つをサポートできます.
print "hello"
print("hello")
print ("hello")
Python 3.xでは、次の2つをサポートできます.
print("hello")
print ("hello")
元のアドレス:https://www.cnblogs.com/wongbingming/p/9393186.html