2013-06-06 3 views
1

Можно ли вызвать другой скрипт python для доступа только к определениям внутри скрипта и ничего другого?Python: вызов другого скрипта python

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

Сценарий я хочу импортировать это:

#!/usr/bin/env ipython 
# This program plots the Stumpff functions C(z) and S(z) 

import numpy as np 
import pylab 
from matplotlib.ticker import MaxNLocator 


def C(z): 
    if z > 0: 
     return (1 - np.cos(z ** 0.5))/z 
    elif z < 0: 
     return (np.cosh(np.sqrt(-z)) - 1)/-z 
    return 0.5 


def S(z): 
    if z > 0: 
     return (np.sqrt(z) - np.sin(z ** 0.5))/np.sqrt(z) ** 3 
    elif z < 0: 
     return (np.sinh(np.sqrt(-z)) - np.sqrt(-z))/np.sqrt(-z) ** 3 
    return 1.0/6.0 


vC = np.vectorize(C) 
vS = np.vectorize(S) 

z = np.linspace(-50.0, 500.0, 100000.0) 
y = vC(z) 
y2 = vS(z) 

fig = pylab.figure() 
ax = fig.add_subplot(111) 
ax.plot(z, y, 'r') 
ax.plot(z, y2, 'b') 
pylab.legend(('$C(z)$', '$S(z)$'), loc = 0) 
pylab.xlim((-50, 0)) 
pylab.ylim((0, 12)) 
pylab.xlabel('$z$') 
pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower')) 
pylab.savefig('stumpffneg50to0.eps', format = 'eps') 


fig2 = pylab.figure() 
ax2 = fig2.add_subplot(111) 
ax2.plot(z, y, 'r') 
ax2.plot(z, y2, 'b') 
pylab.legend(('$C(z)$', '$S(z)$'), loc = 1) 
pylab.xlim((0, 30)) 
pylab.ylim((0, 0.5)) 
pylab.xlabel('$z$') 
pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower')) 
pylab.savefig('stumpff0to30.eps', format = 'eps') 


fig3 = pylab.figure() 
ax3 = fig3.add_subplot(111) 
ax3.plot(z, y, 'r') 
ax3.plot(z, y2, 'b') 
pylab.legend(('$C(z)$', '$S(z)$'), loc = 0) 
pylab.xlim((0, 500)) 
pylab.ylim((0, 0.05)) 
pylab.xlabel('$z$') 
pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower')) 
pylab.savefig('stumpff0to500.eps', format = 'eps') 
pylab.show() 

От чтения python how do I call external python programs, я вижу, что у меня есть добавить

import stumpff 

После этого будет мой новый сценарий понять C(z) и S(z)?

ответ

2

Способ написания вашего сценария, нет возможности импортировать его и не иметь построенных графиков.

Чтобы сделать так, чтобы import stumpff работал, и ваш скрипт будет понимать C (z) и S (z), вам нужно будет сделать код построения, чтобы он запускался только в том случае, если вы работаете как скрипт , Один из способов сделать это, чтобы положить все это в основной функции(), а затем использовать

if __name__ == '__main__': 
    main() 

В качестве альтернативы, просто все это под этим условием, как это:

#!/usr/bin/env ipython 
# This program plots the Stumpff functions C(z) and S(z) 

import numpy as np 
import pylab 
from matplotlib.ticker import MaxNLocator 


def C(z): 
    if z > 0: 
     return (1 - np.cos(z ** 0.5))/z 
    elif z < 0: 
     return (np.cosh(np.sqrt(-z)) - 1)/-z 
    return 0.5 


def S(z): 
    if z > 0: 
     return (np.sqrt(z) - np.sin(z ** 0.5))/np.sqrt(z) ** 3 
    elif z < 0: 
     return (np.sinh(np.sqrt(-z)) - np.sqrt(-z))/np.sqrt(-z) ** 3 
    return 1.0/6.0 


if __name__ == '__main__': 
    vC = np.vectorize(C) 
    vS = np.vectorize(S) 

    z = np.linspace(-50.0, 500.0, 100000.0) 
    y = vC(z) 
    y2 = vS(z) 

    fig = pylab.figure() 
    ax = fig.add_subplot(111) 
    ax.plot(z, y, 'r') 
    ax.plot(z, y2, 'b') 
    pylab.legend(('$C(z)$', '$S(z)$'), loc = 0) 
    pylab.xlim((-50, 0)) 
    pylab.ylim((0, 12)) 
    pylab.xlabel('$z$') 
    pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower')) 
    pylab.savefig('stumpffneg50to0.eps', format = 'eps') 


    fig2 = pylab.figure() 
    ax2 = fig2.add_subplot(111) 
    ax2.plot(z, y, 'r') 
    ax2.plot(z, y2, 'b') 
    pylab.legend(('$C(z)$', '$S(z)$'), loc = 1) 
    pylab.xlim((0, 30)) 
    pylab.ylim((0, 0.5)) 
    pylab.xlabel('$z$') 
    pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower')) 
    pylab.savefig('stumpff0to30.eps', format = 'eps') 


    fig3 = pylab.figure() 
    ax3 = fig3.add_subplot(111) 
    ax3.plot(z, y, 'r') 
    ax3.plot(z, y2, 'b') 
    pylab.legend(('$C(z)$', '$S(z)$'), loc = 0) 
    pylab.xlim((0, 500)) 
    pylab.ylim((0, 0.05)) 
    pylab.xlabel('$z$') 
    pylab.gca().xaxis.set_major_locator(MaxNLocator(prune = 'lower')) 
    pylab.savefig('stumpff0to500.eps', format = 'eps') 
    pylab.show() 

Тогда , вы можете использовать import stumpff, и вы можете использовать stumpff.C(z) и stumpff.S(z). Если вы хотите использовать их без stumpff, используйте from stumpff import * или from stumpff import C, S

+0

Спасибо, я дам ему попробовать, а затем обработайте его как принятое, если оно будет работать. – dustin

+0

Отлично работает! – dustin

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