习题 19: 函数和变量

阅读原文

函数这个概念也许承载了太多的信息量,不过别担心。只要坚持做这些练习,对照上个练习 中的检查点检查一遍这次的联系,你最终会明白这些内容的。

有一个你可能没有注意到的细节,我们现在强调一下:函数里边的变量和脚本里边的变量 之间是没有连接的。下面的这个练习可以让你对这一点有更多的思考:

def cheese_and_crackers(cheese_count, boxes_of_crackers):
    print "You have %d cheeses!" % cheese_count
    print "You have %d boxes of crackers!" % boxes_of_crackers
    print "Man that's enough for a party!"
    print "Get a blanket.\n"


print "We can just give the function numbers directly:"
cheese_and_crackers(20, 30)


print "OR, we can use variables from our script:"
amount_of_cheese = 10
amount_of_crackers = 50

cheese_and_crackers(amount_of_cheese, amount_of_crackers)


print "We can even do math inside too:"
cheese_and_crackers(10 + 20, 5 + 6)


print "And we can combine the two, variables and math:"
cheese_and_crackers(amount_of_cheese + 100, amount_of_crackers + 1000)

通过这个练习,你看到我们给我们的函数 cheese_and_crackers 很多的参数,然后在 函数里把它们打印出来。我们可以在函数里用变量名,我们可以在函数里做运算,我们甚至 可以将变量和运算结合起来。

从一方面来说,函数的参数和我们的生成变量时用的 = 赋值符类似。事实上,如果 一个物件你可以用 = 将其命名,你通常也可以将其作为参数传递给一个函数。

What You Should See

你应该研究一下脚本的输出,和你想象的结果对比一下看有什么不同。

$ python ex19.py
We can just give the function numbers directly:
You have 20 cheeses!
You have 30 boxes of crackers!
Man that's enough for a party!
Get a blanket.

OR, we can use variables from our script:
You have 10 cheeses!
You have 50 boxes of crackers!
Man that's enough for a party!
Get a blanket.

We can even do math inside too:
You have 30 cheeses!
You have 11 boxes of crackers!
Man that's enough for a party!
Get a blanket.

And we can combine the two, variables and math:
You have 110 cheeses!
You have 1050 boxes of crackers!
Man that's enough for a party!
Get a blanket.

Study Drills

  1. 倒着将脚本读完,在每一行上面添加一行注解,说明这行的作用。
  2. 从最后一行开始,倒着阅读每一行,读出所有的重要字符来。
  3. 自己编至少一个函数出来,然后用10种方法运行这个函数。

Common Student Questions

How can there possibly be 10 different ways to run a function?
Believe it or not, there's a theoretically infinite number of ways to call any function. See how creative you can get with functions, variables, and input from a user.
Is there a way to analyze what this function is doing so I can understand it better?
There are many different ways, but try putting an English comment above each line describing what the line does. Another trick is to read the code out loud. Yet another is to print the code out and draw on the paper with pictures and comments showing what's going on.
What if I want to ask the user for the numbers of cheese and crackers?
You need to use int() to convert what you get from raw_input().
Does making the variable amount_of_cheese change the variable cheese_count in the function?
No, those variables are separate and live outside the function. They are then passed to the function and temporary versions are made just for the function's run. When the function exits these temporary variables go away and everything keeps working. Keep going in the book and this should become clearer.
Is it bad to have global variables (like amount_of_cheese) with the same name as function variables?
Yes, since then you're not quite sure which one you're talking about. But sometimes necessity means you have to use the same name, or you might do it on accident. Just avoid it whenever you can.
Is there a limit to the number of arguments a function can have?
It depends on the version of Python and the computer you're on, but it is fairly large. The practical limit though is about five arguments before the function becomes annoying to use.
Can you call a function within a function?
Yes, you'll make a game that does this later in the book.

Copyright (C) 2010 by
Author: Zed Shaw
Translator:Zander Wong

results matching ""

    No results matching ""