globals() 函数 和locals 函数
globals() 返回当前全局作用域内变量的字典
locals() 返回当前局eval.py作用域内变量的字典
示例:
#示意globals() 和 locals 函数的用法
a = 1
b = 2
c = 3
def fn(c,d):
e = 300
print("locals()返回", locals())
print("glocals()返回", globals())
print(a,b,c,d,e)
print("全局变量c的值", globals()["c"])
fn(100,200)
函数变量
函数名是变量,它在创建函数时绑定一个函数
示例:
一个函数可以作用另一个函数的实参传递
可以把一个函数给另一个函数,另一个函数的形参变量将绑定实参函数
示例:
func_give_func.py
看懂如下代码 判断结果
def myinput(fn):
L=[1,3,9,5,7]
return fn(L)
print(myinput(max))
print(myinput(min))
print(myinput(sum))
函数可以作为另一个函数的返回值
函数的嵌套定义
函数嵌套定义是指一个函数里用def语句来创建其他函数的
python的作用域
作用域也叫名字空间,是访问变量时查找变量的名范围空间
python中的四个作用域 LEGB
作用域 英文解释 英文缩写
局部作用域 local(function) L
外部嵌套函数作用域 Enclosing Fucntion local E
函数定义所在模块(文件)的作用域 Global(module) G
python内建模块的作用域 Builtin(python) B
变量名的查找规则
L —>E----->G----->B
注:
在默认情况下,变量名赋值会创建或改变当前作用域内的变量的绑定关系
global 语句
作用:
1、告诉解释执行器,global语句声明的一个或多个变量。这个变量的作用域为模块级的作用域
也称作全局变量
2、全局声明(global)将赋值语句的变量映射到模块文件内部的作用域
语法:
global 变量1,变量2
示例见:
global.py
说明:
1、全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)
2、全局变量在函数内部不经过声明就可以直接访问(取值)
3、不能先创建局部变量,再用global声明为全局变量,这种语法不符合规则
4、global变量列表里的变量名不能出现在函数的形参列表里
#函数的形参不能用global
nonlocal 语句
作用:
告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量
语法:
nonlocal 变量名1,变量名2,....
示例见:
nonlocal.py
说明;
1、nonlocal 语句只能在被嵌套函数内部进行使用
2、对nonlocal变量进行赋值将对外部嵌套函数作用域内的变量进行操作
3、当有两层以上函数嵌套时,访问nonlocal变量只对最近一层变量进行操作
4、nonlocal 语句的变量列表里的变量名不能出现在此函数的形参列表中
def 语句的作用是创建函数
lambad 表达式(又称匿名函数)
作用:
创建一个匿名函数对象
同def 类似,但不提供函数名
语法:
lambad [函数形参列表]:表达式
示例见:
lambad.py
说明:
1、lambad 表达式创建的函数只能包含一条表达式
2、lambad 比函数简单,且可以随时创建和销毁,有利于降低程序的
偶合度
练习:
写一个lambad表达式:
fx = lambad n:…
次表达式创建的函数判断n这个数的平方加1 能否被5整除,如果能整数则
返回True,否则返回False
print(fx(3)) #返回True
print(fx(4)) #返回False
fx = lambda n: True if (n**2+1) % 5 == 0 else False
#print(fx(3))
#print(fx(4))
fx = lambda n: (n**2+1) % 5 == 0
print(fx(3))
print(fx(4))
看懂下面的程序在做什么?结果是什么?
def fx(f,x,y):
print(f(x,y))
fx((lambda a,b:a+b),100,200)
fx((lambda x,y:x**y),3,4)
eval 函数和exec() 函数
eval(scource, global=None,local=None),把一个字符串scource
当成一个表达式来执行,返回表达式执行后的结果
exec(scource, global=None,local=None) 把一个字符串scource
当成程序来执行