2011-11-10 29 views
12

Toán tử sao làm gì với danh sách đối số đầu vào trong ví dụ này?Mục đích của toán tử ngôi sao khi được sử dụng trên Danh sách

def main(name, data_dir='.'): 
    print 'name', type(name) 

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

Cụ thể, nếu tôi chạy chương trình với các nhà điều hành sao nó in:

name <type 'str'> 

nếu chạy mà không có ngôi sao main(sys.argv) nó in:

name <type 'list'> 
+0

có thể trùng lặp của [** và * làm gì cho tham số python?] (Http://stackoverflow.com/questions/36901/what-does-and-do-for-python-parameters) –

Trả lời

26

Nhà điều hành *unpacks an argument list. Nó cho phép bạn gọi một hàm với các mục danh sách dưới dạng các đối số riêng lẻ.

Ví dụ: nếu sys.argv["./foo", "bar", "quux"], main(*sys.argv) tương đương với main("./foo", "bar", "quux").

2
main(*sys.argv) 

cuộc gọi main với nội dung của danh sách sys.argv làm đối số tương ứng của main phương pháp và trong trường hợp này tương đương với:

main(sys.argv[0]) 

hoặc

main(sys.argv[0], sys.argv[1]) 

tùy thuộc vào độ dài của sys.argv.

Vì vậy, nếu bạn gọi nó bằng dấu hoa thị, nó sẽ chuyển đến name phần tử đầu tiên trong danh sách sys.argv.

Nếu bạn gọi nó mà không có dấu hoa thị, nó sẽ chuyển đến name toàn bộ danh sách sys.argv.

Các vấn đề liên quan