1

1.インタラクティブで、シンボリック変数も取れるモジュールで関数を定義したいと思います。

関数が


(ソース: texify.com )
.

次に、次のように機能させたい

>>> function()
number: 3
6
>>> function()
number: x
2*x
>>> function()
number: a
2*a

ユーザー入力を促す理由は、多くの引数を持つ関数を考えているからです。また、「f(x)+g(y)=h(z)」のような方程式での使用も考えているので、固定ではなく変数を代入できると便利です。


2.これが私が試したもので、うまくいきませんでした。その理由はケンダルの答えで説明されています。

初めてモジュールを作りました。

2 回 .py :

def twice():
    num = input('number: ')
    return 2*num

それから私はそれを実行しました、

>>> import sympy as s
>>> x = s.var('x')
>>>
>>> import twice as t
>>> t.twice()
number: x
NameError: name 'x' is not defined
4

2 に答える 2

2

モジュールにインポートすると、twice()はモジュールのグローバル名前空間で実行され、インタラクティブ セッションのグローバル変数 ( x. 結局のところ、それがモジュールの要点です。

これは通常、グローバル変数を操作するのではなく、変数を関数に渡すことで修正されます。

とは何の関係もありませんsympy。通常の古いPython番号などを使用している場合、同じ問題が発生します。

于 2011-10-28T04:35:13.803 に答える
1

あなたはおそらくこのように働くべきです:

私がお勧めするもの:

これは希望どおりに機能するわけではありませんが、物事をシンプルかつ抽象的に保ちます。numが単純な変数、int、float、listのいずれであるかは関係ありません...数値オブジェクトの場合、2回*2が適用されます。libで2回安全に使用できます。

two.py

def twice(num):
    return 2*num

コンソール

>>> import sympy as s
>>> x = s.var('x')
>>>
>>> import twice as t
>>> t.twice(x)

ユーザー入力のあるバージョンの場合:

これが実用的な解決策です。関数にioと機能を混在させているため、使用しないでください。どちらが悪いです。

two.py

import sympy as s

def fetch_input():
    userInput = raw_input('number: ')
    try:
        return int(userInput)
    except ValueError:
        return s.var(userInput)

def twice():
    num = fetch_input()
    return 2*num

raw_inputは通常、ユーザー入力を求めるときに最適です。式を評価しようとする代わりに、文字列を返します。

于 2011-10-28T08:08:37.350 に答える