2010-11-08 32 views
5

tôi đã thừa hưởng một số mã Python trông như thế này:Python: nhiều giá trị có thể cho các đối số chức năng

name = 'London' 
code = '0.1' 
notes = 'Capital of England' 
ev = model.City(key=key, code=code, name=name or code, notes=notes) 

Với tinh thần học tập, tôi muốn biết những gì đang xảy ra với lập luận name or code. Câu này có nghĩa là 'Sử dụng name nếu không phải là không, nếu không hãy sử dụng code'?

Và thuật ngữ kỹ thuật để cung cấp nhiều đối số có thể như thế này là gì, vì vậy tôi có thể đọc trên các tài liệu Python?

Cảm ơn!

+0

xấu của tôi - thay đổi nội dung, xin lỗi. phải ngừng sử dụng mã giả! – AP257

Trả lời

13

Hầu như. Nó cho biết sử dụng tên nếu nó không đánh giá sai. Things that evaluate to false bao gồm, nhưng không giới hạn:

chuỗi
  • False
  • rỗng ((), [], "")
  • ánh xạ trống ({})
  • None

Sửa gia tăng liên kết provid ed bởi SilentGhost trong bình luận của mình cho câu trả lời.

+2

Đó là ... thực sự tuyệt vời. Tôi nghĩ tôi yêu Python. – AP257

+1

cũng 'Không có '(4 nhiều hơn để đi) –

+1

[danh sách đầy đủ có sẵn trong tài liệu] (http://docs.python.org/library/stdtypes.html#truth-value-testing) – SilentGhost

7

Trong python, toán tử or trả về toán hạng đầu tiên, trừ khi nó được tính là false, trong trường hợp này nó trả về toán hạng thứ hai. Trong thực tế, điều này sẽ sử dụng name, với một dự phòng mặc định là code nếu name không được chỉ định.

+3

Làm rõ rằng 'hoặc' trả về giá trị thực của các toán hạng của nó, chứ không phải' True' hoặc 'False' là rất quan trọng, cả cho giáo dục phổ thông và là câu trả lời cho câu hỏi gốc –

1

cháy lên một Python console:

>>> name = None 
>>> code = 0.1 
>>> name or code 
0.10000000000000001 

Trong trường hợp tên là false biểu sẽ đánh giá để mã. Nếu không tên sẽ được sử dụng.

+0

Tôi đã sửa lỗi này. – kgiannakakis

0

Bạn đã xác định chính xác, nhưng 'null' không chính xác là quyết định gì. Về cơ bản bất cứ điều gì mà sẽ đánh giá sai (0, sai, chuỗi rỗng '') sẽ gây ra chuỗi thứ hai được hiển thị thay vì đầu tiên.'X hoặc y' theo nghĩa này là loại tương đương với:

nếu x: x
khác: y

Một số giao diện điều khiển trò chơi:

x = ''
y = 'roar'
x hoặc y
-'roar '
x =' arf '
x hoặc y
-'arf '
x = False
x hoặc y
-'roar'

0

Với tinh thần học tập, tôi muốn biết điều gì đang xảy ra với tên hoặc đối số mã . Câu này có nghĩa là 'Sử dụng tên nếu không phải là null, nếu không hãy sử dụng mã '?

vâng cơ bản nhưng Null trong python có thể có nghĩa là nhiều hơn một điều (chuỗi rỗng, không ai ..)

như trong trường hợp của bạn:

>>> name = 'London' 
>>> code = 0.1 
>>> name or code 
'London' 
>>> name = '' 
>>> code = 0.1 
>>> name or code 
0.1000.... 

nhưng nó thew lạ mà một số chức năng đôi khi có thể là số nguyên và một chuỗi khác.

Hy vọng điều này có thể giúp: =)

+1

Để tránh nhầm lẫn, tôi sẽ nói đây không phải là ví dụ về các giá trị tham số mặc định, nó chỉ là đánh giá các biểu thức boolean. Giá trị thông số mặc định là khi bạn cung cấp giá trị mặc định trong định nghĩa * phương thức * ví dụ: 'def some_method (param1, some_flag = False): # some_flag mặc định là False nếu bỏ qua tại thời gian gọi'. Ngoài ra, như những người khác đã nói, nó là sai lầm hơn là null rằng chuỗi rỗng, danh sách trống vv đánh giá. – mikej

+0

@mikej: Tôi hiểu từ câu hỏi của anh ấy __multiple các đối số có thể như (this) __ rằng anh ấy đang nói về giá trị đối số __default__ có thể tôi hiểu lầm rằng :) bởi vì nó phụ thuộc vào __this__ này cho hàm hoặc cho hay ??? – mouad

+0

Tôi nghĩ rằng @ AP257 (OP) đang nghĩ rằng 'tên hoặc mã' là một loại cú pháp truyền tham số đặc biệt khi thực sự nó là đánh giá các biểu thức và có thể được sử dụng ở bất kỳ đâu mà biểu thức có thể. – mikej

1

Đúng, thành ngữ mà lấy giá trị đầu tiên mà đánh giá là True (thường không None). Sử dụng cẩn thận vì các giá trị hợp lệ (như số không) có thể vô tình bị bỏ qua. Một cách tiếp cận an toàn hơn là một cái gì đó như:

if name is not None: 
    # use name 

hoặc

name if name is not None else code 
Các vấn đề liên quan