Page 31 - Python Simple
P. 31

4. Bàn thêm về luồng điều khiển                                  http://www.vithon.org/tutorial/2.5/node6.html



             Sẽ in ra
                [1]
                [1, 2]
                [1, 2, 3]
             Nếu bạn không muốn mặc định được dùng chung trong các lời gọi sau, bạn có thể viết một hàm như thế
             này:
                def f(a, L=None):
                    if L is None:
                        L = []
                    L.append(a)
                    return L

             4.7.2 Thông số từ khóa

             Các hàm cũng có thể được gọi theo thông số từ khóa (keyword argument) theo dạng "keyword = value".
             Ví dụ, hàm sau:
                def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
                    print "-- This parrot wouldn't", action,
                    print "if you put", voltage, "volts through it."
                    print "-- Lovely plumage, the", type
                    print "-- It's", state, "!"
             có thể được gọi theo bất kỳ cách nào:
                parrot(1000)
                parrot(action = 'VOOOOOM', voltage = 1000000)
                parrot('a thousand', state = 'pushing up the daisies')
                parrot('a million', 'bereft of life', 'jump')

             nhưng những lời gọi sau đều không hợp lệ:

                parrot()                     # required argument missing
                parrot(voltage=5.0, 'dead')  # non-keyword argument following keyword
                parrot(110, voltage=220)     # duplicate value for argument
                parrot(actor='John Cleese')  # unknown keyword
             Nói chung, một danh sách thông số phải có bất kỳ thông số vị trí (positional argument) theo sau bởi bất
             kỳ thông số từ khóa, các từ khóa phải được chọn từ tên thông số chính quy. Các thông số chính quy
             không nhất thiết phải có giá trị mặc định. Không thông số nào có thể nhận một giá trị nhiều hơn một lần
             -- tên thông số chính quy tương ứng với thông số vị trí không thể được dùng làm từ khóa trong cùng một
             lời gọi. Sau đây là một ví dụ sai vì giới hạn này:
                >>> def function(a):
                ...     pass
                ...
                >>> function(0, a=0)
                Traceback (most recent call last):
                  File "<stdin>", line 1, in ?
                TypeError: function() got multiple values for keyword argument 'a'

             Khi thông số chính quy cuối có dạng **name , nó nhận một từ điển (dictionary) chứa tất cả các thông số
             từ khóa trừ những từ khóa tương ứng với thông số chính quy. Điểm này có thể được dùng chung với một
             thông số chính quy ở dạng *name (bàn đến trong mục con sau) và nhận một bộ (tuple) chứa các thông
             số vị trí sau danh sách thông số chính quy. (*name bắt buộc phải xuất hiện trước **name.) Ví dụ, nếu ta
             định nghĩa một hàm như sau:

                def cheeseshop(kind, *arguments, **keywords):
                    print "-- Do you have any", kind, '?'
                    print "-- I'm sorry, we're all out of", kind
                    for arg in arguments: print arg
                    print '-'*40
                    keys = keywords.keys()



     5 of 7                                                                                   08/31/2011 07:39 AM
   26   27   28   29   30   31   32   33   34   35   36