После импорта модуля, когда вы можете использовать функцию без точечной нотации? - PullRequest
0 голосов
/ 01 октября 2019

возможно я пропускаю что-то действительно основное в Python, это сводит меня с ума. Но если я:

import math

, почему я должен делать math.sqrt (4), чтобы вернуть 2.0, а я не могу просто сделать sqrt (4)? Я помню, что видел в каком-то месте, что можно было просто вызывать функции из модуля без использования точечной нотации. Разве это не дано, что, если математический модуль вводит sqrt как функцию, я должен иметь возможность просто сделать sqrt (4) вместо math.sqrt (4)? [[Откуда я это увидел?]]

Это потому, что авторы математического модуля не сделали sqrt функцией (например, def sqrt), поэтому я не могу использовать ее в одиночку? Где я увидел, что можно было использовать функции в Python, не вызывая их как методы их объектов ... кроме print ()?

большое спасибо

1 Ответ

2 голосов
/ 01 октября 2019

Вы можете сделать так:

from math import sqrt    # recommended

sqrt(2)

Это делает функцию sqrt из модуля math доступной в текущем namespace

или

from math import *

sqrt(2)

Это делает все импортируемые (*) функции и классы из модуля math доступными в текущем namespace;это удобно, но создает риск загромождения пространства имен и создания коллизий.

Вы можете прочитать о пространствах имен , чтобы углубить ваше понимание.

(*)[из @gilch в комментариях] * не обязательно импортирует все. Обычно имена, начинающиеся с _, считаются «частными» и не импортируются с *. Или, если для модуля задано значение __all__, которое может изменить значение *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...