版权申明:原创文章,未经博主同意,不得转载!
小白高效学习Python系列,50小时学会Python “ 阅读本文需要大约5分钟。”
上一节函数(上)学习了Python函数的定义、调用以及函数参数。本节主要涉及以下几个方面:
从上一节学习我们知道,函数以 return [表达式] 结束函数,并返回函数值。若没有return相当于返回 None。那return可以返回哪些类型的值呢?实际上,包括整型、字符串、列表、字典以及实例对象都可作为返回值。下面给出两个例子:
def sum( arg1, arg2 ):
# 返回2个参数的和."
total = arg1 + arg2
print ("函数内 : ", total)
return total
# 调用sum函数
total = sum( 10, 20 )
print ("函数外 : ", total)
#输出结果为:
#函数内 : 30
#函数外 : 30
def info(name, age, country):
# 返回2个参数的和."
person ={'name':name, 'age': age, 'country': country}
return person
# 调用info函数
person = info('Lily', 20, 'China')
print("类型 : ", type(person))
print("返回值 : ", person)
#输出结果为:
#类型 :
#返回值 : {'name': 'Lily', 'age': 20, 'country': 'China'}
所谓匿名,即不使用 def 语句这样标准的形式定义一个函数。python 使用 lambda关键字 来创建匿名函数。
语法如下:
lambda [arg1 [,arg2,.....argn]]:expression
将前面的求和函数转换为匿名函数,如下所示:
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
#输出结果为:
#函数内 : 30
简单来说,变量的作用域就是指,在程序的什么范围内,该变量仍然有效,即仍然可以访问它。Python的作用域一共有3种,分别是:
初一看,很晕菜,这些都是什么玩意。看下面一个实例,立刻明白:
a = 0 # 全局作用域
def inner():
b = 3; # 局部作用域
a = 2 # 局部作用域
print('函数内:',a)
# print(b); 会报错,函数外无法 访问函数内定义的变量
print('函数外:',a)
inner()
print('函数外:',a)
#输出结果为:
#函数外: 0
#函数内: 2
#函数外: 0
以上代码形象说明了,局部作用域 、 全局作用域的含义。
局部作用域即是指只能在申明它的函数中访问。在inner()函数中定义的局部变量b,函数外无法使用。
**注意,**函数内外都定义名字为‘a’的变量,但从代码结果可以看到,他们互不影响。
内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:
import builtins
dir(builtins)
如果想在内部作用域修改外部作用域的变量时,该怎么办呢?Python中可以通过global和nonlocal关键字实现。
以下实例修改全局变量 num:
num = 0
#定义函数
def fun1():
global num # 使用 global 关键字声明
print('函数内:',num)
num = 999
print('函数内:',num)
#调用函数
fun1()
print('函数外:',num)
#输出结果:
#函数内: 0
#函数内: 999
#函数外: 999
可以看到,上面代码,通过在函数内对变量进行globle申明就可对全局变量进行修改。
如果要修改嵌套作用域(外层非全局作用域)中的变量则需要 nonlocal 关键字,如下实例:
# 定义函数
def outer():
num = 10
print('外层函数:',num)
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print('内层函数:',num)
inner()
print('外层函数:',num)
# 调用函数
outer()
#输出结果:
#外层函数: 10
#内层函数: 100
#外层函数: 100
可以看到,上面代码,通过在内层嵌套函数内对变量进行nonlocal申明后,就可对外层函数中的变量(非全局作用域)进行修改。