合わせた辞書:{: "B"、1:2 "A"}、B = { "C":3 "D":4} =下の2つの辞書をマージ
dict1 = {"A": 1, "B": 2} dict2 = {"C": 3, "D": 4} # 方式一 **表示打散 print({**dict1, **dict2}) # * ** 都表示打散可迭代对象 # 方式二 update方法 dict1.update(dict2) # 合并字典
タプル操作:タプル( "A"、 "B")とタプル(1,2)、辞書になる方法{:1、 "B": "A" 2}
# zip的使用 a = ("a", "b") b = (1, 2) print(dict(zip(a, b)))
キーと値の交換辞書
dict1 = {"A": 1, "B": 2} res = {k: v for v, k in dict1.items()} print(res)
私たちは、その後、どのようにそれを入力するオブジェクト生成の同じ機能を実現するために、リストはいくつかの要素のスライスを使用して選択することができることをご存知ですか?
Pythonの交換二つの変数
a,b=b,a
これは、スタックの上部に2つの値の交換に、アンパックタプルありません。
)(/)()(readlinesを/ readlineのを読んで
with open('test.txt', 'r', encoding='utf-8') as f: text = f.read() print(text)
with open('test.txt', 'r', encoding='utf-8') as f: try: line = f.readline() if line: print(line) except: pass
with open('test.txt', 'r', encoding='utf-8') as f: try: lines = f.readlines() # 全部加载到内存 for line in lines: print(line) except: pass
JSONシリアライズ、データ型をサポートすることができますが、STR / INT /タプル/ dictの/ブール/なしですが、日時、JSONのシリアル化をサポートしていません。
JSONシリアライズは、中国が、あなたはどのように行うために中国を維持したいUnicodeに変換遭遇しましたか?
import json a = json.dumps({"name": "张三"}) print(a) """ {"name": "\u5f20\u4e09"} """
import json a = json.dumps({"name": "张三"}, ensure_ascii=False) print(a) """ {"name": "张三"} """
内部のCファイルに書かれた文字ですAB二つの文書、良いソート後に読み出し、
with open('test1.txt', 'r') as f1: line1 = f1.readline() with open('test2.txt', 'r') as f2: line2 = f2.readline() line = line1 + line2 line = sorted(line) print(line) with open("test3.txt", "a+") as f: f.write("".join(line))
日現在の時刻に基づいてシークプラスN日
import datetime def datetime_operate(num:int): now = datetime.datetime.now() _new_date=now+datetime.timedelta(days=num) # 再将这个数字转换为标准的时间 new_date = _new_date.strftime("%Y%m%d") return new_date if __name__=="__main__": res = datetime_operate(10) print(res)
次のコードの何が問題になっています
def strappend(num): str='first' for i in range(num): str+=str(i) return str
次のような質問は以下のとおりです。
- strが、組み込み関数である変数名として使用すべきではありません。
- strが不変オブジェクトで、各反復が生成するジェネレータに無駄なスペースNUM大きい、大きい、新しいスペースを占有します。
- 機能面での命名規則、関数名から、より優れた区切り文字を使用します。
def str_append(num): s = 'first' for i in range(num): s += str(i) yield s if __name__ == '__main__': for i in str_append(3): print(i)
役割の文で、コードの断片を書くには?
声明で、この含まれているコンテキスト管理プロトコル、それ
__enter__
と__exit__
の2つのメソッドを。かかわらず、例外は、そのような後に自動的にシャットダウンファイルなどの必要なクリーンアップ操作、リソースの解放を実行するために使用中に発生するかどうかの、スレッドのロックが自動的に取得してリリースされていることを保証するリソースへのアクセス機会のための文、。class Test: def __enter__(self): print('__enter__() is called!') return self def dosomething(self): print('do something!') def __exit__(self,*args,**kwargs): print('__exit__() is called!') with Test() as sample: sample.dosomething()
統計は、大文字の数を文書化
with open('A.txt') as f: count=0 for word in f.read(): if word.isupper(): count+=1 print(count)
Redisの基本タイプ
- 弦
- ハッシュ
- リスト
- セット
- ZSET(ソートセット:順序付きコレクション)
Pythonの接続のMySQL / MongoDBの/ Redisの
3つのデータベース・パラダイム
分散ロック
Redisの総務
役割は何ですかデコレータ?イラスト?
デコレータは、装飾的な効果を果たし、機能を追加する機能の前提に任意のコードの変更を変更することなく、機能です。
シナリオ:
ログを挿入
パフォーマンステスト
トランザクション処理
キャッシュ
チェックパーミッション
from functools import wraps def log(label): def decorate(func): @wraps(func) def _wrap(*args,**kwargs): try: func(*args,**kwargs) print("name",func.__name__) except Exception as e: print(e.args) return _wrap return decorate @log("info") def foo(a,b,c): print(a+b+c) print("in foo") if __name__=="__main__": foo(1,2,3) # mark一下,这个还需要认真琢磨琢磨。
------------------
Pythonのガベージコレクション
Python言語が関係しているために、オブジェクトタイプとメモリは、我々はPython言語は動的な理由を入力されると呼ばれる理由である、実行時に決定されています。
ガベージコレクション:
- アプリケーションカウント機構
- マーク - クリア
- 世代回復
マジック関数は、
__call__
どのように使用するには?class Bar: def __call__(self,*args,**kwargs): print("in call") if __name__=="__main__": b=Bar() b()
ターゲットを決め関数やメソッドのですか?
from types import MethodType, FunctionType class Bar: def foo(self): pass def foo1(): pass print("foo是函数", isinstance(Bar().foo, FunctionType)) print("foo是方法", isinstance(Bar().foo, MethodType))
質量参加Pythonは値渡しまたは住所は?
Pythonで渡すパラメータは、アプリケーションのオブジェクトを渡し、どちらの値も転送アドレスパスです。
Pythonのメタクラス(メタクラス)の使用例。
モンキーパッチとは何ですか?
メモリ管理
正規表現
数え上げます
列挙反復時間の対象とすることができ、同時に、オブジェクトの現在のインデックス値を取得するには
from string import ascii_lowercase from string import ascii_uppercase s = ascii_uppercase for index, value in enumerate(s): print(index, value)
これは、5つの標準モジュールを示します
- pathlibルート操作モジュール
- urllibはネットワーク要求モジュール
- Pythonの非同期ライブラリasyncio
- 正規表現モジュールの再
- itertools動作モジュール番号ジェネレータ
Pythonの例外処理
try: 1 / 0 except Exception as e: print(e) ''' division by zero '''
Pythonで再帰の最大数
:1000デフォルトの最大数は、一般的なコンピュータは、唯一の998に到達することができます。
import sys sys.setrecursionlimit(1500) # 这个只是修改的Python解释器允许的最大递归次数,此外限制还和OS有关。
オブジェクト指向MRO
彼らの継承を取得するには、クラスのオブジェクトのMRO()メソッドを呼び出します。
断言:
Pythonは、この機能を達成するためのアサーションのステートメントで、真の一般的な表現、手順が採用されます。
# assert() 断言成功,程序继续执行,断言失败,程序报错。 # 断言能够帮助别人活着未来的你理解代码 # 找出程序中逻辑不对的地方 # 一方面,断言会提醒你某个对象应该处于何种状态 # 另一方面 ,如果某个时候断言为假,会抛出异常 def foo(a): assert a==2,Exception('不等于2') print('ok',a) if __name__=='__main__': foo(1)
ラムダ式は、匿名関数はしばしば関数型言語での引数として使用されています。
5例外タイプだけでなく、その意味のPythonを含めます
- AttributeErrorオブジェクトは、このプロパティを持っていません
- 満たされていないNotImplementedErrorメソッド
- 呼び出すとStopIterationイテレータこれ以上の値
- 操作の例外TypeError型が無効です
- IndentationErrorインデントエラー
記載されているとソートの差の並び替え:
ソートされた類似度は、()とは異なるソートおよび要素のリストをソートし、ソート()と分類することができ、ソートリストは、新しいリストを生成する(される)その場で再配置およびソートされます。この方法は、リストの並べ替えに適用されたオブジェクトは、すべての反復を操作ソートすることができますソートされます。リストのソート方法は、既存のオペレーションのリストを返し、組み込み関数ソート方法ではなく、オリジナルに基づいて行う操作よりも、新しいリストを返します。
Aryの問題
print(int(0b1010)) print(bin(0xf)) print(oct(8)) print(hex(16)) ''' 10 0b1111 0o10 0x10 '''
アルゴリズムとデータ構造:
バイナリ機能は、Pythonで実装に見えます
def binary_search(arr, num): n = len(arr) left = 0 right = n - 1 # 最右边的index while left <= right: mid = (left + right) // 2 if num == arr[mid]: return "index:" + str(mid) elif num < arr[mid]: right = mid - 1 # 比中间的小 else: left = mid + 1 # 比中间的大 return False # 从这个循环里面跳出来说明木有找到,返回False if __name__ == "__main__": lst = [1, 3, 4, 5, 7, 100] res = binary_search(lst, 7) print(res)