我是python的新手,并且已经显示'驱动程序'来运行函数而无需将它们输入命令行,
我不理解驱动程序的概念或如何正确输入驱动程序,任何关于如何使用它们的反馈都会很棒!
我不明白的是如何输入函数makeGreyscaleThenNegate(pic)可以调用def函数makeGreyscaleThenNegate(图片):当输入值不同(pic)与(picture)时。 (我想这是因为我不知道'驱动'功能是如何工作的。)
以下是我所展示的内容
def driverGrey():
pic=makePicture(pickAFile())
repaint(pic)
makeGreyscaleThenNegate(pic)
repaint(pic)
def makeGreyscaleThenNegate(picture):
for px in getPixels(picture):
lum=(getRed(px)+getGreen(px)+getBlue(px)/3
lum=255-lum
setColor(px,makeColor(lum,lum,lum))
我相信这是为了工作,(pic)在创建'driver'函数之前已经被命名/定义了吗?我只是不确定(pic)和(图片)是指同一个文件,还是我完全误解了这个...
答案 0 :(得分:0)
我认为您在理解函数调用时遇到一些问题,请查看this question处接受的答案。这可以帮助您理解为什么pic
不需要命名为picture
答案 1 :(得分:0)
这实际上是CS101并没有特定于Python的。函数是代码段的名称。作为函数的参数传递的变量的名称和函数中参数的名称完全不相关,它们只是名称。上面的代码片段会发生什么:
def driverGrey():
pic=makePicture(pickAFile())
# 1. call a function named 'pickAFile' which I assume returne a file or filename
# 2. pass the file or filename to the function named 'makePicture' which obviously
# returns a 'picture' object (for whatever definition of a 'picture object')
# 3. binds the 'picture object' to the local name 'pic'
(snip...)
makeGreyscaleThenNegate(pic)
# 1. pass the picture object to the function named 'makeGreyscaleThenNegate'.
#
# At that time we enter the body of the 'makeGreyscaleThenNegate' function,
# in which the object known as 'pic' here will be bound to the local
# name 'picture' - IOW at that point we have two names ('pic' and 'picture')
# in two different namespaces ('driverGrey' local namespace and
# 'makeGreyscaleThenNegate' local namespace) referencing the same object.
#
# 2. 'makeGreyscaleThenNegate' modifies the object.
#
# 3. when 'makeGreyscaleThenNegate' returns, it's local namespace is destroyed
# so we only have the local 'pic' name referencing the picture object,
# and the control flow comes back here.
(snip...)
答案 2 :(得分:0)
pic
和picture
只是名称或标签。无论你想要什么,你都可以调用一大块数据。例如,西班牙人可能会称一瓶牛奶为“leche”,而法国人则称之为“lait”。
同样适用于Python。你有某种“图片”对象,在整个程序中,你用不同的名字来称呼它。在driverGray
函数中,您将其称为pic
,并在makeGrayscaleThenNegate
函数中将其称为图片。不同的名字,同一个对象。
如果我这样做:
pic = makePicture(pickAFile())
b = pic
c = b
... pic
,b
和c
都指的是完全相同的“事物”。如果我通过执行b
之类的操作对b.var = 13
进行了更改,则c
和pic
也会发生变化。
(注意:如果您执行c = 1
之类的操作,那么您说c
现在表示数字,而不是图片对象。pic
和{{1}变量不受影响。
这里有一个比喻:如果有人要对牛奶进行毒害,那么西班牙人或法国人称牛奶是什么并不重要 - 无论具体名称如何,它都会中毒。
在您的情况下,当您在第一个函数中执行b
时,您说您“传入”了一个图片对象(您恰好称之为makeGreyscaleThenNegate(pic)
)。 pic
函数定义为makeGrayscaleThenNegate
。这意味着传入的第一个参数将在该函数的持续时间内被称为“picture”。