Pytho基础 第三章

Python基础 第三章 函数

3.1 概念整理

3.1.1 def语句和参数:
在调用print()或 len()等函数时,会传入一些值放于括号中间,在此称为参数。也可以自行定义接收参数的函数。

def hello(name):
	print('Hello + name')

hello('yang')

在此函数定义中,name为一个“变元”,即可以存放参数以及赋值。值得注意的是,保存在“变元”中的值,在函数返回以后就丢失了。(类似程序结束后,内部的变量会丢弃。)

3.1.2 返回值与Return语句:
若调用len()函数,并向它传入’Hello’这样的参数,函数调用求值为5。一般来说,函数调用求值的结果称为函数的“返回值”。
return语句包含以下部分:
1.return关键字;
2.函数应返回的值或表达式;
若return中使用了表达式,那么返回的值即为表达式求值的结果。

3.1.3 None值:
None是 NoneType 数据类型的唯一值,首字母必须大写。
由于print()函数没有返回值,是简单的输出函数,故print()返回None。

关键字参数和print()
关键字参数是由函数调用时加在它们前面的关键字来识别的,关键字参数通常用于可选变元。

3.1.4 局部和全局作用域
在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数以外赋值的变量,属于“全局作用域”。
一个函数被调用时,就创建了一个局部域,该函数返回值时,局部作用域就丢失了。
作用域注意点:
1.全局作用域中的代码不能使用任何局部变量;
2.局部作用域可以访问全局变量;
3.一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
4.如果在不同的作用域中,可以用相同的名字命名不同变量,即spam可作为局部变量和整体变量。

注意:
1.局部变量不能在全局作用域中使用;
2.局部作用域不能使用其他局部变量;
3.全局变量可在局部作用域中使用;
4.名称相同的局部变量和全局变量(示例)

def spam():
	eggs = "spam local"
	print(eggs)
def bacon():
	eggs = "bacon local"
	print(eggs)
	spam()
	print(eggs)
eggs = "global"
bacon()
print(eggs)

运行结果如下:

bacon local
spam local
bacon local
global

3.1.5 global语句
如果一个函数需要在全局对变量进行修改,那么就要使用global语句,例如global eggs,就是指eggs为全局变量。
若要区分一个变量是否为全局变量,有三条法则:
1.若变量在全局作用域中使用,那就是全局变量;
2.若有global语句,那就是全局变量;
3.若该变量用于函数中赋值语句,则为局部变量;

3.1.6 异常处理
对于一个函数,需要确定的即为输入值与输出值,错误可由try(可能出错的)与except函数(处理错误)进行处理。

def spam(divideBy):
    try:
        return 42/divideBy
    except ZeroDivisionError:
        print('Error:Invalid argument')

输出如下:

21.0
3.5
Error:Invalid argument
None

注:try语句中,所有发生的错误都会被捕捉,将spam放于语句块中:

def spam(divideBy):
        return 42/divideBy
try:
    print(spam(2))
    print(spam(12))
    print(spam(0))
    print(spam(1))
except ZeroDivisionError:
    print('Error:Invalid argument.')

运行结果:

21.0
3.5
Error:Invalid argument.

其中print(spam(1))未被执行,是因为一旦执行跳到except子句的代码,就不会回到try语句,会继续照常向下执行。

3.2 习题

1、为什么在程序中加入函数会有好处?
答:函数减少了重复的代码。这让程序更短,更容易阅读,更容易修改。

2、函数中的代码何时执行: 在函数被定义时,还是在函数被调用时?
答:函数中的代码在函数被调用时执行,而不是在函数定义时。

3、什么语句创建一个函数?
答:def语句定义了(创建了)一个函数。

4、一个函数和一次函数调用有什么区别?
答:函数包含def语句和在def子句中的代码。函数调用让程序执行转到函数内,函数调用求值为该函数的返回值。

5、Python程序中有多少全局作用域?有多少局部作用域?
答:在调用一个函数时,创建了一个全局函数和一个局部作用域。

6、当函数调用返回时,局部作用域中的变量发生了什么?
答:函数返回时,局部作用域被销毁,其中所有的变量都被遗忘了。

7、什么是返回值?返回值可以作为表达式的一部分吗?
答:返回值时函数调用求值的结果。像所有值一样,返回值可以作为表达式的一部分。

8、如果函数没有返回语句,对它调用的返回值是什么?
答:如果函数没有return语句,它的返回值就是None。

9、如何强制函数中的一个变量指的是全局变量?
答:global语句强制函数中的一个变量引用该全局变量。

10、None的数据类型是什么?
答: None的数据类型是None Type。

11、import areallyourpetsnamederic语句做了什么?
答:import语句导入了areallyourpetsnamederic模块(顺便说一句,这不是一个真正的Python模块)。

12、如果在名为spam的模块中,有一个名为bacon()的函数,在引入span后,如何调用它?
答:该函数可以通过spam.bacon()调用。

13、如何防止程序在遇到错误时崩溃?
答:将可能导致错误的代码行放在一个try子句中。

14、try子句中发生了什么?except子句中发生了什么?
答:可能导致错误的代码放在try子句中。发生错误时,要执行的代码放在except子句中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值