练习 19 Learn Python 3 The Hard Way

对于这周只推送了一次这件事,我已经没脸说对不起了 T^T 最近发现不管是内容量还是难度都明显比以前增加了,想把笔记写得细点,但是每天可用时间太少,所以暂时决定先把推送改成每天一个练习,这样至少能争取尽量每天都有更新,希望我说到做到吧。好了废话不多说,进入正题。

上节课的三个练习我们学习了利用一些命令读写文件和复制文件,而后进行了函数的入门练习,尤其需要大家记住的是老肖给我们列的函数 checklist ,最好能够记在心里,没记住的同学可以先回去复习一下(练习 16-18 Learn Python 3 The Hard Way)

这节课我们继续学习函数和变量的一些内容,加深对函数运行方式的理解。

练习 19 函数和变量

可能对于很多童鞋尤其是数学不好的文科生来说,函数是个比较难的东西,但是大家也不要太担心,做练习的时候仔细回忆 checklist,然后认真思考每一步的含义,慢慢就会掌握的。

先做练习:

ex19.py

这个练习展示了我们可以给函数 赋值的几种不同的方式,我们可以直接给它数字,或者变量,亦或是数学运算,甚至是数学运算和变量的结合。

从某种程度上说,函数的参数有点类似于我们给变量赋值时的 符号。事实上,如果你可以用 来定义一个东西,你就可以把它作为参数赋给函数。(不理解没关系,先运行,对照输出结果)

你会看到

在看结果之前,肯定要先运行一下自己写的代码。不过说实话,ai酱我足足修改了 3 次才成功运行,除了一个字符串后面忘记加双引号,其他都是缩进导致的。

想必大家还有印象,在练习 18 的 checklist 中有一条写的是,定义完函数后,确保与函数相关的代码行前要缩进 4 个空格,函数结束后另起一行要取消 4 个空格的缩进。但是相信很多人跟我一样,不明白哪些是跟函数有关、需要缩进,哪些跟函数无关、不需要缩进呢?乍看上去,整段代码似乎都与函数相关的啊。

对于这个问题,我们一方面要严格按照老肖的例子要求来敲代码,确保不出错,另一方面我们也可以逆向思考,对照练习 18 和练习 19 的代码,可以看出,需要缩进的代码行都是定义完函数,对一些与函数中参数相关的字符串的打印,而不需要缩进的都是给函数传递参数值的内容。

本例中,第 2 行到第 5 行是定义完函数要打印字符串的内容,其中包括函数中的参数 和 。而从第 8 行开始到最后,是老肖给我们展示的几种给函数传递参数值的方式,因此这些行前面就不用缩进。

所以在敲代码时一定要记住第 2 行到第 5 行 前面要缩进 4 个空格,否则运行的时候会收到这样的报错信息:。当然如果你在不该缩进的地方缩进了,会收到这样的报错信息:。

好了,看结果吧。

练习 19 结果

附加练习

回顾一遍这个脚本,然后在每一行上方加上注释,解释它的作用。

从下到上阅读每一行,说出所有重要的字符。

写至少一个自己设计的函数,然后用 10 种不同的方式运行它。

如果你还是没有完全理解本练习中的代码,一定要把附加练习 1 认真做一下,这真的是一个思考和理解代码运行逻辑和过程的好方法。此外,附加练习 3 也很值得一试,当你真正运行一个你自己构建的函数,并用不同的方式运行它之后,你才会彻底明白 python 中函数的运行逻辑。

常见问题

运行一个函数怎么可能有 10 种不同的方式?不管你信不信,从理论上讲,任何函数都有无数种调用方式。看看你对于函数、变量以及用户输入的创造力有多强。

有没有什么方法能分析函数是如何运行的,以帮助我更好地理解它?有很多方法,但是你先试试给每行加注释这种方式。其他方法包括大声把代码读出来,或者把代码打印出来然后在上面画图,来展示它是怎么运行的。

如果我想问用户关于 cheese 和 crackers 的数字呢?你需要用 来把你通过 获取的内容转化成数值。

在函数中创建 这个变量会改变 这个变量吗?不会的,这些变量是相互独立并存在于函数之外的。它们之后会传递给函数,而且是“暂时版”,只是为了让函数运行。当函数退出之后,这些暂时的变量就会消失,其他一切正常运行。接着往下学,你会慢慢明白的。

像 这样的全局变量()跟函数变量同名的话是不是不太好?是的,如果这样的话,你就不知道你说的到底是哪个变量了。不过你有时候可能不得不用同样的名字,或者你可能不小心同名了,不管怎么样,尽量避免这种情况。

一个函数里包含的参数有数量限制吗?这取决于 Python 的版本以及你的电脑,但是这个数量其实相当大。实践中一个函数包含 5 个参数为宜,再多就比较难用了。

你能在一个函数里面调用一个函数吗?可以,在之后的练习里你会创建一个小游戏,到时候就会用到这个。

注:由于ai酱也是边学边写笔记,所以当下的一些理解可能也是基于我目前学到的内容,因此如果存在理解有误的地方我会在后面发现之后即使纠正,也欢迎进度比较快的童鞋在留言区进行纠正和指教(鞠躬

好了今天就先学到这儿吧,明天保证更新练习 20,如果不更新,我在群里发红包,人人有份哈哈

各位晚安啦~

好好学习|天天进步

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180129G0010Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券