python中位置参数的类型

时间:2013-04-30 06:56:58

标签: python python-2.7

我是python编程的新手,我来自Unix / Linux管理和shell脚本背景。我正在尝试在python中编写一个接受命令行参数的程序,并根据类型(int,str)执行某些操作。但是在我的情况下,输入始终被视为字符串。请提供建议。

#!/usr/bin/python
import os,sys,string
os.system('clear')

# function definition
def fun1(a):
           it = type(1)
           st = type('strg')
           if type(a) == it:
                c = a ** 3
                print ("Cube of the give int value %d is %d" % (a,c))
           elif type(a) == st:
                b = a+'.'
                c = b * 3
                print ("Since given input is string %s ,the concatenated output is %s" % (a,c))


a=sys.argv[1]
fun1(a)

3 个答案:

答案 0 :(得分:1)

程序的命令行参数总是以字符串形式给出(这不仅适用于python,而且至少适用于所有与C相关的语言)。这意味着当您将“1”这样的数字作为参数时,需要将其显式转换为整数。在您的情况下,您可以尝试转换它并假设它是一个字符串,如果这不起作用:

try:
    v = int(a)
    #... do int related stuff
except ValueError:
    #... do string related stuff

这个 设计不好,最好让用户决定是否要将参数解释为字符串 - 毕竟,用户给出的每个int也是有效的串。例如,你可以使用像argparse这样的东西,并指定两个不同的参数,用“-i”表示int,“ - s”表示字符串。

答案 1 :(得分:0)

首先,输入将始终被视为字符串。

您可以使用argparse

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("cube", type=int,
                help="Cube of the give int value ")

args = parser.parse_args()
answer = args.cube**3

print answer

python prog.py 4
64

所有整数都有一个__int__属性,因此您可以使用该属性来区分int和string。

if hasattr(intvalue, __int__):
    print "Integer"

答案 2 :(得分:0)

import argparse, ast

parser = argparse.ArgumentParser(description="Process a single item (int/str)")
parser.add_argument('item', type=ast.literal_eval,
                    help='item may be an int or a string')
item = parser.parse_args().item


if isinstance(item, int):
    c = item ** 3
    print("Cube of the give int value %d is %d" % (item,c))
elif isinstance(item, str):
    b = item + '.'
    c = b * 3
    print("Since given input is string %s ,the concatenated output is %s"
          % (item,c))
else:
    pass # print error