6.3 我的地盘听我的
6.3.1 函数和过程 Python严格来说只有函数,没有过程。
函数是干完事必须写报告的“苦逼”
过程是干完事拍拍屁股一走了之的“小混蛋”
代码研究如下:
def myfun():
print("Hello~")
print(myfun())
----------------- 执行结果 -----------------
Hello~
None
==============================================
函数没有return 但是仍旧返回了一个None
结论:所有的函数都有返回值。
6.3.2 再谈谈返回值
Python可以动态确定函数的类型,能返回不同类型的值。
Python没有变量,只有名字。Python能同时返回多个值。
def test():
return [1,"小甲鱼",3.14]
print(test())
----------------------------------------------
上面用列表方式打包多种类型的值一次性返回,也可以
直接用元组的形式返回多个值,如下代码:
def myfun():
return 1,'小甲鱼',3.14
print(myfun())
---------------------------------------------
(1, '小甲鱼', 3.14)
6.3.3 函数变量的作用域(局部变量 和 全局变量)
代码如下:
def suanzhang(jiage,rate):
zuizhongjiage=jiage*rate
return zuizhongjiage
jiujiage=float(input("请输入原价:"))
rate=float(input("请输入折扣率:"))
xinjiage=suanzhang(jiujiage,rage)
print("打折后的价格是:",xinjiage)
----------------------------------
请输入原价:100
请输入折扣率:0.8
打折后的价格是: 80.0
=====================================================
函数内的称为局部变量 如 jiage rate zuizhongjiage
函数外的成为全局变量 如 jiujiage rate xinjiage
========================================================
修改代码
def suanzhang(jiage,rate):
zuizhongjiage=jiage*rate
print("这里试图打印全局变量jiujiage的值:",jiujiage)
return zuizhongjiage
jiujiage=float(input("请输入原价:"))
rate=float(input("请输入折扣率:"))
xinjiage=suanzhang(jiujiage,rage)
print("打折后的价格是:",xinjiage)
-------------------------------------------------------------
请输入原价:100
请输入折扣率:0.85
这里试图打印全局变量jiujiage的值: 100.0
打折后的价格是: 85.0
===============================================================
总结:你可以在函数肆无忌惮的访问一个全局变量,但是如果试图修改它,
就会出现奇怪的现象!!!!!!!!!!
def suanzhang(jiage,rate):
zuizhongjiage=jiage*rate
jiujiage=10 #修改全局变量
print("在局部变量中修改后的jiujiage的值:", jiujiage)
return zuizhongjiage
jiujiage=float(input("请输入原价:"))
rate=float(input("请输入折扣率:"))
xinjiage=suanzhang(jiujiage,rate)
print("打折后的价格是:",xinjiage)
-------------------------------------------------------------
请输入原价:100
请输入折扣率:0.8
在局部变量中修改后的jiujiage的值: 10
打折后的价格是: 80.0
================================================================
结论:如果在函数内部试图修改全局变量,那么会创建新的局部变量替代,
名字和全局变量相同。但是真正的全局变量纹丝不动,所以与预期不同。
拓展:1.如果想在函数里去修改全局变量的值,有办法实现么?yes
2.如果想在函数里嵌套定义一个新的函数,可以么?yes
以上问题的答案都是肯定的,将在下一节学习这些内容。