pythonを使ったメモ

5217 ワード

構文
値と参照
Pythonパラメータ伝達は「伝達対象参照」方式を採用している.この方式は、伝達値と伝達参照の統合に相当する.
  • 関数が辞書やリストなどの可変オブジェクトの参照を受信すると、オブジェクトの元の値が変更されます.これは、「参照の伝達」によってオブジェクトが伝達されることに相当します.
  • 関数が、数値、文字、またはメタグループなどの可変オブジェクトの参照を受信した場合、元のオブジェクトを直接変更することはできません.「値の伝達」によってオブジェクトを伝達することに相当します.
  • はいれつ
    配列の結合
    戻り値がないためappend関数を直接使用することはできません.この関数は+で2つの配列を直接結合できます.
    同じ数と異なる数を判断する
    #     
    list1 = ['  ', '  ', '  ', '  ']
    #      
    list2 = ['  ', '  ', '  ', '  ']
     
    a = [x for x in list1 if x in list2] #        
    b = [y for y in (list1 + list2) if y not in c] #          
     
    print('a   :',a)
    print('b   :',b)
     
    c = [x for x in list1 if x not in list2]  # list1      list2   
    d = [y for y in list2 if y not in list1]  # list2      list1   
    print('c   :',c)
    print('d   :',d)
    
    out:
    a   : ['  ', '  ', '  ']
    b   : ['  ', '  ']
    c   : ['  ']
    d   : ['  ']

    ツールバーの
    並べ替えガイド
    名前付き属性を持つオブジェクトの場合:
    >>> student_tuples = [
    ...     ('john', 'A', 15),
    ...     ('jane', 'B', 12),
    ...     ('dave', 'B', 10),
    ... ]
    >>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    ディクショナリのソート
    リファレンス
  • sorted関数はまずsorted関数を紹介し,sorted(iterable,key,reverse),sortedにはiterable,key,reverseの3つのパラメータがある.

  • ここでiterableは反復可能なオブジェクトを表し、例えばdict.items()、dict.keys()などであり、keyは比較に関与する要素を選択するための関数であり、reverseはソートが逆であるか順序を指定するために使用され、reverse=trueは逆であり(大きいから小さい)、reverse=falseは順序(小さいから大きい)、デフォルトはreverse=falseである.
  • keyソート辞書をkeyソートするには、sorted関数を直接呼び出すことができます.
  • my_dict = {'lilee':25, 'age':24, 'phone':12}
    sorted(my_dict.keys())
         
    
    ['age', 'lilee', 'phone']

    sorted(my_dict.keys()を直接使用すると、key値で辞書をソートできます.ここではkey値を順番にソートします.逆順序でソートするには、reverseをtrueにするだけです.
    sorted(my_dcit.keys(), reverse = true)
  • value値に従ってソートする3つの方法は、辞書をvalue値に従ってソートする
  • を実現することができる.
    (1)key lambda匿名関数を用いてvalueをソートする
    d = {'lilee':25, 'wangyan':21, 'liqun':32, 'age':19}
    sorted(d.items(), key=lambda item:item[1])
         
    [('age',19),('wangyan',21),('lilee',25),('liqun',32)]
    
           
    sorted(d.items(), key=lambda item:item[1], reverse=True)
            
    [('liqun',32),('lilee',25),('wangyan',21),(age',19)]

    (2)operatorのitemgetterでソート
    import operator
    sorted(d.items(), key=operator.itemgetter(1))
         
    
    [('age',19),('wangyan',21),('lilee',25),('liqun',32)]

    isと==の違い
    https://www.cnblogs.com/wangkun122/p/9082088.html
    isと==はいずれも対象を比較判断する役割を果たすが,対象を比較判断する内容は異なる.具体的な違いを見てみましょう.
    ==比較オペレータとis同一性演算子の違い
    ==python標準オペレータの比較オペレータで、次の2つの文字列間の比較など、2つのオブジェクトのvalue(値)が等しいかどうかを比較するために使用されます.
    例1.
    >>> a = 'cheesezh'
    >>> b = 'cheesezh'
    >>> a == b
    True

    isは同一性演算子とも呼ばれ、この演算子はオブジェクト間の一意のアイデンティティ識別、すなわちidが同じか否かを比較的に判断する.次のリスト間を比較すると、is同一性演算子の動作原理がわかります.
    例2.
    >>> x = y = [4,5,6]
    >>> z = [4,5,6]
    >>> x == y
    True
    >>> x == z
    True
    >>> x is y
    True
    >>> x is z
    False
    >>>
    >>> print id(x)
    3075326572
    >>> print id(y)
    3075326572
    >>> print id(z)
    3075328140

    数値型と文字列型のみの場合、a is bはTrueであり、aとbがtuple,list,dictまたはset型の場合、a is bはFalseである
    バックグラウンド
    requiremnets.txt
    pip freeze > requirements.txt //  
    pip install -r requirements.txt //  

    rでエスケープを取り消す
    仮想環境の作成とアクティブ化
    pip3 install virtualenv
    virtualenv venv
    source venv/bin/activate
    pip install -r requirements.txt

    ユニットテスト
    import unittest
    
    class MyTest(unittest.TestCase):  #   unittest.TestCase
        def tearDown(self):
            #              
            print('111')
    
    def setUp(self):
        #              
        print('22222')
    
    @classmethod
    def tearDownClass(self):
    #      @ classmethod   ,   test        
         print('4444444')
    @classmethod
    def setUpClass(self):
    #     @classmethod    ,  test       
        print('33333')
    
    def test_a_run(self):
        self.assertEqual(1, 1)  #     
        
    def test_b_run(self):
        self.assertEqual(2, 2)  #     
        
    if __name__ == '__main__':
        unittest.main()#         

    jsonエラーxx is not JSON serializable
    jsonを使用しているときによく遭遇するxxx is not JSON serializable、つまり一部のオブジェクトをシーケンス化できない
    jsonEncoderを書き換える
    import  decimal
    class DecimalEncoder(json.JSONEncoder):
        def default(self, o):
            if isinstance(o, decimal.Decimal):
                return float(o)
            super(DecimalEncoder, self).default(o)
    
    # and then:
    json.dumps(chart_list,..., cls=DecimalEncoder)

    Jupyter Notebookの実行
    jupyter notebook --ip=0.0.0.0 --no-browser --allow-root