我想从命令行试验代码,因此请argv
形成sys
。
from sys import argv
def binary_search(array, item):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2 # round down if not an even
guess = array[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
def main():
script, array, item = argv
binary_search(array, item)
在命令行上运行时:
$ python3 binary_search.py [1, 2, 3] 8
Traceback (most recent call last): File "binary_search.py", line 94, in <module>
main() File "binary_search.py", line 89, in main
script, array, item = argvValueError: too many values to unpack (expected 3)
我测试过并发现从命令行传递的参数被argv视为str。
如何将数组作为参数传递?
答案 0 :(得分:1)
有几种不同的方法可以做到这一点......
使用正则表达式可能是处理此问题的最简单方法之一。
from sys import argv
import re
def binary_search(array, item):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2 # round down if not an even
guess = array[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
def main():
array = re.findall(r"[\w]+", argv[1])
array = [int(i) for i in array]
item = int(argv[2])
binary_search(array,item)
if __name__== "__main__":
main()
您还可以使用exec()
,这可能更具风险和复杂性。这是一个简单的例子:
from sys import argv
command = 'mylist = {0}'.format(argv[1])
exec(command)
for item in mylist:
print(item)
示例输出:
C:\path>py foo.py [1,2,3]
1
2
3
答案 1 :(得分:0)
命令行上的参数是字符串,它们不像程序中的文字那样被解析。
argv自动将字符串构造成命令行参数列表(以空格分隔),简而言之,
textCountLabel.text = yourUpdatedString
textCountLabel.sizeToFit()
是一个列表。
此外,模块argparse有帮助
argparse模块可以轻松编写用户友好的命令行界面。程序定义了它需要的参数,argparse将弄清楚如何解析sys.argv中的参数。当用户给程序提供无效参数时,argparse模块还会自动生成帮助和使用消息并发出错误。