1.map、filter、reduce
1) map(func, input_list)
次のように関数を入力リストの各要素に適用します:
input_list = [1, 2, 3, 4, 5]
def pow_elem(x):
"""
x の累乗を拡張します
:param x:
:return:
"""
return x * x
def multi_x_y(x, y):
return x * y
プリントマップ(pow_elem, input_list) # 出力:[1, 4, 9, 16, 25]
プリントマップ(multi_x_y, input_list, input_list) # 出力:[1, 4, 9, 16, 25]
2) filter(func_or_none, sequence)
関数の戻り値 True を満たすシーケンス内の値をフィルタリングし、次のような新しいシーケンスの戻り値を形成します。
def is_odd(x):
"""
x かどうかを判断します。は奇数です
: param x:
:return:
"""
return True if x % 2 > 0 else False
print filter(is_odd, input_list) # 出力: [1, 3, 5]
3)reduce(function, sequence)
reduce()関数が受け取るパラメータはmap()、関数f、リストと似ていますが、reduce()で渡される関数fとは動作が異なります。 ) は 2 つのパラメータを受け取る必要があり、reduce() は要素ごとに関数 f を繰り返し呼び出し、最終的な結果値を返します。例:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) は ((((1+2)+3)+4)+5)
print reduce( lambda x, y: x * y, input_list) # 出力: 120
2. 三項演算
次の 2 つの書き方は同等です:
"Yes" if 2==2 else "No"
("No", "Yes ")[2==2]
つまり:
1) 条件が true の場合、else 条件が false の場合
2) (if_test_is_false, if_test_is_true)[test]
1) と 2) は両方とも 3 項演算を実装できますが、2) は相対的にまれで、あまり洗練されておらず、2) は次のように短絡操作ではありません:
5 if True else 5/0 # 出力: 5
(1/0, 5)[True] # throwException-> ZeroDivisionError: 整数の除算またはゼロによるモジュロ
3. Decorator
1) Python では、次のように関数を定義し、関数内で呼び出すことができます:
def hi(name="patty"):
print("now you hi() 関数内にあります ") GDef Greet ():
def Welcome ():
Print (GREET ())
print("now you are back in the hi() function")
出力結果は次のとおりです。
今、hi() 関数の中にいます
今、あなたはwelcome() 関数
今、welcome() 関数にいます
今、hi() 関数に戻っています
2) 次のように、内部関数を返し、外部関数を使用してそれを呼び出すこともできます:
defgreet():
def using using using def using using ‐ ‐ ‐ ‐def ‐ return ‐ def welcome():
ようこそ
印刷こんにちは() #
print hi()() # これで、greet() 関数に入ります
def hi():
return "hi patty!"
def doSomethingBeforeHi(func):
print(func())
doSomethingBeforeHi(hi)
hi()を実行する前に退屈な作業をしています
hi patty!
この時点で、単純なデコレータを実装しました。 hi() 関数を呼び出す前に、行を出力します。実際のアプリケーションでは、これはいくつかの前処理操作である可能性があります。実際、デコレータの機能は、コア ロジックの実行前後にいくつかの共通関数を追加することです。
4) 単純なデコレーターの実装
def a_new_decorator(a_func):
def WrapTheFunction():
print("I am doing some beautiful work before executing a_func()")
a_func() # この関数を呼び出します
return WrapTheFunction
def a_function_requiring_decoration():
print("私は悪臭を取り除くために何らかの装飾が必要な関数です")a_function_requiring_decoration ( )#outputs: "私は、悪臭を取り除くために何らかの装飾が必要な関数です。"
a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)
#現在、a_function_requiring_decoration は WrapTheFunction() によってラップされています
a_function_requiring_decoration()
# a_func() を実行する前に退屈な作業をしています
# 悪臭を取り除くために装飾が必要な関数です
# a_func() を実行した後に退屈な作業をしています
5) 注意事項Form
@a_new_decorator
def b_function_requiring_decoration():
print("私は悪臭を取り除くために何らかの装飾が必要な別の関数です")
b_function_requiring_decoration()
# a_func() を実行する前に退屈な作業をしています
#私は、悪臭を取り除くために何らかの装飾が必要な別の関数です
# a_func() を実行した後、退屈な作業を行っています
ここで @a_new_decorator は、a_new_decorator(b_function_requiring_decoration) と同等です
6) 4) a_function_requiring_decoration の名前
を取得します実際、取得したいのは、a_func に対応する a_function_requiring_decoration 関数名であり、この問題を解決するためのラップを提供します。
functools import Wraps から
def a_new_decorator(a_func):
@wraps(a_func)
def WrapTheFunction():
print("a_func() を実行する前に退屈な作業をしています")
a_func()
print( "a_func() の実行後に退屈な作業を行っています")
return WrapTheFunction
7) デコレーターのいくつかのアプリケーション シナリオ
ユーザー認証
def require_auth(f):
@wraps(f)
defdecorated(*args , **kwargs):
auth = {"username": "patty", "password": "123456"}
そうでない場合 check_auth(auth['username'], auth['password']):
authenticate()
return f(*args, **kwargs)
def check_auth(ユーザー名, パスワード):
off else False
defauthenticate():
print "認証済み"
returndecorated
def welcome() :
return "ようこそパティ!"
def logit( func):
@wraps(func)
def with_logging(*args, **kwargs):
print(func.__name__ + " ")
return func(*args, **kwargs)
return with_logging
def add_func(x):
"""いくつかの計算をしてください。"""
return x + x
result = add_func(4)
は次のように出力されます。
def Wrap_function(*args, **kwargs):
print(log_string) Opened_file.write(log_string + 'n') W Returnipped_function
returnlogging_Decorator
@logit ()
Def myfunc1 ():
Pass
myfunc1 ()
# OUNC1 WAS Called
# 上記の文字列を持つ OU T.LOG というファイルが存在します
@@@@ t logit(logfile='func2.log' )
def myfunc2():
pass
9) クラスをデコレータとして使用
import os
def __init__(self, log_file) (log_msg) R Fout.write (OS) .LINESEP)
# さあ、通知を送信します
Self.notify ()
Def Notify (Self):
# Logit のみのログ、これ以上は不要です
pass
class EmailLogit(Logit):
'''
関数が呼び出されたときに管理者に電子メールを送信するための Logit 実装
。
''''
def __init__(self, log_file, email='admin@myproject.com') : A Self.email = Email
Super (emailogit, self) .__ init __ (log_file)
# self.email にメールを送信
# With Open (Self.log_file, 'a' ) as f:
f.write("Do Something...")
f.write(os.linesep)
f.write(" (os.linesep)
@Logit("log1.txt")
pass
@EmailLogit("log2.txt")
def myfunc4():
クラスをデコレータとして使用すると、コードがより簡潔に見えます。また、継承。
4. 変数の型
Python の変数の型には、
>>> foo
['hi', 'patty']
>>> foo[0]='こんにちは'
>>> ', 'パティ']
>>> fdict = {"名前":"パティ"}
>>> fdict.update({"年齢":"23"})
>> ;> fdict
{'年齢': '23', '名前': 'パティ'}
> fdict
{'age': '25', 'name': 'patty'}
このメソッドでは、受信パラメータが変数型でデフォルト値が割り当てられている場合、次の状況が発生することに注意してください。 >> def add_to(num, target=[]):
... target.append(num)
... return target
...
;
>>> add_to(2)
[1, 2]
>>> add_to(3)
[1, 2, 3]
これは、デフォルトのパラメーターが Cannot メソッドで定義されているためです。呼び出されるたびに再計算されるのではなく、呼び出されます。したがって、上記の状況を回避するために、メソッドが呼び出されるたびに新しい空のリストを使用して計算する場合は、次のように記述できます。
>>> :
... target が None の場合:
... target = []
... target.append(num)
... return target
...
>>> add_to(1)
; [1]
>>> add_to(2)
[2]
5. 浅いコピーと深いコピー
Pythonでは、オブジェクトの代入とコピー(深い/浅いコピー)には違いがあります。使用時に注意しないと、予期しない結果が発生する可能性があります。
1) Python のデフォルトのシャローコピーメソッド
>>> foo = ['hi']
>> bar = foo
4458211232
> >> id(バー)
4458211232
>>> bar.append("パティ")
>>> バー
>>> foo
['hi', 'patty']
注: id(foo)==id(bar)、foo と bar が同じオブジェクトを参照することを示します。bar 参照を通じてリストに対して追加操作が実行されると、ポインテッドは同じメモリ空間であるため、foo の出力は bar の出力と一致します。
2) ディープコピー
>>> foo
['hi', {'age': 20, 'name': 'patty'}]
>>> インポートコピー
>> > 遅い = copy.deepcopy(foo)
>>> 遅い
>>> ]='こんにちは'
>>>遅い
['こんにちは', {'年齢': 20, '名前': 'パティ'}]
>>> foo
['こんにちは', { 'age': 20, 'name': 'patty'}]
注: low は foo のディープ コピーであるため、実際にはメモリ内に新しいスペースを開き、foo オブジェクトによって参照されるコンテンツを新しいスペースにコピーします。したがって、slow オブジェクトによって参照されるコンテンツが更新された場合、その変更は、slow オブジェクトの参照にのみ反映され、foo オブジェクトによって参照されるコンテンツは変更されません。
6. コレクション
1) defaultdict
通常の辞書の場合、存在しないキーを取得すると、次のように KeyError がトリガーされます:
some_dict = {}
some_dict['colours']['favourite'] = " yellow"
# Raises KeyError: 'colours'
しかし、defaultdict を使用すると、次のようにこの状況を回避できます:
import collections
import json
tree = lambda: collections.defaultdict(tree)
some_dict =tree()
some_dict[ 'colours']['favorite'] = " yellow"
print json.dumps(some_dict)
# 正常に動作します。出力: {"colours": {"favorite": " yellow"}}
2) OrderedDict
OrderedDict辞書を定義したときのキーの順序で辞書を出力できますが、value の値を変更してもキーの順序は変更されません。ただし、キーを削除して再挿入すると、キーの順序が変更されます。辞書の終わり。
コレクションから import OrderedDict
colours = OrderedDict([("Red", 198), ("Green", 170), ("Blue", 160)])
キーの場合は、colors.items() の値:
print(key, value)
3) Counter
Counter を使用して、次のような特定のアイテムの出現数をカウントします。
コレクションからインポート Counter
colours = (
('Yasoob', 'Yellow'),
( 'アリ'、'ブルー')、
('アーハム'、'グリーン')、
('アリ'、'ブラック')、
('ヤソブ'、'レッド')、
('アーメッド'、'シルバー' ') ,
)
favs = Counter(名前には名前、色の色)
print(favs)
# Counter({'Yasoob': 2, 'Ali': 2, 'Arham': 1, 'Ahmed' : 1 })
4) deque
deque は両端キューであり、次のように先頭と末尾でそれぞれ挿入および削除できます。
from collections import deque
queue_d = deque()
queue_d.append( 1)
queue_d.append (2)
print queue_d # deque([1, 2])
queue_d.appendleft(3)
print queue_d # deque([3, 1, 2])
queue_d.pop()
print queue_d # deque([ 3, 1])
queue_d.popleft()
print queue_d # deque([1])
deque は、要素の数が最大長を超える場合、キューの最大長を設定できます。現在の挿入方向とは逆方向から対応する要素が削除されます。要素数は次のとおりです。
queue_c = deque(maxlen=5, iterable=[2, 4, 6])
queue_c.extend([7, 8])
print queue_c # deque([2, 4, 6, 7 , 8], maxlen=5)
queue_c.extend([10, 12])
print(queue_c) # deque([6, 7, 8] , 10, 12], maxlen=5)
queue_c.extendleft([18 ])
print(queue_c) # deque([18, 6, 7, 8, 10], maxlen=5)
5) nametuple
tupleは不変リストであり、タプル内の要素は再割り当てできません。タプル内の要素にはインデックスを介してのみアクセスできます。名前タプルは不変の辞書とみなすことができ、タプル内の要素には名前を介してアクセスできます。例:
from collections importnamedtuple
Animal =namedtuple('Animal', 'name age type')
perry = Animal(name="perry", age=31, type="cat")
print(perry )
# 出力: Animal(name='perry', age=31, type='cat')
print(perry.name)
# 出力: 'perry'
print(perry[0])
# 出力: 'perry'
print(perry._asdict())
# 出力: OrderedDict([('name', 'perry'), ('age', 31), ('type', 'cat')])
7. オブジェクトのイントロスペクション
1) dir: オブジェクトのすべてのメソッドをリストします
2) type: オブジェクトのタイプを返します
3) id: オブジェクトの ID を返します
1) list
> ;>> ; 2 乗 = [範囲 (10) の x の x**2]
>>> 2 乗
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2) dict
{v: k for k, v in some_dict.items()}
3) set
>>> squared = {x**2 for x in range(10)}
>> ;> 2 乗
set([0, 1, 4, 81, 64, 9, 16, 49, 25, 36])
try:
print(' ')
例外 Exception:
print('例外')
else:
# try で例外が発生しない場合にのみ実行されるべきコード,
# ただし例外をキャッチしてはいけないコード
print('This would be例外が発生しない場合にのみ実行され、ここでのエラー '
' は捕捉されません。')
finally:
print('これはあらゆる場合に出力されます。')
# これは、例外が発生しない場合にのみ実行されます。
# これは、あらゆる場合に出力されます。
else のステートメントは、finally の前に実行されます。
a_list = [[1, 2], [3, 4], [5, 6]]
print(list(itertools.chain.from_iterable(a_list)))
# 出力: [ 1, 2, 3, 4, 5, 6]
print(list(itertools.chain(*a_list)))
# 出力: [1, 2, 3, 4, 5, 6]
class A(object):
def __init__(self, a, b, c, d, e, f):
self.__dict__.update({k: v for k, v in locals().items() if k != 'self'})
11. for-else ステートメント
for ステートメントを終了するには通常 2 つの方法があります。1 つは特定の条件が満たされたときにループから抜け出す方法で、もう 1 つはすべてを終了する方法です。条件ループ。 for-else の else ステートメントは、次のように、すべての条件が判断され、for ループが正常に終了した場合にのみ実行されます。 module は Python 2+ 環境の Python 3+ モジュールを参照します
2) 互換性のあるモジュールのインポート方法
try:
import urllib.request as urllib_request # Python 3 の場合
ImportError:
import urllib2 as urllib_request # Python 2 の場合
以上がPythonでコーディングする際の注意点をまとめます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは解釈された言語ですが、コンパイルプロセスも含まれています。 1)Pythonコードは最初にBytecodeにコンパイルされます。 2)ByteCodeは、Python Virtual Machineによって解釈および実行されます。 3)このハイブリッドメカニズムにより、Pythonは柔軟で効率的になりますが、完全にコンパイルされた言語ほど高速ではありません。

useaforloopwhenteratingoverasequenceor foraspificnumberoftimes; useawhileloopwhentinuninguntinuntilaConditionismet.forloopsareidealforknownownownownownownoptinuptinuptinuptinuptinutionsituations whileoopsuitsituations withinterminedationations。

pythonloopscanleadtoErrorslikeinfiniteloops、ModifiningListsDuringiteration、Off-Oneerrors、Zero-dexingissues、およびNestededLoopinefficiencies.toavoidhese:1)use'i

forloopsareadvastountousforknowterations and sequences、offeringsimplicityandeadability;

pythonusesahybridmodelofcompilation andtertation:1)thepythoninterpretercompilessourcodeodeplatform-indopent bytecode.2)thepythonvirtualmachine(pvm)thenexecuteTesthisbytecode、balancingeaseoputhswithporformance。

pythonisbothintersedand compiled.1)it'scompiledtobytecode forportabalityacrossplatforms.2)bytecodeisthenは解釈され、開発を許可します。

loopsareideal whenyouwhenyouknumberofiterationsinadvance、foreleloopsarebetterforsituationsは、loopsaremoreedilaConditionismetを使用します

henthenumber ofiterationsisknown advanceの場合、dopendonacondition.1)forloopsareideal foriterating over for -for -for -saredaverseversives likelistorarrays.2)whileopsaresupasiable forsaresutable forscenarioswheretheloopcontinupcontinuspificcond


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター
