Python

From FreeCAD Documentation
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This page is a translated version of the page Python and the translation is 95% complete.
Outdated translations are marked like this.
(Январь 2020) FreeCAD изначально был разработан для работы с Python 2. Поскольку срок службы Python 2 истек в 2020 году, дальнейшая разработка FreeCAD будет осуществляться исключительно с использованием Python 3, и обратная совместимость поддерживаться не будет.

Описание

Python - это язык программирования высокого уровня, общего назначения, который очень часто используется в больших приложениях для автоматизации некоторых задач путем создания скриптов или макросов.

В FreeCAD код Python можно использовать для создания различных элементов программно, без необходимости нажимать на графический пользовательский интерфейс. Кроме того, многие инструменты и верстаки FreeCAD запрограммированы на Python.

Смотрите Введение в Python, чтобы узнать об основах языка программирования Python, затем Руководство по написанию сценариев на Python и Основы написания скриптов для FreeCAD, чтобы начать писать скрипты для FreeCAD.

Удобочитаемость

Читабельность кода Python является одним из наиболее важных аспектов этого языка. Использование четкого и последовательного стиля в сообществе Python облегчает вклад различных разработчиков, поскольку большинство опытных программистов на Python ожидают, что код будет отформатирован определенным образом и будет следовать определенным правилам. При написании кода на Python рекомендуется следовать PEP8: Руководство по стилю написания кода Python и PEP257: Соглашения о строках документов.

Эти документы представляют пояснения в более удобной для пользователя форме:

Соглашения

В этой документации следует соблюдать некоторые соглашения для примеров Python.

Это типичная сигнатура функции

Wire = make_wire(pointslist, closed=False, placement=None, face=None, support=None)
  • Аргументы с парами ключ-значение являются необязательными, значение по умолчанию указано в подписи. Это означает, что следующие вызовы эквивалентны:
Wire = make_wire(pointslist, False, None, None, None)
Wire = make_wire(pointslist, False, None, None)
Wire = make_wire(pointslist, False, None)
Wire = make_wire(pointslist, False)
Wire = make_wire(pointslist)
В этом примере первый аргумент не имеет значения по умолчанию, поэтому его всегда следует включать.
  • Если аргументы заданы с явным ключом, необязательные аргументы могут быть заданы в любом порядке. Это означает, что следующие вызовы эквивалентны:
Wire = make_wire(pointslist, closed=False, placement=None, face=None)
Wire = make_wire(pointslist, closed=False, face=None, placement=None)
Wire = make_wire(pointslist, placement=None, closed=False, face=None)
Wire = make_wire(pointslist, support=None, closed=False, placement=None, face=None)
  • В рекомендациях Python подчеркивается удобочитаемость кода; в частности, круглые скобки должны сразу следовать за именем функции, а пробел должен следовать за запятой.
p1 = Vector(0, 0, 0)
p2 = Vector(1, 1, 0)
p3 = Vector(2, 0, 0)
Wire = make_wire([p1, p2, p3], closed=True)
  • Если код необходимо разбить на несколько строк, это следует делать через запятую внутри скобок или круглых скобок; вторая строка должна быть выровнена с предыдущей.
a_list = [1, 2, 3,
          2, 4, 5]

Wire = make_wire(pointslist,
                False, None,
                None, None)
  • Функции могут возвращать объект, который может быть использован в качестве основы для другой функции рисования.
Wire = make_wire(pointslist, closed=True, face=True)
Window = make_window(Wire, name="Big window")

Применение "Import"

Функции Python хранятся в файлах, называемых модулями. Перед использованием любой функции вызываемой из модуля, модуль должен быть включен в код инструкцией import.

Это создает префиксы к функциям, то есть module.function(). Эта система предотвращает колизии имен между функциями, которые имеют одинаковые имена, но находятся в разных модулях. Например, две функции Arch.make_window() и MyModule.make_window() могут сосуществовать без проблем.

Полные примеры должны включать необходимый импорт и функции с префиксами.

import FreeCAD as App
import Draft

p1 = App.Vector(0, 0, 0)
p2 = App.Vector(1, 1, 0)
p3 = App.Vector(2, 0, 0)
Wire = Draft.make_wire([p1, p2, p3], closed=True)
import FreeCAD as App
import Draft
import Arch

p1 = App.Vector(0, 0, 0)
p2 = App.Vector(1, 0, 0)
p3 = App.Vector(1, 1, 0)
p4 = App.Vector(0, 2, 0)
pointslist = [p1, p2, p3, p4]

Wire = Draft.make_wire(pointslist, closed=True, face=True)
Structure = Arch.make_structure(Wire, name="Big pillar")