我正在做一個 pygame 物理教程。但是,當我嘗試將圓括號放在 Def 函式中的圓括號內時,它會顯示“無效語法”。我在任何地方都找不到答案。
def addVectors((angle1, length1), (angle2, length2)):
uj5u.com熱心網友回復:
遺憾的是,這只適用于 Python 2:
>$ python2
Python 2.7.18 (default, Mar 8 2021, 13:02:45)
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def addVectors((angle1, length1), (angle2, length2)):
... pass
...
>>>
>$ python3
Python 3.8.8 (default, Apr 13 2021, 19:58:26)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def addVectors((angle1, length1), (angle2, length2)):
File "<stdin>", line 1
def addVectors((angle1, length1), (angle2, length2)):
^
SyntaxError: invalid syntax
我建議使用namedtuple:
from collections import namedtuple
Vector = namedtuple('Vector', ['angle', 'length'])
v1 = Vector(angle=1, length=1)
v2 = Vector(angle=2, length=1)
def addVectors(v1, v2):
return Vector(v1.angle v2.angle, v1.length v2.length)
uj5u.com熱心網友回復:
您正在嘗試通過引數傳遞元組,但這種方式是錯誤的語法方式。嘗試這樣的事情:
def addVectors(*angles):
for i in angles:
print(i)
# addVectors((angle1, length1), (angle2, length2))
# (1, 2)
# (3, 4)
* 將像串列一樣解包,您可以傳遞任意大小的引數
uj5u.com熱心網友回復:
鑒于您的具體示例,您有望看到為什么您正在尋找的語法容易出錯。想象一下,如果你在 6 個月后不小心弄亂了一個括號會發生什么。您有幾個選項可以在 Python 3 中用更少的括號輕松實作相同的功能。
如果您希望輸入是四個物件:
def addVectors(angle1, length1, angle2, length2):
...
并稱為
self.angle, self.speed = addVectors(self.angle, self.speed, *gravity)
如果需要兩個輸入,可以指定顯式解包:
def addVectors(
angle1, length1 = vector1
angle2, length2 = vector2
...
并將其稱為
self.angle, self.speed = addVectors((self.angle, self.speed), gravity)
如您所見,沒有理由僅僅因為這種語法就放棄 Python 3。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/412140.html
標籤:
