《Python编程快速上手——让繁琐的工作自动化》读书笔记 第三章 函数
下面我们看下 Python 里的函数
一、函数入门
先举个栗子尝尝鲜
def hello(): print('Howdy!') print('How are you!') print('Hi hi Hi ') hello() hello() hello() #输出结果 Howdy! How are you! Hi hi Hi Howdy! How are you! Hi hi Hi Howdy! How are you! Hi hi Hi
定义函数 使用 def 关键字,函数名跟在后面,()函数可以无参亦可有参根据实际情况而定,:后自动退格书写函数体
带参函数:
def hello(name): print('Hello ' + name) print('How are you ' + name) print('Hi hi Hi ' + name) hello('令狐冲') hello('风清扬') hello('依林') #输出结果 Hello 令狐冲 How are you 令狐冲 Hi hi Hi 令狐冲 Hello 风清扬 How are you 风清扬 Hi hi Hi 风清扬 Hello 依林 How are you 依林 Hi hi Hi 依林
我们在看一个函数内嵌套分支流程的栗子
import random def getAnswer(an): if an == 1: return 'It is certain' elif an == 2: return 'It is decidedly so' elif an == 3: return 'Yes' elif an ==4: return 'Reply hazy try again' elif an == 5: return 'Ask again later' elif an==6: return 'Concenttrate and ask again' elif an == 7: return 'My reply is no' elif an ==8: return 'Outlook not so good' elif an == 9: return 'Very doubtful' r = random.randint(1,9) fortune = getAnswer(r) print(fortune)
二、下面我们看下函数中的变量的作用域问题
1、局部变量不能在全局进行使用
def spam(): aggs = 2121 # 函数内部定义的变量 spam() print('我要调用 spam() 内部的变量了,也不知 ok 不?') print(aggs) # 函数内部定义的变量,不能在函数外进行调用 #运行程序报错如下 我要调用 spam() 内部的变量了,也不知 ok 不? Traceback (most recent call last): File "E:\worksp_py\demo1\15\funtest03.py", line 5, in <module> print(aggs) # 函数内部定义的变量,不能在函数外进行调用 NameError: name 'aggs' is not defined
2、局部变量,不能使用其它作用域的局部变量:若声明两个不同作用据的相同名称的局部变量,那么是两个不同的变量
def spam(): aggs = 2121 bacon() print(aggs) def bacon(): ham = 101 aggs = 33 spam() print('---------------------------') bacon()
3、全局变量可以在局部作用域下使用
def spam(): print(aggs) aggs = 33 spam() # 结果 33 print(aggs)# 结果 33 33 33
说明:因为函数内未定义 aggs 变量,也未赋值,当函数 打印 aggs 变量时,Pyhon 会从全局变量里进行搜索;
4、名称相同的全局变量和局部变量
def spam(): eggs = 'spam local' print(eggs) # spam 方法内局部变量 def bacon(): eggs = 'bocon local' print(eggs)# bacon 方法内局部变量 spam() #调用 spam() 方法 print(eggs) # bacon 方法内局部变量 eggs='global' bacon() print(eggs) # 全局变量 bocon local spam local bocon local global
python 中:局部变量和全局变量重名合法
5、global 局部变量修改全局变量
def spam(): global eggs # 全局变量 eggs = 'spam' def bacon(): eggs = 'bacon' # 局部变量 def ham(): print(eggs) # 打印全局变量 eggs = 42 # 全局变量 spam() #全局变量 print(eggs)#全局变量 spam
说明:当使用 global 修饰变量时,变量是作用在全局作用域上,并未创建局部变量 eggs,即: global eggs 表明 eggs 是 全局变量
三、异常处理
def spam(n): return 6/n try: print(spam(2)) print(spam(4)) print(spam(0)) except ZeroDivisionError: print('Error : Invalid argument,')
3.0
1.5
Error : Invalid argument,