3

我是 python 新手,并且已经显示了用于运行函数的“驱动程序”,而无需将它们输入命令行,

我不明白驱动程序的概念或如何正确输入它们,任何关于如何使用它们的反馈都会很棒!

我不明白的是输入函数makeGreyscaleThenNegate(pic)如何调用def函数makeGreyscaleThenNegate(picture):当输入值不同时(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))

我的信念是让它起作用,(图片)在创建“驱动程序”功能之前已经被命名/定义了吗?我只是不确定(图片)和(图片)如何引用同一个文件,或者我完全误解了这个..

4

2 回答 2

1

这实际上是 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...)
于 2013-09-27T07:20:25.403 回答
0

pic并且picture只是名称或标签。您可以随心所欲地调用一大块数据。例如,西班牙人可能称一瓶牛奶为“leche”,而法国人可能称其为“lait”。

同样的事情也适用于 Python。您有某种“图片”对象,并且在整个程序中,您使用不同的名称来调用它。在driverGray函数中,你称之为pic,在makeGrayscaleThenNegate函数中,你称之为图片。不同的名称,相同的对象。

如果我要这样做:

pic = makePicture(pickAFile())
b = pic
c = b

...两者pic,bc都指的是完全相同的“事物”。如果我b通过做类似的事情来改变,b.var = 13两者都会改变。cpic

(注意:如果你做了类似的事情c = 1,那么你是说c现在意味着一个数字,而不是一个图片对象。picb变量不受影响。

这是一个比喻:如果有人要在牛奶中下毒,那么西班牙人或法国人如何称呼牛奶并不重要——不管具体名称如何,它都是有毒的。


在您的情况下,当您makeGreyscaleThenNegate(pic)在第一个函数中执行操作时,您是在说您“传入”了一个图片对象(您碰巧调用了该对象pic)。makeGrayscaleThenNegate函数定义def makeGreyscaleThenNegate(picture):为。这意味着传入的第一个参数将在该函数的持续时间内称为“图片”。

于 2013-09-27T07:21:47.803 回答