Python3零基础学习笔记六

函数变量
   函数名是变量,它在创建时绑定一个函数
   示例:
     def f1(lst=[]):
         print('f1函数被调用')
     f1()
     f1=None
     f1() 出错
一个函数可以作为另一个函数的参数(实参)传递
     示例:
     def f1():
         print('f1被调用') 
     def f2():
         print('f2被调用')
     def fx(fn):
         print('fn绑定的函数是:',fn)     #在fx内调用fn绑定的函数
         fn()
     fx(f1)   调用fx,把f1作为实参传输
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
函数可以作为另一个函数的返回值:
       函数可以返回另一个函数
示例:
def get_op(l):
s = input('请输入您的操作:')
if s == '求最大':
return max(l)
elif s == '求最小':
return min(l)
elif s == '求和':
return sum(l)
l = [2,3,4,6,9,8]
print(l)
f = get_op(l)     
#注:f = get_op  与  f = get_op()   意义不同
print(f(l))
# f(l)  等同于 max(l) min(l) sum(l)
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
函数嵌套的定义:
     def语句的作用是用来创建一个函数
     def  语句可以写在函数内部,在函数执行时可以动态创建一个函数
示例:
def get_fun(v):
if v == 1:
def myadd(x,y):
return x+y
return myadd
elif v == 2:
def mysub(x,y):
return x-y
return mysub
fx = get_fun(1)
print(fx(400,300))
fx = get_fun(2)
print(fx(400,300))
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
函数的全局变量和局部变量
    局部变量:
    1.定义在函数内部的变量称为局部变量(函数形式的形参也是局部变量)
    2.局部变量只能在函数内部使用
    3.局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
    全局变量
    1.定义在函数外部,模块内部的变量成为全局变量
    2.全局变量,所有的函数都可以直接访问(但函数内部不能直接修改全局变量的绑定关系)
示例:(417test.py)
    a = 100         ……全局变量
    b = 200         ……全局变量
    def fn(c):      ……形参
        d = 400     ……局部变量
        print(a,b,c,d)
    
    fn(300)
    print('a=',a)
    print('b=',b)
   局部变量说明:
   1.在函数内首次对变量赋值是创建局部变量,再次为变量赋值是修改局部变量的绑定关系。 
   2.在函数内部的赋值语句不会对全局变量造成影响。
作用域问题:
   作用域也叫做命名空间,是访问变量时查找变量名的范围空间
Python的四个作用域L E G B
    作用域                                 英文解释                                   英文简写
    局部作用域(函数内)           local(function)                                  L
    外部嵌套函数作用域              Enclosing function locals                   E
    函数定义所在模块的作用域     Global(module)                                 G
    python内置模块的作用域        builtin(python)                                  B
示例:417test.py
→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→
变量名的查找规则(顺序):
      1.查找本地变量
      2.查找包括此函数的外部嵌套函数内部的变量
      3.全局变量
      4.内置变量
globals()/locals() 函数
      globals()    返回全局作用域内变量的字典
      locals()      返回局部作用域内变量的字典

global语句
     作用:告诉解释执行器,global语句声明的一个或者多个变量,这些变量的作用域为'''模块级'''的作用域变量
             也称作全局变量
             全局声明: 将赋值变量映射到模块文件内部的作用域
     说明:1.全局变量如果在函数内部被赋值,则必须通过全局声明
              2.全局变量在函数内部不经过声明就可以直接访问
              3.不能先声明局部变量,再用global声明为全局变量,此做法不和规则
              4.global变量列表里的变量名不能再出现在次作用域内的形参列表里
               (如果一定要用,则形参列表里的参数和原来的变量没关系)
     示例:global a,b
              global v 
v = 100
l = 200
def fx():
global v,l
v = 200
l = 400
return v,l
print(fx())
print(v,l)


nonlocal语句:
     作用:告诉解释执行器,nonlocal声明的变量不是局部变量,也不是全局变量,而是“外部”嵌套函数内的变量。
     语法:nonlocal 变量名1,变量名2......
     示例:
v = 100
def outter():
v = 200
print('outter里的v=',v)
def inner():
nonlocal v 
v += 1  
print('inner里的v=',v)
inner()
print('调用inner后,outter里的v=',v)
      说明:1.nonlocal语句只能在被嵌套函数内部进行使用
              2.访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
              3.当有两层或两层以上嵌套函数时,访问nonlocal变量只对最近一层变量进行操作
              4.nonlocal语句的变量列表的变量名不能出现在此函数的参数列表里(即def fx(v)  nonlocal v)

你可能感兴趣的:(Python基础学习笔记)