打开另一个python文件作为模块时传递参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开另一个python文件作为模块时传递参数?相关的知识,希望对你有一定的参考价值。
我正在用python重新制作游戏,菜单文件和游戏文件是分开的。菜单将游戏文件作为模块导入,并在请求时调用它。但是我想要确定声音和难度的变量从菜单文件传递到游戏文件,因为用户在菜单中选择了这些选项。
我根本不知道如何做到这一点,所以这里是我如何导入和调用python游戏文件:
import SpaceInvaders
SpaceInvaders.SpaceInvaders().mainLoop()
我想传递参数'sound'和'difficulty',其值是字符串。
我也调用主循环函数,但变量需要在SpaceInvaders类中可用,所以我可以将它们分配给self.sound和self.difficulty,它们不在主循环中使用。
答案
如果你想将sound
和difficulty
传递给mainLoop
的SpaceInvaders
,那么就让mainLoop
将它们作为参数,然后你就可以发送它们了:
SpaceInvaders.SpaceInvaders().mainLoop(sound, difficulty)
要回答另外的问题“那就是问题,我不希望它们在主循环中,我希望它们在SpaceInvaders类中:(” - 执行此操作:
SpaceInvaders.SpaceInvaders(sound, difficulty).mainLoop()
另一答案
示例用法:
python somegame.py hello args --difficulty medium
如何使用sys.argv
创建一个例子:
echo 'import sys;print(sys.argv)' >> test.py
python test.py okay okay --diff med
输出:
['1.py', 'okay', 'okay', '--diff', 'med']
使用sys.argv
的非常基本的例子:
import sys
import SpaceInvaders
print(sys.argv)
# step through using pdb
# see: https://docs.python.org/3/library/pdb.html
import pdb;pdb.set_trace() #print(dir(), dir(SpaceInvaders))
# 'n' enter, 'n' enter
# set self.stuff
# create the class
invade = SpaceInvaders.SpaceInvaders(sys.argv)
# pass argv to mainLoop
invade.mainLoop(sys.argv)
在SpaceInvaders.py
:
class SpaceInvaders(object):
def __init__(self, args):
print(args)
self.difficulty = # some var from args
import pdb;pdb.set_trace()
def mainLoop(self, args):
print(args)
如果你想真正花哨的结帐:
- https://github.com/pallets/click
- https://github.com/google/python-fire
- 当然还有
argparse
的结帐示例
以上是关于打开另一个python文件作为模块时传递参数?的主要内容,如果未能解决你的问题,请参考以下文章
从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?
使用 Cython 时如何将一个 C++ 类(引用)传递给另一个?