目录:

  一、函数和过程

  二、再谈谈返回值

  三、函数变量的作用域

  四、课时19课后习题及答案

******************

一、函数和过程

******************

Python严格来说,只有函数,没有过程。此话怎讲?

>>> def hello():print("DC love ZWW")>>> hello()
DC love ZWW
>>> temp = hello()
DC love ZWW
>>> temp
>>> print(temp)
None
>>> print(hello())
DC love ZWW
None
>>> type(temp)
<class 'NoneType'>
>>> type(hello())
DC love ZWW
<class 'NoneType'>

调用print(hello())之后打印了两行字,第一行,我们知道时hello()函数执行的,第二行的None是怎么回事呢?当不写return语句的时候,默认Python会认为函数是return None的。所以说Python所有的函数都有返回值。

*********************

二、再谈谈返回值

*********************

在许多编程语言中,我们说一个函数是整型,其实我们的意思是指这个函数会返回一个整型的返回值。而Python不这么干,Python可以动态确定函数的类型,而且函数还能返回不同类型的值。还记得“Python只有变量,没有名字”这句话吗?只需知道Python会返回一个东西,然后拿来用就可以了。另外,Python似乎还可以同时返回多个值。

>>> def test():return [1,'小甲鱼',3.14]>>> test()
[1, '小甲鱼', 3.14]

Python可以利用列表打包多种类型的值一次性返回。当然,也可以直接用元组的形式返回多个值:

>>> def test():return 1,'小甲鱼',3.14>>> test()
(1, '小甲鱼', 3.14)

**************************

三、函数变量的作用域

**************************

变量的作用域也就是平常所说的变量可见性,一般的编程语言都有局部变量和全局变量之分。分析以下代码:

def discounts(price, rate):final_price = price * ratereturn final_priceold_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price, rate)
print('打折后价格是:', new_price)

程序的执行结果如下:

请输入原价:80
请输入折扣率:0.75
打折后价格是: 60.0

来分析一下代码:在函数discounts()中,两个参数是price和rate,还有一个是final_price,它们都是discounts()函数中的局部变量。为什么称之为局部变量呢?不妨修改下代码:

def discounts(price, rate):final_price = price * ratereturn final_priceold_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 "C:\Users\14158\Desktop\lalallalalal.py", line 12, in <module>print('这里试图打印局部变量final_price的值:',final_price)
NameError: name 'final_price' is not defined

错误原因:final_price没有被定义过,也就是说,python找不到final_price这个变量。这是因为final_price只是一个局部变量,它的作用范围只在它的地盘上----discounts()函数的定义范围内-----有效,出了这个范围,就不再属于它的地盘了,它将什么都不是。

总结一下:在函数里边定义的参数以及变量,都称为局部变量,出了这个函数,这些变量都是无效的。事实上的原理是,Python在运行函数的时候,这里在调用这个函数的时候,利用栈进行存储,把函数里的变量代码都扔到栈里面去,当执行完该函数后,函数中的所有数据都会被自动删除。所以在函数外边是无法访问到函数内部的局部变量的。

与局部变量相对的全局变量,程序中old_price、new_price、rate都是在函数外边定义的,它们都是全局变量,全局变量拥有更大的作用域,例如,我们可以在函数中访问到它们:

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

程序执行的结果如下:

请输入原价:80
请输入折扣率:0.75
这里试图打印全局变量old_price的值: 80.0
打折后价格是: 60.0

但是在使用全局变量时,要小心,注意一点:在Python中,你可以在函数中肆无忌惮地访问一个全局变量,但如果你试图去修改它,就会有奇怪的事情发生。分析以下的代码:

def discounts(price, rate):final_price = price * rateold_price = 50 #这里试图修改全局变量print('这里试图打印全局变量old_price的值:',old_price)return final_priceold_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

如果在函数内部试图修改全局变量,那么Python会创建一个新的局部变量代替(名字跟全局变量相同),但真正的全局变量是纹丝不动的,所以实现的结果和大家的预期不同。

关于全局变量,来进行下总结:全局变量在整个代码段中都是可以访问到的,但是不要试图在函数内部去修改全局变量的值,因为那样Python会自动在函数的内部创建一个名字一样的局部变量代替。

*******************************

四、课时19课后习题及答案

*******************************

转载于:https://www.cnblogs.com/DC0307/p/9470897.html

课时19:函数:我的地盘听我的相关推荐

  1. Python第019讲课后测试题:函数-我的地盘听我的

    函数-我的地盘听我的 测试题: 0. 下边程序会输入什么? def next():print('我在next()函数里...')pre()def pre():print('我在pre()函数里...' ...

  2. 函数:我的地盘听我的+习题复习

    ##函数与过程            ※函数(function):有返回值            ※过程(procedure):是简单的,特殊并且没有返回值的             (python严 ...

  3. 课时19 函数:我的地盘听我的

    一.函数和过程 Python只有函数,没有过程 >>> def hello():print('hello world') >>> hello() hello wor ...

  4. 019函数:我的地盘听我的

    019函数:我的地盘听我的 一.函数与过程 过程procedure:简单.特殊并且没有返回值的 >>> def hello():print('Hello xx') >>& ...

  5. 第019讲:函数:我的地盘听我的

    测试题 0. 下边程序会输入什么? def next():print('我在next()函数里...')pre()def pre():print('我在pre()函数里...')>>> ...

  6. 17~19 函数(上)

    17 函数:Python的乐高积木 一.创建一个函数 >>> def MyFirstFunction():print('这是我创建的第一个函数!')print('我表示很鸡冻.... ...

  7. 笨方法学习Python 习题19 函数和变量 ---学习记录

    习题19 函数和变量 #定义cheese_and_crackers函数,参数有括号里的俩 def cheese_and_crackers(cheese_count,boxes_of_crackers) ...

  8. FishC笔记—19 讲 函数:我的地盘听我的

    本期内容详解: 1.函数与过程:过程(procedure)是简单的,特殊且没有返回值的:函数(Function)有返回值 Python严格来说只有函数没有过程 2.局部变量:在局部生效如在函数中定义的 ...

  9. 零基础入门学习Python(19)--函数:我的地盘听我的

    知识点 函数与过程 在许多编程语言中,函数(function)是有返回值的,过程(procedure)是简单.特殊并且没有返回值的.而在Python中,严格来说只有函数没有过程. 例如: >&g ...

最新文章

  1. 链表问题4——反转单向链表
  2. Linux|UNIX下LAMP环境的搭建及常见问题[连载4]
  3. Vue——项目部署到非根目录下的解决方案
  4. $()是有两个参数,第一个是选择器,第二个是作用域
  5. 两个有序数组的中位数—leetcode4
  6. 20145207 《Java程序设计》第4周学习总结
  7. 修改Yarn的全局安装和缓存位置
  8. 线上MYSQL同步报错故障处理总结 实现同步不一致进行邮件报警
  9. 在html中播放链接视频,如何在我的python脚本中使用HTML5在网站链接中播放视频?...
  10. 上门挂画服务_瀑布山水画挂在哪里好 弄懂这2点挂画没烦恼
  11. 功不唐捐,每日一道LeetCode,玉汝于成,终获offer满满!
  12. mysql的root用户无法给普通用户授权问题处理
  13. 9个最新的手机/移动设备jQuery插件
  14. Spark SQL概念学习系列之Spark SQL入门(八)
  15. net.sf.json.JSONArray之fromObject的坑
  16. MS08-067漏洞渗透测试
  17. 荔枝派Zero 全志V3s,NORFlash xt25f128b的移植
  18. 小麦亩产一千八(kela)
  19. SpringMvc下载文件损坏
  20. mysql benchmark tool_使用MYSQL benchmark - DBT2 Benchmark Tool遇到的问题

热门文章

  1. Python如何判断当前时间是否为夏令时?
  2. 物联网:以物为本还是以人为本?
  3. tta部署_TTA、丰源轮胎云平台项目合作交接仪式
  4. Gopher meetup 深圳站 5.27
  5. 网上怎么样可以挣钱,分享几种可以让你在家赚钱的兼职项目
  6. java必备十大技术网站
  7. Python初学者-双人对战小游戏
  8. 全世界游客访问最多的城市,重庆以5.9亿游客量排名第一
  9. 【iOS】自己动手丰衣足食-图片篇
  10. 达芬奇PRO板的FPGA功能学习笔记(一)