创建和使用驱动程序功能。它是如何工作的?

时间:2013-09-27 06:58:18

标签: python

我是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)和(图片)是指同一个文件,还是我完全误解了这个...

3 个答案:

答案 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)

picpicture只是名称或标签。无论你想要什么,你都可以调用一大块数据。例如,西班牙人可能会称一瓶牛奶为“leche”,而法国人则称之为“lait”。

同样适用于Python。你有某种“图片”对象,在整个程序中,你用不同的名字来称呼它。在driverGray函数中,您将其称为pic,并在makeGrayscaleThenNegate函数中将其称为图片。不同的名字,同一个对象。

如果我这样做:

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

... picbc都指的是完全相同的“事物”。如果我通过执行b之类的操作对b.var = 13进行了更改,则cpic也会发生变化。

(注意:如果您执行c = 1之类的操作,那么您说c现在表示数字,而不是图片对象。pic和{{1}变量不受影响。

这里有一个比喻:如果有人要对牛奶进行毒害,那么西班牙人或法国人称牛奶是什么并不重要 - 无论具体名称如何,它都会中毒。


在您的情况下,当您在第一个函数中执行b时,您说您“传入”了一个图片对象(您恰好称之为makeGreyscaleThenNegate(pic))。 pic函数定义为makeGrayscaleThenNegate。这意味着传入的第一个参数将在该函数的持续时间内被称为“picture”。