0

私は2つのファイルを持っています。

  1. funcattrib.py
  2. test_import.py

funcattrib.py

import sys

def sum(a,b=5):
    "Adds two numbers"
    a = int(a)
    b = int(b)
    return a+b

sum.version = "1.0"
sum.author = "Prasad"
k = sum(1,2)
print(k)

print("Function attributes: - ")
print("Documentation string:",sum.__doc__)
print("Function name:",sum.__name__)
print("Default values:",sum.__defaults__)
print("Code object for the function is:",sum.__code__)
print("Dictionary of the function is:",sum.__dict__)

#writing the same information to a file

f = open('test.txt','w')
f.write(sum.__doc__)
f.close()
print("\n\nthe file is successfully written with the documentation string")

test_import.py

import sys
from funcattrib import sum

input("press <enter> to continue")

a = input("Enter a:")
b = input("Enter b:")
f = open('test.txt','a')
matter_tuple = "Entered numbers are",a,b
print(matter_tuple)
print("Type of matter:",type(matter_tuple))
matter_list = list(matter_tuple)
print(list(matter_list))
finalmatter = " ".join(matter_list)
print(finalmatter)
f.write(finalmatter)
f.close()
print("\n\nwriting done successfully from test_import.py")

sumから関数をインポートしましfuncattrib.pyた。test_import.pyを実行しようとすると、全体の出力が表示されますfuncattrib.py。関数を使いたかっただけsumです。

アドバイスしてください、私が何をしているのか、または実際に実行せずにモジュールをインポートする別の方法はありますか?

4

2 に答える 2

4

モジュールの「トップレベル」のすべてのステートメントは、インポート時に実行されます。

それを望まない場合は、スクリプトとして使用されているモジュールとモジュールを区別する必要があります。そのために次のテストを使用します。

if __name__ == '__main__':
    # put code here to be run when this file is executed as a script

それをモジュールに適用します。

import sys

def sum(a,b=5):
    "Adds two numbers"
    a = int(a)
    b = int(b)
    return a+b

sum.version = "1.0"
sum.author = "Prasad"

if __name__ == '__main__':
    k = sum(1,2)
    print(k)

    print("Function attributes: - ")
    print("Documentation string:",sum.__doc__)
    print("Function name:",sum.__name__)
    print("Default values:",sum.__defaults__)
    print("Code object for the function is:",sum.__code__)
    print("Dictionary of the function is:",sum.__dict__)

    #writing the same information to a file

    f = open('test.txt','w')
    f.write(sum.__doc__)
    f.close()
    print("\n\nthe file is successfully written with the documentation string")
于 2013-03-19T19:43:35.637 に答える
2

Pythonは常に上から下に実行されます。関数定義は、他のものと同じように実行可能コードです。モジュールをインポートすると、そのモジュールの最上位にあるすべてのコードが実行されます。関数はコードの一部であるため、Pythonはすべてを実行する必要があります。

if __name__=="__main__"解決策は、インポート時にブロックの下で実行したくないコードを保護することです。

if __name__ == "__main__":
     print("Some info")
于 2013-03-19T19:43:46.740 に答える