Pythonでコーディングする際の注意点をまとめます。
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。
