《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,

 

posted @ 2020-09-27 00:33  晓枫的春天  阅读(169)  评论(0编辑  收藏  举报