我的Python入门笔记(14)

十一章、函数(下)


If the implementation is hard to explain, it's a bad idea.——The Zen of Python


一、返回值

  在Python中,可以在函数体内使用return语句,为函数指定返回值。该返回值可以是任意类型,并且无论return语句出现在函数的什么位置,只要得到执行,就会直接结束该函数的执行,其语法格式如下:

  result = return [value]

  result: 用于保存返回结果,如果只返回一个值,那么result中保存的就是返回的一个值,该值可以是任意类型。如果返回多个值,那么result中保存的是一个元组。

  value :可选参数,用于指定要返回的值,可以返回一个值,也可以返回多个值.

  当函数中没有return语句时,或者省略了return语句的参数时,将返回None,即返回空值.

 1 def funname(name):
 2     nickname=''
 3     if name =='雨霓':   #如果输入的是雨霓
 4         nickname=1210
 5     elif name =='淑雪':
 6         nickname=1184
 7     elif name == '霜序':
 8         nickname=220
 9     else:
10         nickname='无法找到对应信息'
11     return nickname  #返回对应名字喜欢的数字
12 while True:
13     name=input('请输入姓名:')  #接收用户输入
14     nickname=funname(name)  #调用函数
15 print('姓名:',name,'喜欢的数字:',nickname)
16 输出:
17 请输入姓名:雨霓
18 姓名: 雨霓 喜欢的数字: 1210

二、变量的作用域

  变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误,一般会根据变量的“有效范围”,将变量分为“局部变量”和“全局变量

  1.局部变量

  局部变量是指函数内部定义并使用的变量,它只在函数的内容有效。即函数内部的名字只在函数运行时,才会创建,在函数运行之前或者运行完毕,所有的名字就都不存在了,所以,如果在函数外部使用函数内部定义的变量,就会抛出NameError异常.例如:定义一个名字为f_demo的函数,在该函数内部定义一个变量message(称为局部变量)并为其赋值,然后输出该变量,最后在函数体外部再次输出message变量,则会报错:

1 def f_demo():
2     message="如果我是284,我的220在哪里?"
3     print('局部变量message:',message)
4 f_demo()
5 print('局部变量message:',message)
6 输出:
7   File "C:/Users/Mortal/PycharmProjects/Python_Note/venv/test1.py", line 5, in <module>
8     print('局部变量message:',message)
9 NameError: name 'message' is not defined

  2.全局变量:

  与局部变量对应,全局变量是能够作用于函数内外的变量。全局变量主要有以下两种情况:

  (1)   如果一个变量,在函数外定义,那么不仅可以在函数外访问到,在函数内也可以访问到。在函数体以外的定义的变量是全局变量.示例如下:

1 message="如果我是284,我的220在哪里?"  #全局变量
2 def f_demo():
3     print('局部变量message:',message)  #在函数体内输出全局变量的值
4 f_demo()                              #调用函数
5 print('局部变量message:',message)     #在函数体外输出全局变量的值
6 输出:
7 局部变量message: 如果我是284,我的220在哪里?
8 局部变量message: 如果我是284,我的220在哪里?

  当局部变量与全局变量重名时,对函数体的变量进行赋值后,不影响函数体外的变量。

 (2)在函数体内定义,并且使用global关键字修饰后,该变量也可以为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以进行修改.

 1 message="如果我是284,我的220在哪里?"  #全局变量
 2 print('函数体外:message=',message)     #在函数体外输出全局变量
 3 def f_demo():
 4     message='别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!'  #局部变量
 5     print('局部变量message:',message)  #在函数体内输出局部变量的值
 6 f_demo()                              #调用函数
 7 print('函数体外message:',message)     #在函数体外输出全局变量的值
 8 
 9 输出:
10 函数体外:message= 如果我是284,我的220在哪里?
11 局部变量message: 别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!
12 函数体外message: 如果我是284,我的220在哪里?

  在函数内部定义的变量即使与全局变量重名,也不影响全局变量的值。如果想要在函数体内部修改全局变量的值,需要再定义局部变量时,使用global关键字修饰。

 1 message="如果我是284,我的220在哪里?"  #全局变量
 2 print('函数体外:message=',message)     #在函数体外输出全局变量
 3 def f_demo():
 4     global message            #将message声明为全局变量
 5     message='别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!'  #局部变量
 6     print('局部变量message:',message)  #在函数体内输出局部变量的值
 7 f_demo()                              #调用函数
 8 print('函数体外:message = :',message)     #在函数体外输出全局变量的值
 9 输出:
10 
11 函数体外:message= 如果我是284,我的220在哪里?
12 局部变量message: 别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!
13 函数体外:message = : 别人都关心你飞的高不高,我只关心你的翅膀好吃不好吃!

  注意:尽管Python允许全局变量和局部变量重名,但是在实际开发时,不建议这么做,因为这样容易让代码混乱,很难分清那些是全局变量,那些是局部变量。

三、匿名函数

  匿名函数是指没有名字的函数,它主要应用在需要一个函数,但是又不想费神去命名这个函数的场合,通常情况下,这种函数只能使用一次,在Python中,使用lambda表达式创建匿名函数,其语法格式如下:

  result = lambda[arg1[,arg2,…,arg n]]:expression

  result 用于调用lambda表达式

  [arg1[,arg2,…,arg n]]: 可选参数,用于指定要传递的参数列表,多个参数使用逗号分隔

       expression :必选参数,用于指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数.

  使用lambda表达式时,参数可以有多个,用逗号分隔,但是表达式只有一个,即只能返回一个值,而且也不能出现其他非表达式语句(for 或 while).

1 import math
2 def circlearrea(r):
3     result = math.pi*r*r
4     return result
5 r=10
6 print('半径为',r,'的圆面积为:',circlearrea(r))
7 输出:
8 半径为 10 的圆面积为: 314.1592653589793

  使用lambda表达式:

1 import math
2 r=10
3 result=lambda r:math.pi*r*r
4 print('半径为',r,'的圆面积为:',result(r))
5 输出:
6 半径为 10 的圆面积为: 314.1592653589793

  虽然使用lambda表达式比使用自定义函数的代码少一些。但是在使用lambda表达式时,需要定义一个变量,用于调用该lambda表达式。

  Lambda表达式的首要用途是指定短小的回调函数.

  emmm关于Python的内置函数就不做过多介绍,后面还会遇到的!

posted @ 2019-07-03 22:45  雨霓同学  阅读(424)  评论(0编辑  收藏  举报