分享

《Python编程快速上手——让繁琐的工作自动化》读书笔记2

 Four兄 2019-08-24

其实,写这个是为了督促自己看书……然后 ……其实没有然后了,人一松懈下来,就……ε=(´ο`*)))唉

第三章 函数

①def语句和参数

先举一个简单的例子:

  1. def hello():
  2. print('Hello World!')
  3. hello()
  4. hello()
  5. hello()
输出:
Hello World!
Hello World!
Hello World!

注意:一定要记得冒号(被无数次报错,内心崩溃,绝望)

好了,上面这种做法很类似在C++中的这种操作
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void hello()
  4. {
  5. cout<<'Hello World!\n';
  6. }
  7. int main()
  8. {
  9. hello();
  10. hello();
  11. hello();
  12. return 0;
  13. }

所以,我们看到,在括号里是没有参数的。
如果仅仅可以这样,那这种语言……还不如没有……
所以,理所当然,括号里也可以出现参数,举例如下:

  1. def hello(name):
  2. print('Hello '+name+'!')
  3. hello('Alice')
  4. hello('Bob')

输出:
Hello Alice!
Hello Bob!
------日常歪楼-------
对了,忘了提一点,在Python中,与C++不同,写在不同行的输出在运行的时候,输出的内容也会在不同行,如果要同行输出,就需要用逗号隔开。 
比如:
  1. print('Hello ')
  2. print('World!')

最后得到的是:
Hello
World!
这是因为print()函数自动在传入字符串末尾添加了换行符。          
但是        :
设置end关键字参数,像这样,也可以实现:Hello World!
代码如下:
  1. print('Hello ',end='')
  2. print('World!')

同时,注意,还有别的操作,像这样:
  1. print('cats','dogs','mice')
  2. #output:cats dogs mice
  3. print('cats','dogs','mice',sep=',')
  4. #output:cats,dogs,mice
---------言归正传-------
在上面的函数中,有一个名为name的变量当函数被调用的时候,参数就储存在这个变量中。



②返回值和return语句
 还是举例说明:
 
  1. import random
  2. def getAnswer(answerNumber):
  3. if answerNumber==1:
  4. return 'It is certain'
  5. elif answerNumber==2:
  6. return 'It is decidedly so'
  7. elif answerNumber==3:
  8. return 'Yes'
  9. elif answerNumber==4:
  10. return 'Reply hazy try again'
  11. elif answerNumber==5:
  12. return 'Ask again later'
  13. elif answerNumber==6:
  14. return 'Concentrate and ask again'
  15. elif answerNumber==7:
  16. return 'My reply is no'
  17. elif answerNumber==8:
  18. return 'Outlook not so good'
  19. elif answerNumber==9:
  20. return 'Very doubtful'
  21. r=random.randint(1,9)
  22. fortune=getAnswer(r)
  23. print(fortune)

输出主要看运气……
比如,我是这种:
Concentrate and ask again

return语句包括:
return关键字;
函数应该返回的值或表达式。
在上面的函数里函数的名字是:getAnswer,参数的名字是:answerNumber。
  1. r=random.randint(1,9)
  2. fortune=getAnswer(r)
  3. print(fortune)
这里也可以写成一行:
print(getAnswer(random.randint(1,9)))

如↑所示。



③None值
None值就是没有值,要注意首字母大写
None是NoneType数据类型的唯一值(在其他语言中,被称为null、nil或undefined)



④局部和全局作用域
作用域很重要,灰常重要,格外重要:
全局作用域中的代码不能使用任何局部变量;
但是局部作用域可以访问全局变量;
一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量;
如果在不同的作用域中,你可以用相同的名字命名不同的变量。

1、局部变量不能在全局作用域内使用
比如:
  1. def spam():
  2. eggs=31337
  3. spam()
  4. print(eggs)
报错信息如下:
Traceback (most recent call last):
  File '/usercode/file.py', line 4, in <module>
    print(eggs)
NameError: name 'eggs' is not defined

其实也就是说,eggs变量只属于spam()调用所创建的局部作用域。在程序执行从spam返回后,该局部作用域就被销毁了,不再有名为eggs的变量

2、局部作用域不能使用其他局部作用域内的变量

比如:
  1. def spam():
  2. eggs=99
  3. bacon()
  4. print(eggs)
  5. def bacon():
  6. ham=101
  7. eggs=10
  8. spam()

输出:
99
可以很容易发现,在bacon中对eggs的赋值被完完全全忽略了……spam和bacon是两个局部作用域,所以bacon中的eggs与spam中的eggs的唯一关系就是名字恰好一样……


3、全局变量可以在局部变量中读取
  1. def spam():
  2. print(eggs)
  3. eggs=42
  4. spam()
  5. print(eggs)

输出:
42
42
在这里eggs就在全局变量中,所以局部作用域spam可以读取

4、名称相同的局部变量和全局变量
  1. def spam():
  2. eggs='spam local'
  3. print(eggs)
  4. def bacon():
  5. eggs='bacon local'
  6. print(eggs)
  7. spam()
  8. print(eggs)
  9. eggs='global'
  10. bacon()
  11. print(eggs)

输出:
bacon local
spam local
bacon local
global
这样写使代码可读性降低,所以强烈建议尽量不要取相同的名字。




⑤global语句
举例如下:
  1. def spam():
  2. global eggs
  3. eggs='spam'
  4. eggs='global'
  5. spam()
  6. print(eggs)
输出:
spam


如何区分局部变量和全局变量
1、如果变量在全局作用域中使用(即在所有函数之外),它就总是全局变量
2、如果在一个函数中,有针对该变量的global语句,它就是全局变量
3、否则,如果该变量用于函数中的赋值语句,它就是局部变量
4、如果该变量没有用在赋值语句中,就是全局变量

举例:
  1. def spam():
  2. global eggs
  3. eggs='spam'#this is global
  4. def bacon():
  5. eggs='bacon'#this is local
  6. def ham():
  7. print(eggs)#this if global
  8. eggs=42#this is global
  9. spam()
  10. print(eggs)
输出:
spam




⑥异常处理
用try except语句调试,具体方法和C++里调试的方法区别不大,就是截取片段来试,酱紫。




'''
然后接下来,书里是一个很……的小程序,就不放上来了,或者哪天实在无聊敲一下。
所以就到这里啦。(✺ω✺)
'''


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多