在你flip()
功能(如在任何功能),由其他的答案中提到,您返回picture
這是作爲函數的參數傳遞的形象,但在d()被定義...
這是變量的scope
的問題,所以我請你再看看我們的討論here。
在這裏,你有兩個選擇(你在兩者之間取得了熔化):
- 直接修改給定的參數
- 創建
newPicture
,則picture
修改它,最後它返回
關於2D選項
詳情:
的重要的是picture
變量屬於d()
函數(d()是它的範圍)。與此同時newPicture
變量屬於flip()
函數(flip()是其範圍)。所以newPicture的生命週期是flip()(即一旦你終止flip()函數的執行,在返回的時候它就會被銷燬)。除非你將它返回給d(),否則d()對這個newPicture不知道任何事情。
因此,簡而言之(假設我們正在談論的第二個選項):
1)創建一個函數,接受picture
爲參數(翻轉())
2)內翻轉(),創建局部變量newPicture
並且僅修改那一個,使得原始picture
保持不變
3)返回向母公司scope
重新更新newPicture
。這裏d()調用flip(),所以它是父範圍。我們要創建一個三維變量(屬於d()範圍內),以保持在什麼被翻轉()返回的手:
def flip(picture)
# Create newPicture
# Modify newPicture (using the information from the "picture" parameter)
setColor(newPicture, ...)
...
return newPicture
def d():
file = PickAFile()
original_pic = makePicture(file)
finalNewPicture = flip(original_pic) # {1}
show(finalNewPicture)
{1}:在這裏,我們可以指定由翻轉返回的值(即newPicture
)到更高範圍變量finalNewPicture
(處理程序)...
我希望它可以幫助您瞭解背後的邏輯。這就像俄羅斯娃娃:newPicture用於內的倒裝(),這是內部d()使用,...
編輯:
我也想給一個關於第一個選項的解釋...
1)創建一個函數,一個picture
作爲參數(翻轉())
2)內部翻轉(),直接在更高修改作用域picture
可變
3)不要返回任何東西從flip()
這將導致:
def flip(picture)
# Simply modify the variable "picture", given as a parameter
setColor(picture, ...)
...
# Do not return anything
def d():
file = PickAFile()
original_pic = makePicture(file)
flip(original_pic) # {1}
show(original_pic)
{1}:這裏flip()直接在輸入圖片上進行更改,因此我們可以直接顯示原始修改圖片(original_pic
)。不需要中間處理程序變量。
的選項1代碼:(因爲你已經有工作的選項2)
def flip(picture):
height = getHeight(picture)
width = getWidth(picture)
x2=width-1
for x in range(0, width/2): # Only process the half way
y2=0
for y in range(0, height):
# swap pix and pix2
pxl = getPixel(picture, x, y)
pxl2 = getPixel(picture, x2, y2)
color = getColor(pxl)
color2 = getColor(pxl2)
setColor(pxl2, color)
setColor(pxl, color2)
y2=y2+1
x2=x2-1
def d():
f = pickAFile()
original_picture = makePicture(f)
flip2(original_picture)
show(original_picture)
d()
注:翻蓋可以按如下方式得到了廣泛的簡化:
def flip2(picture):
height = getHeight(picture)
width = getWidth(picture)
for x in range(0, width/2): # Only process the half way
for y in range(0, height):
# swap pix and pix2
pxl = getPixel(picture, x, y)
pxl2 = getPixel(picture, width-1-x, y)
color = getColor(pxl)
color2 = getColor(pxl2)
setColor(pxl2, color)
setColor(pxl, color2)
'寬度x'應該是'寬1 x' ...一個細節,但仍然;) –
感謝@Golgauth指出(我固定我的答案)。 – Alfe