习题 18: 命名、变量、代码、函数?

标题包含的内容够多的吧?接下来我要教你“函数(function)”了!咚咚锵!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单的使用方式。

函数可以做三样事情:

  1. 它们给代码片段命名,就跟“变量”给字符串和数字命名一样。
  2. 它们可以接受参数,就跟你的脚本接受 argv 一样。
  3. 通过使用 #1 和 #2,它们可以让你创建“微型脚本”或者“小命令”。

你可以使用 def 新建函数。我将让你创建四个不同的函数,它们工作起来和你的脚本一样。然后我会演示给你各个函数之间的关系。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# this one is like your scripts with argv
def print_two(*args):
    arg1, arg2 = args
    print "arg1: %r, arg2: %r" % (arg1, arg2)

# ok, that *args is actually pointless, we can just do this
def print_two_again(arg1, arg2):
    print "arg1: %r, arg2: %r" % (arg1, arg2)

# this just takes one argument
def print_one(arg1):
    print "arg1: %r" % arg1

# this one takes no arguments
def print_none():
    print "I got nothin'."


print_two("Zed","Shaw")
print_two_again("Zed","Shaw")
print_one("First!")
print_none()

让我们把你一个函数 print_two 肢解一下,这个函数和你写脚本的方式差不多,因此你看上去应该会觉着比较眼熟:

  1. 首先我们告诉 Python 创建一个函数,我们使用到的命令是 def ,也就是“定义(define)”的意思。
  2. 紧接着 def 的是函数的名称。本例中它的名称是 “print_two”,但名字可以随便取,就叫 “peanuts” 也没关系。但最好函数的名称能够体现出函数的功能来。
  3. 然后我们告诉函数我们需要 *args (asterisk args),这和脚本的 argv 非常相似,参数必须放在圆括号 () 中才能正常工作。
  4. 接着我们用冒号 : 结束本行,然后开始下一行缩进。
  5. 冒号以下,使用 4 个空格缩进的行都是属于 print_two 这个函数的内容。 其中第一行的作用是将参数解包,这和脚本参数解包的原理差不多。
  6. 为了演示它的工作原理,我们把解包后的每个参数都打印出来,这和我们在之前脚本练习中所作的类似。

函数 print_two 的问题是:它并不是创建函数最简单的方法。在 Python 函数中我们可以跳过整个参数解包的过程,直接使用 () 里边的名称作为变量名。这就是 print_two_again 实现的功能。

接下来的例子是 print_one ,它向你演示了函数如何接受单个参数。

最后一个例子是 print_none ,它向你演示了函数可以不接收任何参数。

Warning

如果你不太能看懂上面的内容也别气馁。后面我们还有更多的练习向你展示如何创建和使用函数。现在你只要把函数理解成“迷你脚本”就可以了。

你应该看到的结果?

运行上面的脚本会看到如下结果:

$ python ex18.py
arg1: 'Zed', arg2: 'Shaw'
arg1: 'Zed', arg2: 'Shaw'
arg1: 'First!'
I got nothin'.
$

你应该已经看出函数是怎样工作的了。注意到函数的用法和你以前见过的 existsopen,以及别的“命令”有点类似了吧?其实我只是为了让你容易理解才叫它们“命令”, 它们的本质其实就是函数。也就是说,你也可以在自己的脚本中创建你自己的“命令”。

加分习题?

为自己写一个函数注意事项以供后续参考。你可以写在一个索引卡片上随时阅读,直到你记住所有的要点为止。注意事项如下:

  1. 函数定义是以 def 开始的吗?
  2. 函数名称是以字符和下划线 _ 组成的吗?
  3. 函数名称是不是紧跟着括号 (
  4. 括号里是否包含参数?多个参数是否以逗号隔开?
  5. 参数名称是否有重复?(不能使用重复的参数名)
  6. 紧跟着参数的是不是括号和冒号 ):
  7. 紧跟着函数定义的代码是否使用了 4 个空格的缩进 (indent)?
  8. 函数结束的位置是否取消了缩进 (“dedent”)?

当你运行(或者说“使用 use”或者“调用 call”)一个函数时,记得检查下面的要点:

  1. 调运函数时是否使用了函数的名称?
  2. 函数名称是否紧跟着 (
  3. 括号后有无参数?多个参数是否以逗号隔开?
  4. 函数是否以 ) 结尾?

按照这两份检查表里的内容检查你的练习,直到你不需要检查表为止。

最后,将下面这句话阅读几遍:

“‘运行函数(run)’、‘调用函数(call)’、和 ‘使用函数(use)’是同一个意思”

Project Versions

Table Of Contents

Previous topic

习题 17: 更多文件操作

Next topic

习题 19: 函数和变量

This Page

2016时时彩平台推荐 时时彩后三3胆刷钱 时时彩提前知道开号 奇妙时时彩软件下载 un时时彩平台源码
西安时时彩诈骗案 时时彩神圣计划软件 排卵期软件哪个最准确 时时彩投注平台 时时彩拉人sse365
时时彩软件破解版论坛 重庆时时彩缩水软件安卓版 时时彩豹子出来的前兆 腾讯时时彩开奖走势图 时时彩中奖金额
用友软件 江西时时彩开奖图 微彩时时彩计划软件 怎么做时时彩代理人 时时彩开奖早知道
体彩幸运赛车网上直播 澳门赌场娱乐城 加拿大幸运28预测 北京赛车pk10网址平台 云南十一选五推荐免费
六合彩管家婆 福彩湖北快3开奖结果 福建36选7什么时候开奖时间 tt彩票 上海快3基本走势图
幸运飞艇开奖计划 山东群英会开奖 福彩北京赛车pk10官网 湖北11选5前三组选走势图 辽宁快乐12分析软件
体彩七位数开奖结果 山西省11选5 pk10北京赛车开奖记录 北京赛车pk10开奖直播 山西11选5追号计算器