举的例子也都是带有print的函数定义
但是有个问题就出现了:我不想打印这个函数处理后的参数
我想拿到这个参数然后做后续的事情
我应该怎么办呢?
这就需要一个关键字 return 来解决这个问题了
return:回来 回去 返回 带回……(又学个英语单词)
那我们就能看出来,这个词的意思就是从函数当中把参数拿回来的意思
对吧!
那么原先的函数我就可以这么写:
def func(x, y, z):
a = "输入的三个数为%s,%s,%s" % (x, y, z)
return a
func(1, 2, 3)
print(func(1, 2, 3))
第一个执行了func()函数,返回了a,但是没有打印出来
第二个执行了func()函数,返回了a,打印了出来
这样 我想打印出来就打印出来,我不想打印就不打印,就很舒服!
很简单的一个小知识点
但是却有一个小陷阱!
函数执行过程中,遇到了 return 那就不执行接下来的语句,直接退出函数。
(想想还有哪个像这个??循环里的break)
给你举个例子:
def func(x, y, z):
a = "输入的三个数为%s,%s,%s" % (x, y, z)
return a
print("这句话执行不出来")
print(func(1, 2, 3))
明白了吧!
当然 有的时候也不一定要指定返回值,那我们看看这东西会返回什么
def func(x, y, z):
a = "输入的三个数为%s,%s,%s" % (x, y, z)
# return a
# print("这句话执行不出来")
print(func(1, 2, 3))
OK,那我们大概可以知道了,没有指定返回值,那就返回None!
说作用域那可就是相当抽象了
作用域就相当于你能够行使权利的区域
你的员工卡高级,你就能去公司更高层的办公室
你的员工卡低级,那你就只能在你的一亩三分地呆着了
员工卡就类比成程序中的变量
那怎么设置程序中“员工卡”的等级呢?
这就是函数的作用域了
话不多说,直接上代码:(1.1)
name = "jevious"
def change():
print(name)
change()
我在 change() 函数中调用这个name,能调用吗?
执行了!可以!会输出这个 jevious
那我可以修改这个变量吗?
name = "jevious"
def change():
name = "poddy"
print(name)
change()
打印的是什么呢?(自己试试 打印的是 poddy)
那,这真的将name变量修改了吗?(1.2)
name = "jevious"
def change():
name = "poddy"
print(name)
change()
print(name)
两个结果,说明name没有被修改
那是怎么回事呢?
不卖关子,直接 tell you
在函数外面的name 是全局变量
在函数内部的name 是局部变量
当函数在自己一片区域里发现到自己需要的变量就用自己的变量(1.2)
当函数在自己区域里没有找到想要的变量就去外面找需要的变量(1.1)
所以说,在局部不能修改全局的变量
看到的修改其实只是在局部新建了变量
怎么验证呢?python给我们提供了两种方法
locals 和 globals
name = "jevious"
def change():
name = "poddy"
age = "22"
print(locals()) # 局部变量
print(globals()) # 全局变量
change()
print(name)
下面的你不用都看,因为全局的比较多,但是你会在里面找到‘name‘: ‘jevious‘
但是你却找不到age的任何信息
知识点就有点杂,慢慢积累被:
1、在函数中定义的是局部变量,在程序一开始定义的是全局变量
2、全局变量的作用域是整个程序,局部变量作用域是定义该变量的函数
3、变量的查找顺序是局部变量>全局变量
4、当全局变量与局部变量同名时,在函数里,局部起作用;在其他地方,全局起作用
5、在函数里不能直接修改全局变量
就有艮的,就想在函数中定义全局变量
global
用这个关键字,先声明,再赋值,这样就是全局的了
# name = "jevious"
def change():
global name
name = "poddy"
age = "22"
print(locals()) # 局部变量
print(globals()) # 全局变量
change()
print(name)
自己打印结果,我可不想像你这么艮,而且也不建议这么使用
那你丫非得这么艮?那你开心就好!
原文:https://www.cnblogs.com/jevious/p/11131748.html