打开另一个python文件作为模块时传递参数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开另一个python文件作为模块时传递参数?相关的知识,希望对你有一定的参考价值。

我正在用python重新制作游戏,菜单文件和游戏文件是分开的。菜单将游戏文件作为模块导入,并在请求时调用它。但是我想要确定声音和难度的变量从菜单文件传递到游戏文件,因为用户在菜单中选择了这些选项。

我根本不知道如何做到这一点,所以这里是我如何导入和调用python游戏文件:

import SpaceInvaders
SpaceInvaders.SpaceInvaders().mainLoop()

我想传递参数'sound'和'difficulty',其值是字符串。

我也调用主循环函数,但变量需要在SpaceInvaders类中可用,所以我可以将它们分配给self.sound和self.difficulty,它们不在主循环中使用。

答案

如果你想将sounddifficulty传递给mainLoopSpaceInvaders,那么就让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)

如果你想真正花哨的结帐:

以上是关于打开另一个python文件作为模块时传递参数?的主要内容,如果未能解决你的问题,请参考以下文章

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?

python实现一个文件传递参数并执行另一个文件

使用 Cython 时如何将一个 C++ 类(引用)传递给另一个?

C++:尝试将 fstream 作为参数传递时删除了函数?

python如何将可选参数或关键字参数从一个函数传递到另一个函数?

将组件作为“参数”传递给Angular 2中的另一个组件