2017-01-15 3 views
3

Я хотел бы создать функцию, которая содержит все мои импорта заявление,:Python, функции импорта, содержащий

def imports(): 
    import pandas as pd 
    import numpy as np 
    etc... 

сохранить его в .py файла в качестве модуля и называют эту функцию из моего Jupyter Notebook. Это просто, чтобы разблокировать ноутбук. Однако кажется, что он не работает, чтобы создать функцию, содержащую инструкции импорта? (Я получаю ошибки NameError: name 'pd' is not defined). Кто-нибудь знает почему?

+0

'импорт панды как pd' создает переменную' pd'. В вашем случае переменная локальна для функции и не видна снаружи. – DyZ

+0

@DYZ Есть ли способ обойти это? Может быть, объявить 'as ...' глобальным? – Radar

ответ

4

Вместо этого поместите в свой модуль все операторы импорта, которые вы хотите и как вы обычно положить их

contents_of_your_module.py

import pandas as pd 
import numpy as np 
import itertools 
import seaborn as sns 

После этого вы импортируете Jupyter

from contents_of_your_module import * 

Или, вы можете создать пространство имен для модуля и сделать это

import contents_of_you_module as radar 

И тогда вы можете получить доступ ко всем модулям через вашего пространство имен

radar.pd.DataFrame 
+0

Отличные ответы и очень информативные, как обычно. Однако я считаю, что решение DYZ - это то, что мне нужно. Но thx! – Radar

+0

@ Радар рад, что я мог бы помочь. DYZ дал отличный ответ. – piRSquared

3

import pandas as pd создает переменную pd. В вашем случае переменная локальна для функции и не видна снаружи. Объявляет ярлыки импортируемых модулей как глобальные переменные:

def imports(): 
    global pd, np 
    import pandas as pd 
    import numpy as np 
+0

Есть ли какой-либо ничья для объявления переменных как глобальных? То есть с точки зрения выступлений и т. д.? В противном случае я думаю, что это то, чем я был. – Radar

+1

Вы будете иметь их как глобальные, так или иначе, только в силу 'import'ing' as'. – DyZ

+0

Собственно как-то это не работает – Radar

0

В общем, я бы скажите, что это очень плохая практика делать то, что вы хотите сделать. Если вы хотите сделать именно то, что вы описали, вы не можете сделать это в питоническом ключе.

Но это решение, которое, вероятно, будет работать:

Притворись у вас есть модуль под названием imports.py, который должен обрабатывать весь ваш импорт:

Файл: imports.py: import numpy as np import pandas as pd

У вас может быть функция в вашей программе.

def do_funky_import_from(): from imports import *

Смежные вопросы