零基础入门Python小甲鱼-笔记9

第六章 函数-下

原文再续,书接上一回

6.3 我的地盘听我的

6.3.1 函数和过程

函数和过程的区别

  • 函数是有返回值的
  • 过程是简单、特殊并且没有返回值的

Python严格来说只有函数,没有过程。函数默认会有返回值

>>> def hello():
    print('Hello')

>>> print(hello())
Hello
None

通过上面小demo可以看出当不写return语句时,默认Python会认为函数是return None。所以说Python所有的函数都有返回值。

6.3.2 再谈一谈返回值

Python同时返回多个值,使用列表或元组打包

Python利用列表打包多种类型的值一次性返回

>>> def test():
    return [1,2,3,4,5]
>>> test()
[1, 2, 3, 4, 5]
6.3.3 函数变量的作用域

变量的作用域就是平时所说的变量可见性。一般的编程语言都有局部变量(Local Variable)和全局变量(Global Variable)之分

通过下面的小demo来学习(可以先把最后面那一条语句注释掉,运行一下先):

def discounts(price,rate):
    final_price = price * rate
    return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后价格是:',new_price)
print('这里试图打印局部变量final_price的值:',final_price)

运行整个文件的结果,程序有出错:

请输入原价:80
请输入折扣率:0.75
打折后价格是: 60.0
Traceback (most recent call last):
  File "F:/零基础入门学习python-小甲鱼/p6_2.py", line 9, in <module>
    print('这里试图打印局部变量final_price的值:',final_price)
NameError: name 'final_price' is not defined

解释一下函数discounts里面的三个参数都是局部变量。

错误原因:final_price没有被定义过,也就是说Python找不到final_price这个变量。这是因为final_price只是一个局部变量,它的作用范围只在它的地盘上,超出了这个范围,它将什么都不是。

总结:

  • 在函数里边定义的参数以及变量,都称为局部变量,出了这个函数,这些变量都是无效的。
  • 事实上的原理是,Python在运行函数的时候,利用栈(Stack)进行存储,当执行该函数后,函数中的所有数据都会被自动删除。所以在函数外边是无法访问到函数内部的局部变量的。

全局变量:

全局变量拥有更大的作用域,例如可以在函数中可以访问到它们

如果在函数内部试图修改全局变量,那么Python会创建一个新的局部变量替代(名字跟全局变量相同),但是真正的全局变量是没有被改变的。

def discounts(price,rate):
    final_price = price * rate
    old_price = 50 #在这里试图修改全局变量
    print('在局部变量中修改后的old_price的值:',old_price)
    return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('全局变量old_price的值:',old_price)
print('打折后价格是:',new_price)

运行整个文件的结果:

请输入原价:80
请输入折扣率:0.75
在局部变量中修改后的old_price的值: 50
全局变量old_price的值: 80.0
打折后价格是: 60.0

全局变量的总结:

全局变量在整个代码段中都是可以访问到的,但是不要试图在函数内部去修改全局变量的值

6.4 内嵌函数和闭包

6.4.1 global 关键字

全局变量的作用域是整个模块(整个代码段),也就是代码段内所有的函数内部都可以访问全局变量。

PS.函数内部仅仅去访问全局变量就好,不要试图去修改它。

再说一下:

Python会使用屏蔽的方式”保护”全局变量,一旦函数内部试图修改全局变量,Python就会在函数内部自动创建一个名字一模一样的局部变量,这样修改的结果只会修改到局部变量,而不会影响到全局变量。

小demo:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值