Python零基础入门之七变量与内置函数

这篇博客主要是全局变量局部变量还有关于内置函数以及关于内置函数与外部函数之间的参数问题,也就是说,今天的重点是函数中的变量问题。
1.全局变量与局部变量
这两种变量与其它语言中的变量一样,全局变量简言之就是在整个代码中都可以使用的变量,它的作用域是整个函数,而局部变量的作用域有限,往往就是在一块代码区域。
需要值得注意的是:如果只是在函数中调用全局变量的值而不改变其值,那是完全没有问题的,但是如果要在函数中改变全局变量的值而不进行特殊处理的话,Python语言对于这种情况的处理是会在自动生成一个与被调用的全局变量名称一样的局部变量,也就是屏蔽了全局变量,对该变量的操作不会影响全局变量的值。(虽然看着好像是改变了一样)
例如下面程序,虽然在函数中改变了count的值,但是在函数体外打印的count的值仍是5.

count=5
def Myfun():
     count=10
     print(count)
Myfun()
print(count)

这里写图片描述

如果说非要在函数内部修改全局变量的值的话,可以在函数内部使用关键字 global来修饰该变量,这样就是表示该操作是对于全局变量的操作,而不是生成一个与全局变量相同的局部变量。

print("======使用global之后的变量======")
count=5
def Myfun():
     global count#声明与赋值不能一块进行
     count=10
     print(count)
Myfun()
print(count)

这里写图片描述

2.内嵌(内部)函数
简言之,内嵌函数就是在函数内部定义的函数
值得注意的是:内部函数的调用只能在其外部的函数调用,而在之外无法调用。也就是说,在谁的内部,谁才有权利使用。

print("======内部函数的使用======")
def fun1():
     print("fun1()正在被调用")
     def fun2():
          print("fun2()正在被调用")
     fun2()
fun1()

3.闭包
闭包就是内嵌函数调用其外部函数的参数。
这种函数在调用的时候需要格外注意。

def funX(x):
     def funY(y):
          return x*y
     return funY
print(funX(5)(8))

4.闭包中的变量问题
下面这段代码执行起来就会报错。因为在内嵌函数的内部调用外部函数的参数,而参数x对于Fun2()这个函数来说是一个全局变量,由于屏蔽作用,造成函数出错。

def Fun1():
     x=5
     def Fun2():
          x*=x
          return x
     return Fun2()
#Fun1()

这里写图片描述

解决上述问题的办法有两个:
一是使用非栈的数据结构来解决问题
二是使用nonlocal关键字来解决

#一种解决办法就是使用非栈存储,使用序列等来存储

def Fun1():
     x=[5]
     def Fun2():
          x[0]*=x[0]
          return x[0]
     return Fun2()
print(Fun1(),"\n")

#在一种解决办法就是使用nonlocal关键字
def Fun3():
     x=5
     def Fun4():
          nonlocal x
          x*=x
          return x
     return Fun4()
print(Fun3())

这里写图片描述

关于函数中的变量问题得需要仔细琢磨琢磨,毕竟与之前学的有些差异。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值