AZ من حيل Python المفيدة

Python هي واحدة من أكثر لغات البرمجة شيوعًا في العالم. هذا لعدة أسباب:

  • من السهل التعلم
  • إنه متعدد الاستخدامات
  • لديها مجموعة كبيرة من الوحدات والمكتبات

أستخدم Python يوميًا كجزء لا يتجزأ من عملي كعالم بيانات. على طول الطريق ، التقطت بعض الحيل والنصائح المفيدة.

هنا ، قمت بمشاركة بعضها بتنسيق AZ.

معظم هذه "الحيل" هي أشياء استخدمتها أو عثرت عليها أثناء عملي اليومي. وجدت بعضها أثناء تصفح مستندات مكتبة Python القياسية. عثرت على عدد قليل آخر يبحث من خلال PyPi.

ومع ذلك ، الائتمان عند استحقاقه - اكتشفت أربعة أو خمسة منهم في awesome-python.com. هذه قائمة منسقة من مئات أدوات ووحدات بايثون المثيرة للاهتمام. الأمر يستحق التصفح للإلهام!

الكل أو أي شيء

أحد الأسباب العديدة التي تجعل بايثون لغة مشهورة هو أنها مقروءة ومعبرة.

غالبًا ما يقال إن بايثون هي "شفرة زائفة قابلة للتنفيذ". ولكن عندما يمكنك كتابة رمز مثل هذا ، فمن الصعب الجدال بخلاف ذلك:

x = [True, True, False] if any(x): print("At least one True") if all(x): print("Not one False") if any(x) and not all(x): print("At least one True and one False")

bashplotlib

تريد رسم الرسوم البيانية في وحدة التحكم؟

$ pip install bashplotlib

يمكنك الحصول على الرسوم البيانية في وحدة التحكم.

المجموعات

تحتوي Python على بعض أنواع البيانات الافتراضية الرائعة ، لكنها في بعض الأحيان لن تتصرف بالطريقة التي تريدها بالضبط.

لحسن الحظ ، تقدم مكتبة Python القياسية وحدة المجموعات. توفر لك هذه الوظيفة الإضافية المفيدة أنواعًا إضافية من البيانات.

from collections import OrderedDict, Counter # Remembers the order the keys are added! x = OrderedDict(a=1, b=2, c=3) # Counts the frequency of each character y = Counter("Hello World!") 

دير

هل تساءلت يومًا كيف يمكنك النظر داخل كائن Python ومعرفة سماته؟ بالطبع لديك.

من سطر الأوامر:

>>> dir() >>> dir("Hello World") >>> dir(dir)

يمكن أن تكون هذه ميزة مفيدة حقًا عند تشغيل Python بشكل تفاعلي ، ولاستكشاف الكائنات والوحدات النمطية التي تعمل معها بشكل ديناميكي.

اقرأ المزيد هنا.

الرموز التعبيرية

نعم حقا.

$ pip install emoji

لا تدعي أنك لن تجربها ...

from emoji import emojize print(emojize(":thumbs_up:"))

؟

من استيراد __future__

إحدى نتائج شعبية بايثون هي أن هناك دائمًا إصدارات جديدة قيد التطوير. الإصدارات الجديدة تعني ميزات جديدة - ما لم يكن إصدارك قديمًا.

لكن لا تخف. تتيح لك وحدة __future__ استيراد الوظائف من الإصدارات المستقبلية من Python. إنه حرفيا مثل السفر عبر الزمن ، أو السحر ، أو شيء من هذا القبيل.

from __future__ import print_function print("Hello World!")

لماذا لا تذهب لاستيراد الأقواس المتعرجة؟

جيوبى

يمكن أن تكون الجغرافيا تضاريس صعبة للمبرمجين للتنقل (ها ، لعبة الكلمات!). لكن الوحدة الجيوفيزيائية تجعلها سهلة بشكل مزعج.

$ pip install geopy

إنه يعمل عن طريق استخراج واجهات برمجة التطبيقات لمجموعة من خدمات الترميز الجغرافي المختلفة. يمكّنك من الحصول على عنوان الشارع الكامل للمكان وخط العرض وخط الطول وحتى الارتفاع.

هناك أيضًا فصل دراسي مفيد عن المسافة. يحسب المسافة بين موقعين في وحدة القياس المفضلة لديك.

from geopy import GoogleV3 place = "221b Baker Street, London" location = GoogleV3().geocode(place) print(location.address) print(location.location)

كيف أفعل

عالق في مشكلة ترميز ولا يمكنك تذكر هذا الحل الذي رأيته من قبل؟ هل تحتاج إلى التحقق من StackOverflow ، ولكن لا تريد مغادرة الجهاز؟

فأنت بحاجة إلى أداة سطر الأوامر المفيدة هذه.

$ pip install howdoi

اطرح عليه أي سؤال لديك ، وسيبذل قصارى جهده لتقديم إجابة.

$ howdoi vertical align css $ howdoi for loop in java $ howdoi undo commits in git

كن على علم رغم ذلك - فهو يلغي الرمز من أفضل الإجابات من StackOverflow. قد لا يقدم دائمًا المعلومات الأكثر فائدة ...

$ howdoi exit vim

فحص

تعتبر وحدة فحص Python رائعة لفهم ما يحدث خلف الكواليس. يمكنك حتى استدعاء طرقها على نفسها!

يستخدم نموذج التعليمات البرمجية أدناه inspect.getsource()لطباعة التعليمات البرمجية المصدر الخاصة به. يستخدم أيضًا inspect.getmodule()لطباعة الوحدة النمطية التي تم تعريفها فيها.

يطبع السطر الأخير من الكود رقم السطر الخاص به.

import inspect print(inspect.getsource(inspect.getsource)) print(inspect.getmodule(inspect.getmodule)) print(inspect.currentframe().f_lineno)

Of course, beyond these trivial uses, the inspect module can prove useful for understanding what your code is doing. You could also use it for writing self-documenting code.

Jedi

The Jedi library is an autocompletion and code analysis library. It makes writing code quicker and more productive.

Unless you’re developing your own IDE, you’ll probably be most interested in using Jedi as an editor plugin. Luckily, there are already loads available!

You may already be using Jedi, however. The IPython project makes use of Jedi for its code autocompletion functionality.

**kwargs

When learning any language, there are many milestones along the way. With Python, understanding the mysterious **kwargs syntax probably counts as one.

The double-asterisk in front of a dictionary object lets you pass the contents of that dictionary as named arguments to a function.

The dictionary’s keys are the argument names, and the values are the values passed to the function. You don’t even need to call it kwargs!

dictionary = {"a": 1, "b": 2} def someFunction(a, b): print(a + b) return # these do the same thing: someFunction(**dictionary) someFunction(a=1, b=2)

This is useful when you want to write functions that can handle named arguments not defined in advance.

List comprehensions

One of my favourite things about programming in Python are its list comprehensions.

These expressions make it easy to write very clean code that reads almost like natural language.

You can read more about how to use them here.

numbers = [1,2,3,4,5,6,7] evens = [x for x in numbers if x % 2 is 0] odds = [y for y in numbers if y not in evens] cities = ['London', 'Dublin', 'Oslo'] def visit(city): print("Welcome to "+city) for city in cities: visit(city)

map

Python supports functional programming through a number of inbuilt features. One of the most useful is the map() function — especially in combination with lambda functions.

x = [1, 2, 3] y = map(lambda x : x + 1 , x) # prints out [2,3,4]print(list(y))

In the example above, map() applies a simple lambda function to each element in x. It returns a map object, which can be converted to some iterable object such as a list or tuple.

newspaper3k

If you haven’t seen it already, then be prepared to have your mind blown by Python’s newspaper module.

It lets you retrieve news articles and associated meta-data from a range of leading international publications. You can retrieve images, text and author names.

It even has some inbuilt NLP functionality.

So if you were thinking of using BeautifulSoup or some other DIY webscraping library for your next project, save yourself the time and effort and $ pip install newspaper3k instead.

Operator overloading

Python provides support for operator overloading, which is one of those terms that make you sound like a legit computer scientist.

It’s actually a simple concept. Ever wondered why Python lets you use the + operator to add numbers and also to concatenate strings? That’s operator overloading in action.

You can define objects which use Python’s standard operator symbols in their own specific way. This lets you use them in contexts relevant to the objects you’re working with.

class Thing: def __init__(self, value): self.__value = value def __gt__(self, other): return self.__value > other.__value def __lt__(self, other): return self.__value  nothing # False something < nothing # Error something + nothing

pprint

Python’s default print function does its job. But try printing out any large, nested object, and the result is rather ugly.

Here’s where the Standard Library’s pretty-print module steps in. This prints out complex structured objects in an easy-to-read format.

A must-have for any Python developer who works with non-trivial data structures.

import requests import pprint url = '//randomuser.me/api/?results=1' users = requests.get(url).json() pprint.pprint(users)

Queue

Python supports multithreading, and this is facilitated by the Standard Library’s Queue module.

This module lets you implement queue data structures. These are data structures that let you add and retrieve entries according to a specific rule.

‘First in, first out’ (or FIFO) queues let you retrieve objects in the order they were added. ‘Last in, first out’ (LIFO) queues let you access the most recently added objects first.

Finally, priority queues let you retrieve objects according to the order in which they are sorted.

Here’s an example of how to use queues for multithreaded programming in Python.

__repr__

When defining a class or an object in Python, it is useful to provide an ‘official’ way of representing that object as a string. For example:

>>> file = open('file.txt', 'r') >>> print(file) 

This makes debugging code a lot easier. Add it to your class definitions as below:

class someClass: def __repr__(self): return "" someInstance = someClass() # prints  print(someInstance)

sh

Python makes a great scripting language. Sometimes using the standard os and subprocess libraries can be a bit of a headache.

The sh library provides a neat alternative.

It lets you call any program as if it were an ordinary function — useful for automating workflows and tasks, all from within Python.

import sh sh.pwd() sh.mkdir('new_folder') sh.touch('new_file.txt') sh.whoami() sh.echo('This is great!')

Type hints

Python is a dynamically-typed language. You don’t need to specify datatypes when you define variables, functions, classes etc.

This allows for rapid development times. However, there are few things more annoying than a runtime error caused by a simple typing issue.

Since Python 3.5, you have the option to provide type hints when defining functions.

def addTwo(x : Int) -> Int: return x + 2

You can also define type aliases:

from typing import List
Vector = List[float]Matrix = List[Vector]
def addMatrix(a : Matrix, b : Matrix) -> Matrix: result = [] for i,row in enumerate(a): result_row =[] for j, col in enumerate(row): result_row += [a[i][j] + b[i][j]] result += [result_row] return result x = [[1.0, 0.0], [0.0, 1.0]] y = [[2.0, 1.0], [0.0, -2.0]] z = addMatrix(x, y)

Although not compulsory, type annotations can make your code easier to understand.

They also allow you to use type checking tools to catch those stray TypeErrors before runtime. Probably worthwhile if you are working on large, complex projects!

uuid

A quick and easy way to generate Universally Unique IDs (or ‘UUIDs’) is through the Python Standard Library’s uuid module.

import uuid user_id = uuid.uuid4() print(user_id)

This creates a randomized 128-bit number that will almost certainly be unique.

In fact, there are over 2¹²² possible UUIDs that can be generated. That’s over five undecillion (or 5,000,000,000,000,000,000,000,000,000,000,000,000).

The probability of finding duplicates in a given set is extremely low. Even with a trillion UUIDs, the probability of a duplicate existing is much, much less than one-in-a-billion.

Pretty good for two lines of code.

Virtual environments

This is probably my favorite Python thing of all.

Chances are you are working on multiple Python projects at any one time. Unfortunately, sometimes two projects will rely on different versions of the same dependency. Which do you install on your system?

Luckily, Python’s support for virtual environments lets you have the best of both worlds. From the command line:

python -m venv my-project source my-project/bin/activate pip install all-the-modules 

Now you can have standalone versions and installations of Python running on the same machine. Sorted!

wikipedia

Wikipedia has a great API that allows users programmatic access to an unrivalled body of completely free knowledge and information.

The wikipedia module makes accessing this API almost embarrassingly convenient.

import wikipedia result = wikipedia.page('freeCodeCamp') print(result.summary) for link in result.links: print(link)

Like the real site, the module provides support for multiple languages, page disambiguation, random page retrieval, and even has a donate() method.

xkcd

Humour is a key feature of the Python language — after all, it is named after the British comedy sketch show Monty Python’s Flying Circus. Much of Python’s official documentation references the show’s most famous sketches.

The sense of humour isn’t restricted to the docs, though. Have a go running the line below:

import antigravity

Never change, Python. Never change.

YAML

YAML stands for ‘YAML Ain’t Markup Language’. It is a data formatting language, and is a superset of JSON.

Unlike JSON, it can store more complex objects and refer to its own elements. You can also write comments, making it particularly suited to writing configuration files.

The PyYAML module lets you use YAML with Python. Install with:

$ pip install pyyaml

And then import into your projects:

import yaml

PyYAML lets you store Python objects of any datatype, and instances of any user-defined classes also.

zip

حيلة أخيرة بالنسبة لك ، وهي حقاً رائعة. هل احتجت إلى تكوين قاموس من قائمتين؟

keys = ['a', 'b', 'c'] vals = [1, 2, 3] zipped = dict(zip(keys, vals))

و zip()يأخذ وظيفة يحمل في ثناياه عوامل عددا من الأشياء iterable والعوائد قائمة الصفوف. تقوم كل مجموعة بتجميع عناصر الكائنات المدخلة من خلال فهرسها الموضعي.

يمكنك أيضًا "فك ضغط" الكائنات عن طريق الاتصال *zip()بها.

شكرا للقراءة!

إذن فهناك حيل من الألف إلى الياء من Python - نأمل أن تكون قد وجدت شيئًا مفيدًا لمشروعك التالي.

لغة Python متنوعة للغاية ومتطورة ، لذا لا بد أن يكون هناك العديد من الميزات التي لم أتمكن من تضمينها.

يرجى مشاركة أي من حيل Python المفضلة لديك من خلال ترك الرد أدناه!