01/10/2018, 09:45

Hỏi về argv trong Python 2.7

  • Mình rất mong được anh em giải đáp vấn đề này. Chẳng là mình bắt đầu học python với tập Learn Python on The Hard Way. Đến bài 13 tham số và biến, trong đó có sử dụng tham số argv, ví dụ:
from sys import argv
script, first, second, third = argv
print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third
  • Lưu với tên là ex13.py và chạy:

  • Điều mình không hiểu ở đây là khi chuyền tham số, cái tên của script (ex13.py) cũng được chuyền vào argv và hiển thị ra. Vậy có cách nào để loại bỏ cái đó và chỉ chuyển những gì mình đã nhập vào được không? Và như thế nào ạ?

Henry viết 11:57 ngày 01/10/2018
argv.pop(0)

thêm cái đó sau from sys import argv

Trần Duy Đạt viết 11:54 ngày 01/10/2018

đồng liên giải thích kĩ hơn được không :)) ví dụ như pop ở đây nghĩa là gì? tìm ở đâu có được không?

Henry viết 11:49 ngày 01/10/2018

ghi import như vậy thì tất cả cái mà bạn đưa vào nó sẽ đưa vào một list
bạn có thể kiểm tra bằng cách print(argv)
Như bạn thấy đó là một list. Thì mình dùng argv.pop(0) có nghĩa là bỏ phần tử đầu tiên ra. Phần tử đầu tiên luôn luôn là tên của script

Thành Minh viết 11:53 ngày 01/10/2018

Bình thường mình hay dùng là argv[1:], nó sẽ trả về các giá trị index = 1 về sau.

Cao Thanh Hiếu viết 11:53 ngày 01/10/2018

Chào đồng chí.
Mình hôm nay cũng mới học tới bài 13 này, cũng lăn tăn i chang bạn í.
Chả hiểu sao mà mình
from sys import argv one, two, three, four, five = argv print "Hello", one print "hello", two print "hello", three print "hello", four print "hello", five
-> Terminal python ~/filename 1 2 3 4 (thì nó chạy) (mà 1 2 3 4 5 thì nó bảo nhiều quá)
Nhưng mà cái hàng đầu tiên lúc nào cũng là tên của scrip (tính ra cái đó là tên file để thực thi mà nó cũng tính là 1 giá trị nên cứ ngồi ngĩ mãi số 5 của mình sao lại không add được trong khi argv mình add tới 5 lận)

Henry viết 11:46 ngày 01/10/2018

khi bạn truyền vào filename 1 2 3 4 thì sẽ có tổng cộng là 5 cái được truyền vào gồm tên file và 4 số kia nữa. Do đó argv = [filename, 1, 2, 3, 4] 5 phần tử
Thế nên ở dòng dưới bạn mới one, two, three, four, five 5 cái luôn. Bằng nhau
nếu bạn truyền 1 2 3 4 5 thì cái argv = [filename, 1, 2, 3, 4, 5] 6 cái mà trong code bạn chỉ có 5
Do đó muốn có 6 cái bạn phải cho thêm một cái nữa là six thì may ra

tobiobtt viết 11:46 ngày 01/10/2018

Giải thích giùm mình nguyên cái cụm này với, mình còn hơi mơ hồ
script, first, second, third = argv

Henry viết 11:54 ngày 01/10/2018

bạn hãy thử print(argv) sẽ rõ. Ví dụ nếu bạn chạy file python.py như sau
python python.py 1, 2, 3 thì bạn đã gán tiếp tạo một list argv = ['python.py', 1, 2, 3]
Do đó khi gán: nó giống như là a, b = [1, 2] thì a = 1, b = 2 do đó
script, first, second, third = argv
tường minh ra là
script, first, second, third = ['python.py', 1, 2, 3]
script = 'python.py' first = 1 second = 2 third = 3

tobiobtt viết 11:52 ngày 01/10/2018

@graktung mình hiểu rồi, thanks nhá

Cao Thanh Hiếu viết 11:50 ngày 01/10/2018

À ra là thế, nó đã bó thằng scrip đi rồi nè.
Mình thử thì khi thực thi nó bắt mình phải thêm số 5 nữa mới chạy
from sys import argv argv.pop(0)

Đã hiểu rồi, cảm ơn bạn nhiều

Henry viết 11:58 ngày 01/10/2018

pop() nó sẽ trả ra giá trị bị pop thế nên khi bạn pop(0) thì là bạn đang bỏ giá trị đầu tiên ra. Do đó bạn in thì sẽ thấy cái mà bạn bỏ đi.
Bạn thử thêm một dòng ở dưới là print(argv) đi

Bài liên quan
0