【问题标题】:Making my for loop executable使我的 for 循环可执行
【发布时间】:2011-06-14 01:45:54
【问题描述】:

我在 Python 中创建了这个工作循环:

a = 'word'

for i in range(len(a)):

 print a[i:] + a[:i], (a[i:] + a[:i])[::-1]

我需要让它从命令行执行,并且让它能够接受新的参数。

我对如何做到这一点有点模糊。我知道你需要使用

if __name__ == '__main__':

不知何故...而且我需要使用 sys.argv

如果有人能解释如何做到这一点,以及从命令行使任何脚本可执行的格式,我将不胜感激。

【问题讨论】:

  • 在没有 cmets 的情况下投反对票什么都教。
  • 我很确定之所以会有反对票,只是因为人们不理解 OP 的问题。它实际上不是关于可执行的 for 循环,而是更多如何添加命令行参数。

标签: python for-loop executable command-line-arguments


【解决方案1】:

你可以简单地写

import sys
a = sys.argv[1]
etc..

然后运行:

python yourcode.py argument

if __name__=='__main__':

不是必需的,但您也可以将整个代码放在其中。其目的是指定仅当您运行“python yourcode.py”之类的程序时才会执行的代码,并防止在另一个 .py 文件中编写“import yourcode”时执行该 if 语句下的代码。

【讨论】:

  • 我需要能够运行脚本而不必键入 import sys...所以我猜“import sys”需要成为我的代码的一部分。我认为这就是为什么如果 name == 'main': 是必需的...
  • 我不知道在不导入 sys.path 的情况下获取命令行参数的方法。但这本身与 name==main 没有任何关系
  • @SexyLlama:此答案中的第一个代码 sn-p 旨在放置在 Python 代码的开头。记住用你的 for 循环替换 etc.. 位。
【解决方案2】:

根据您希望 Python 脚本的灵活性,我会像这样构建脚本:

def get_args():
    # logic for parsing arguments here
    # return e.g. a dictionary

def your_method(arg1=None,arg2=...):
    # further logic

if __name__ == "__main__":
    args = get_args()
    your_method(**args)

有多种模块可以解析命令行参数。看看argparse(更简单)和optparse

如果您只需要一种简单的方式来访问命令行参数,您可以使用sys.argv

通过这种分离,您还可以将您的函数导入其他代码。

例子:

import sys

def get_args():
    word = sys.argv[1] if (len(sys.argv) > 1) else ''
    return {"word": word}

def your_method(word=''):
    for i in range(len(word)):
        print word[i:] + word[:i], (word[i:] + word[:i])[::-1]

if __name__ == "__main__":
    args = get_args()
    your_method(**args)

并运行它

python yourscript.py someword

另请参阅:

【讨论】:

    【解决方案3】:
    import sys
    if __name__ == '__main__':
        a = sys.argv[1] #sys.argv[0] is your file name, and [1] is the next argument
        for i in range(len(a)):
            print a[i:] + a[:i], (a[i:] + a[:i])[::-1]
    

    然后你只需切换到文件所在的目录,然后调用它:

    python file.py wordHere
    

    在命令行上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多