2014-01-10 70 views
2

關於從sys傳遞arugments的快速問題。在下面的代碼中,我不明白data_dir =「。」這data_dir用於另一節代表一個文件目錄,但我不明白=「。」片。我曾經認爲sys.argv只會傳遞一個arugment,它可以在main函數中使用。任何幫助,將不勝感激!在python中從sys.argv傳遞目錄名

def main(name, data_dir ="."): 
    resp = Respondents() 
    resp.ReadRecords(data_dir) 
    print 'Number of respondents', len(resp.records) 

    preg = Pregnancies() 
    preg.ReadRecords(data_dir) 
    print 'Number of pregnancies', len(preg.records) 

if __name__ == '__main__': 
    main(*sys.argv) 
+0

'.' ===當前工作目錄。 – devnull

+1

用於引用當前目錄(這是Linux概念)和'「。」'用於父目錄。試試你係統上的'cd .'和'cd ..'。 –

+0

@GrijeshChauhan我以爲可以在Win&Mac上使用'.'和'..'。 – devnull

回答

1

*之前的sys.argv導致列表擴展到函數的所有參數。因此sys.argv [0]被傳遞給name,如果存在,sys.argv [1]被傳遞給data_dir,覆蓋「。」。

0

希望這個例子有助於理解* sys.argv的工作原理。 DATA_DIR = 「」。 main()函數的參數實際上是一個默認參數,即,如果您沒有爲data_dir傳遞一個值,則python將其值設爲「。」。它代表了UNIX中的當前目錄。

>>> 
>>> def main(name, data_dir = "."): 
...  print name 
...  print data_dir 
... 
>>> import sys 
>>> sys.argv 
[''] 
>>> sys.argv[0] = "some_file_name" 
>>> 
>>> main(*sys.argv) 
some_file_name 
. 
>>> 
>>> sys.argv.append("my_data_dir") 
>>> main(*sys.argv) 
some_file_name 
my_data_dir 
>>> 
+0

謝謝!非常有用的解釋!現在明白了。 – user3180797

0

「。」是data_dir的默認值,它表示程序運行的當前目錄。