Python核心编程学习笔记(十)

局部变量与全局变量

局部变量:

       定义在函数内部的变量称为局部变量(函数的形参也是局部变量)

       局部变量只能在函数内部使用

       局部变量在函数调用时才能被创建,在函数调用结束后会自动销毁

全局变量:

       定义在函数外部,模块内部的变量成为全局变量

       所有函数都可以直接访问全局变量,但函数内部不能直接通过赋值语句来改变全局变量

  (函数名其实就是一个全局变量)

局部变量说明:

       1.在函数内首次对变量赋值是创建局部变量,再次为变量赋值是修改局部变量的绑定关系

       2.在函数内部的赋值语句不会对全局变量造成影响

       3.局部变量只能在被声明的函数内部访问,而全局变量可以在整个模块内访问

globals()函数和locals()函数

       globals()  返回当前全局作用域内变量的字典

       locals()   返回局部作用域内变量的字典

函数变量

函数名是变量,它在创建时绑定一个函数

示例:   

       >>> def f1():

       ...     print("hello f1")

       >>> def f2():

       ...     print("hello f2")

       >>> fx=f1

       >>> fx()

       hello f1

       >>> f1()

       hello f1

       >>> f1=f2

       >>> f1()

       hello f2

 

一个函数可以作为另一个函数实参传递

>>> def f1():

...     print("f1被调用")

>>> def f2():

...     print("f2被调用")

>>> def fx(fn):

...     print("fn绑定的是",fn)

...     fn()

>>> fx(f1)

fn绑定的是 f1

f1被调用

 

 函数作为另一个函数的返回值

def get_op():

    s=input("请输入操作:")

    if s == '求最大':

        return max

    elif s == '求最小':

        return min

    elif s== '求和':

        return sum

L=[1,2,3,4]

fx=get_op()

print(fx(L))

 

函数的嵌套定义

       函数嵌套定义是指一个函数里用def语句来创建其他函数的情况

示例:

       def fun_outer():

                  print("fun_outer被调用...")

                  def fun_inner():

                      print("fun_inner被调用...")

                  fun_inner()

                  fun_inner()

                  print("fun_outer调用结束")  

              return  fun_inner #返回一个函数名,注意没有加括号

       f=fun_outer()     #调用函数,变量f绑定返回的函数名fun_inner

       f()               #调用fun_outer里创建的fun_inner()

  #fun_inner –----> #调用失败,局部变量不能直接调用

函数的作用域

       作用域也叫名字空间,是访问变量时查找变量名的范围空间

       python的四个作用域  LEGB

              作用域                              英文解释                               英文简写

       局部作用域(函数内)       local(function)                                L

       外部嵌套函数作用域           Enclosing function locals                      E

       函数定义所在模块的作用域     Globals(module)                            G

       python内置模块作用域       Builtin(python)                                 B

       变量名的查找规则:

              1.在访问变量时先查找本地变量,然后是包裹此函数外部的函数内部的变量,

                  之后是全局变量,最后是内置变量 L--→ E--→ G --→ B

              2.在默认情况下,变量名赋值会创建或者改变本地作用域内的变量

global语句:

       作用:

              1.告诉解释器,global语句声明的一个或多个变量,这些变量的作用域

         为模块级的作用域(也称全局变量)

         2.全局声明(global)

              将赋值的变量映射到模块文件内部的作用域

       语法:
       global        变量1,      变量2,…

    示例:

              # global v, a, b, c

              v=100

              def fn():

                         global v

                         v=200

              fn()

              print('v=',v) # v=200

       global说明

              1.全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)

              2.全局变量在函数内不经过声明就可以直接访问

              3.不能先创建局部变量,再用global声明为全局变量,此做法不符规则

              4.global变量列表里的变量名不能出现在此作用域形参列表里

nonlocal语句

       作用:

              告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数

              内的变量

       语法:

              nonlocal  变量1,变量2,…

       说明:

              1.nonlocal语句只能在被嵌套的函数内部进行使用

              2.访问nonlocal变量将对外部嵌套函数作用域的变量进行操作

              3.当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作

              4.nonlocal语句的变量列表里的变量名,不能出现在此函数形参列表中

lambda表达式(又称匿名函数)

       作用:

              创建一个匿名函数对象,同def类似,但不提供函数名

  语法格式:

              lambda  [形参1,形参2,…]  :  表达式

       注:[]中的内容可以没有

  示例:

    myadd = lambda a,b : a+b

       print(“10+20=”,myadd(10,20))

  说明:

              1.当lambda只是一个表达式,它用来创建一个函数对象

    2.当lambda表达式调用时,先执行冒号(:)后的表达式,并返回表达式的结果的引用

              3.lambda表达式创建的函数只能包含一条表达式,lambda比函数简单且可以随时创建和销毁,

              有利于减少程序的耦合度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值