Python の実践スキルを 30 個まとめます
この記事では、python に関する関連知識を提供します。主に、オブジェクトのチェック、複数行の文字列の使用、関数のフォロー、複数の値の返しなど、プログラミング プロセスでの一般的な使用テクニックをまとめています。関連コンテンツですので、皆様のお役に立てれば幸いです。
推奨学習: python チュートリアル
ヒント 1 2 つの数値をその場で交換する
Python は、直感的な代入と交換を 1 行で実行する方法。以下の例を参照してください。
x, y = 10, 20print(x, y) x, y = y, xprint(x, y) #1 (10, 20)#2 (20, 10)
右側の代入により、新しいタプルがシードされます。そして、左側のものは、その (引用符で囲まれていない) タプルをすぐに解凍して、名前 <a>
と <b>
を作成します。
割り当てが完了すると、新しいタプルは参照解除され、ガベージ コレクションの対象としてマークされます。変数の交換も最後に行われます。
ヒント 2 比較演算子の連鎖。
比較演算子の集計は、場合によっては役立つもう 1 つのテクニックです。
n = 10 result = 1 < n < 20 print(result) # True result = 1 > n <= 9 print(result) # False
ヒント 3 条件付き代入には三項演算子を使用します。
三項演算子は、if-else ステートメントのショートカットであり、条件演算子とも呼ばれます。
[on_true] if [expression] else [on_false]
コードをコンパクトかつ簡潔にするために使用できる例をいくつか示します。
次のステートメントは、「y が 9 の場合は 10 を x に代入し、それ以外の場合は 20 を x に代入します」と同じ意味を持ちます。必要に応じて、演算子の連鎖を拡張できます。
x = 10 if (y == 9) else 20
同様に、クラス オブジェクトでも同じことができます。
x = (classA if y == 1 else classB)(param1, param2)
上の例では、classA と classB は 2 つのクラスで、そのうちの 1 つのクラス コンストラクターが呼び出されます。
以下は「いいえ」の例です。最小の数値を評価する条件を追加します。
def small(a, b, c): return a if a <= b and a <= c else (b if b <= a and b <= c else c) print(small(1, 0, 1))print(small(1, 2, 2))print(small(2, 2, 3))print(small(5, 4, 3))#Output#0 #1 #2 #3
リスト内包表記で三項演算子を使用することもできます。
[m**2 if m > 10 else m**4 for m in range(50)]#=> [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401]
ヒント 4 複数行の文字列の使用
基本的な方法は、C 言語から派生したバックスラッシュを使用することです。
multiStr = "select * from multi_row \ where row_id < 5"print(multiStr)# select * from multi_row where row_id < 5
もう 1 つのヒントは、三重引用符を使用することです。
multiStr = """select * from multi_row where row_id < 5"""print(multiStr)#select * from multi_row #where row_id < 5
上記の方法でよくある問題は、適切なインデントが欠如していることです。インデントしようとすると、文字列にスペースが挿入されます。
したがって、最終的な解決策は、文字列を複数の行に分割し、文字列全体を括弧で囲むことです。
multiStr= ("select * from multi_row ""where row_id < 5 ""order by age") print(multiStr)#select * from multi_row where row_id < 5 order by age
ヒント 5 リストの要素を新しい変数に保存する
リストを使用して no を初期化できます。変数。リストを展開するときは、変数の数がこの数を超えてはなりません。リスト内の要素。
testList = [1,2,3]x, y, z = testListprint(x, y, z)#-> 1 2 3
ヒント 6 インポートされたモジュールのファイル パスを出力する
コード内でインポートされたモジュールの絶対位置を知りたい場合は、次のヒントを使用してください。
import threading import socketprint(threading)print(socket)#1- <module 'threading' from '/usr/lib/python2.7/threading.py'>#2- <module 'socket' from '/usr/lib/python2.7/socket.py'>
ヒント 7 対話型の「_」演算子を使用する
これは、多くの人が知らない便利な機能です。
Python コンソールでは、式をテストしたり関数を呼び出したりするたびに、結果が一時的な名前 _ (アンダースコア) に送信されます。
>>> 2 + 13>>> _3>>> print _3
「_」は、最後に実行された式の出力を指します。
ヒント 8 辞書/集合内包表記
リスト内包表記を使用するのと同じように、辞書/集合内包表記も使用できます。これらは使いやすく、同様に効果的です。ここに一例を示します。
testDict = {i: i * i for i in xrange(10)} testSet = {i * 2 for i in xrange(10)}print(testSet)print(testDict) #set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) #{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
注 - 2 つのステートメントの唯一の違いは <:> です。また、上記のコードを Python3 で実行するには、 を に置き換えます。
ヒント 9 スクリプトのデバッグ
モジュールを使用して、Python スクリプトにブレークポイントを設定できます。以下の例に従ってください。
import pdb pdb.set_trace()
スクリプト内の任意の場所に
ヒント 10 ファイル共有の設定
Python では HTTP サーバーを実行でき、これを使用してサーバー ルートからファイルを共有できます。以下はサーバーを起動するコマンドです。
Python 2
python -m SimpleHTTPServer
Python 3
python3 -m http.server
上記のコマンドは、デフォルトのポート 8000 でサーバーを起動します。カスタム ポートを上記のコマンドの最後のパラメータとして渡すことで、カスタム ポートを使用することもできます。
ヒント 11 Python でのオブジェクトのチェック
dir() メソッドを呼び出すことで、Python でオブジェクトをチェックできます。これは簡単な例です。
test = [1, 3, 5, 7]print( dir(test) )
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
ヒント 12 if ステートメントを簡素化する
複数の値を検証するには、次の方法で実行できます。
if m in [1,3,5,7]:
代わりに:
if m==1 or m==3 or m==5 or m==7:
また、「[1,3,5,7]」の代わりに「{1,3,5,7}」を「in」として使用することもできます。 ' set は O(1) の各要素にアクセスできるため、' 演算記号です。
ヒント 13 実行時の Python バージョンの検出
現在実行中の Python エンジンがサポートされているバージョンよりも古い場合、プログラムを実行したくない場合があります。これを行うには、次のコード スニペットを使用できます。また、現在使用されている Python のバージョンを人間が読める形式で出力します。
import sys#Detect the Python version currently in use.if not hasattr(sys, "hexversion") or sys.hexversion != 50660080: print("Sorry, you aren't running on Python 3.5\n") print("Please upgrade to 3.5.\n") sys.exit(1) #Print Python version in a readable format.print("Current Python version: ", sys.version)
あるいは、上記のコードの sys.hexversion!= 50660080 を sys.version_info >= (3, 5) に置き換えることもできます。これは知識豊富な読者からのアドバイスです。
Python 2.7 で実行する場合の出力。
Python 2.7.10 (default, Jul 14 2015, 19:46:27)[GCC 4.8.2] on linux Sorry, you aren't running on Python 3.5Please upgrade to 3.5.
在 Python 3.5 上运行时的输出。
Python 3.5.1 (default, Dec 2015, 13:05:11)[GCC 4.8.2] on linux Current Python version: 3.5.2 (default, Aug 22 2016, 21:11:05) [GCC 5.3.0]
技巧14 组合多个字符串
如果您想连接列表中所有可用的标记,请参见以下示例。
>>> test = ['I', 'Like', 'Python', 'automation']
现在,让我们从上面给出的列表中的元素创建一个字符串。
>>> print ''.join(test)
技巧15 反转 string/list 的四种方法
反转列表本身
testList = [1, 3, 5]testList.reverse()print(testList)#-> [5, 3, 1]
在循环中迭代时反转
for element in reversed([1,3,5]): print(element)#1-> 5#2-> 3#3-> 1
反转一个字符串
"Test Python"[::-1]
这使输出为“nohtyP tseT”
使用切片反转列表
[1, 3, 5][::-1]
上面的命令将输出 [5, 3, 1]。
技巧16 玩枚举
使用枚举器,在循环中很容易找到索引。
testlist = [10, 20, 30]for i, value in enumerate(testlist): print(i, ': ', value)#1-> 0 : 10#2-> 1 : 20#3-> 2 : 30
技巧17 在 Python 中使用枚举。
我们可以使用以下方法来创建枚举定义。
class Shapes: Circle, Square, Triangle, Quadrangle = range(4)print(Shapes.Circle)print(Shapes.Square)print(Shapes.Triangle)print(Shapes.Quadrangle)#1-> 0#2-> 1#3-> 2#4-> 3
技巧18 从函数返回多个值。
支持此功能的编程语言并不多。但是,Python 中的函数确实会返回多个值。
请参考以下示例以查看它的工作情况。
# function returning multiple values.def x(): return 1, 2, 3, 4# Calling the above function.a, b, c, d = x()print(a, b, c, d)
#-> 1 2 3 4
技巧19 使用 splat 运算符解包函数参数。
splat 运算符提供了一种解压参数列表的艺术方式。为清楚起见,请参阅以下示例。
def test(x, y, z): print(x, y, z)testDict = {'x': 1, 'y': 2, 'z': 3} testList = [10, 20, 30]test(*testDict)test(**testDict)test(*testList)#1-> x y z#2-> 1 2 3#3-> 10 20 30
技巧20 使用字典来存储 switch。
我们可以制作一个字典存储表达式。
stdcalc = { 'sum': lambda x, y: x + y, 'subtract': lambda x, y: x - y}print(stdcalc['sum'](9,3))print(stdcalc['subtract'](9,3))#1-> 12#2-> 6
技巧21 计算一行中任意数字的阶乘。
Python 2.x.
result = (lambda k: reduce(int.__mul__, range(1,k+1),1))(3)print(result)#-> 6
Python 3.x.
import functools result = (lambda k: functools.reduce(int.__mul__, range(1,k+1),1))(3)print(result)
#-> 6
技巧22 查找列表中出现频率最高的值。
test = [1,2,3,4,2,2,3,1,4,4,4]print(max(set(test), key=test.count))#-> 4
技巧23 重置递归限制。
Python 将递归限制限制为 1000。我们可以重置它的值。
import sys x=1001print(sys.getrecursionlimit())sys.setrecursionlimit(x)print(sys.getrecursionlimit())#1-> 1000#2-> 1001
请仅在需要时应用上述技巧。
技巧24 检查对象的内存使用情况。
在 Python 2.7 中,32 位整数消耗 24 字节,而在 Python 3.5 中使用 28 字节。为了验证内存使用情况,我们可以调用 方法。
Python 2.7.
import sys x=1print(sys.getsizeof(x))#-> 24
Python 3.5.
import sys x=1print(sys.getsizeof(x))#-> 28
技巧25 使用 __slots__ 减少内存开销。
你有没有观察到你的 Python 应用程序消耗了大量资源,尤其是内存?这是使用<__slots__>
类变量在一定程度上减少内存开销的一种技巧。
import sysclass FileSystem(object): def __init__(self, files, folders, devices): self.files = files self.folders = folders self.devices = devicesprint(sys.getsizeof( FileSystem ))class FileSystem1(object): __slots__ = ['files', 'folders', 'devices'] def __init__(self, files, folders, devices): self.files = files self.folders = folders self.devices = devicesprint(sys.getsizeof( FileSystem1 ))#In Python 3.5#1-> 1016#2-> 888
显然,您可以从结果中看到内存使用量有所节省。但是当一个类的内存开销不必要地大时,你应该使用 __slots__
。仅在分析应用程序后执行此操作。否则,您将使代码难以更改并且没有真正的好处。
技巧26 Lambda 模仿打印功能。
import sys lprint=lambda *args:sys.stdout.write(" ".join(map(str,args)))lprint("python", "tips",1000,1001)#-> python tips 1000 1001
技巧27 从两个相关序列创建字典。
t1 = (1, 2, 3)t2 = (10, 20, 30)print(dict (zip(t1,t2)))#-> {1: 10, 2: 20, 3: 30}
技巧28 在线搜索字符串中的多个前缀。
print("http://www.baidu.com".startswith(("http://", "https://")))print("https://juejin.cn".endswith((".com", ".cn")))#1-> True#2-> True
技巧29 形成一个统一的列表,不使用任何循环。
import itertools test = [[-1, -2], [30, 40], [25, 35]]print(list(itertools.chain.from_iterable(test)))#-> [-1, -2, 30, 40, 25, 35]
如果您有一个包含嵌套列表或元组作为元素的输入列表,请使用以下技巧。但是,这里的限制是它使用了 for 循环。
def unifylist(l_input, l_target): for it in l_input: if isinstance(it, list): unifylist(it, l_target) elif isinstance(it, tuple): unifylist(list(it), l_target) else: l_target.append(it) return l_target test = [[-1, -2], [1,2,3, [4,(5,[6,7])]], (30, 40), [25, 35]]print(unifylist(test,[]))#Output => [-1, -2, 1, 2, 3, 4, 5, 6, 7, 30, 40, 25, 35]
统一包含列表和元组的列表的另一种更简单的方法是使用 Python 的 < more_itertools > 包。它不需要循环。只需执行 < pip install more_itertools >,如果还没有的话。
import more_itertools test = [[-1, -2], [1, 2, 3, [4, (5, [6, 7])]], (30, 40), [25, 35]]print(list(more_itertools.collapse(test)))#Output=> [-1, -2, 1, 2, 3, 4, 5, 6, 7, 30, 40, 25, 35]
技巧30 在 Python 中实现真正的 switch-case 语句。
这是使用字典来模仿 switch-case 构造的代码。
def xswitch(x): return xswitch._system_dict.get(x, None) xswitch._system_dict = {'files': 10, 'folders': 5, 'devices': 2}print(xswitch('default'))print(xswitch('devices'))#1-> None#2-> 2
推荐学习:python学习教程
以上がPython の実践スキルを 30 個まとめますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

VSコードは、Microsoftが開発した無料のオープンソースクロスプラットフォームコードエディターと開発環境であるフルネームVisual Studioコードです。幅広いプログラミング言語をサポートし、構文の強調表示、コード自動完了、コードスニペット、および開発効率を向上させるスマートプロンプトを提供します。リッチな拡張エコシステムを通じて、ユーザーは、デバッガー、コードフォーマットツール、GIT統合など、特定のニーズや言語に拡張機能を追加できます。 VSコードには、コードのバグをすばやく見つけて解決するのに役立つ直感的なデバッガーも含まれています。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。
