一.函数的返回值 return
return: 自定义返回值,返回到哪里? 返回到函数的[调用处]
1.return 后面可以跟上六个标准数据类型,除此之外,可以跟上 类对象,函数,如果不写return,默认返回None
2.return 如果执行了return,意味着,return后面的所有代码,通通不执行,函数终止了
#(1)return 后面的数据类型
#例:
def func():
#return 1 #整型
#return 3.14 #浮点型
#return True #bool类型
#return 4j #复数
#return [1,2,3,4] #列表
return {"a":1,"b":2} #字典
res = func() # res = {"a":1,"b":2}
print(res)
#(2)如果不写return,默认返回None
def func():
a = 1
res = func()
print(res) #None
#(3) 执行完return之后,函数立刻终止,后面的代码不执行
#例:
def func():
print("执行到1")
print("执行到2")
return 1
print("执行到3")
print("执行到4")
return 2
res = func()
print(res)
结果:
执行到1
执行到2
1
#(4)计算器
#例:
print("<------------------->")
def calc(sign,num1,num2):
if sign == "+":
res = num1 + num2
elif sign == "-":
res = num1 - num2
elif sign == "*":
res = num1 * num2
elif sign == "/":
if num2 == 0:
return "大兄弟,除数不能为0"
res = num1 / num2
else:
return "不会,别问我!!!!!!你是个有趣的灵魂."
return res
res2 = calc("^",5,0)
print(res2)
print("=============")
res3 = calc("+",5,32)
print(res3)
结果为:
不会,别问我!!!!!!你是个有趣的灵魂.
=============
37
二.函数的使用
#python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为返回值,叫第一类对象,其他语言功能有限
#例:
def func():
print(1)
#输出:1
1.函数名是个特殊的变量,可以当做变量赋值
#变量的赋值操作
func2 = func
func2() #func()
#动态的销毁变量
del func2 #del 关键字 用来删除变量的
#func2() #error
2.函数名可以作为容器类型数据的元素
print("<=============>")
def func1():
print(1)
def func2():
print(2)
def func3():
print(3)
def func4():
print(4)
#也可以这样:法一:
#lst = [func1(),func2(),func3(),func4()]
#for i in lst:
# i
结果为:
1
2
3
4
#法二:
lst = [func1,func2,func3,func4]
for i in lst:
#print(i)
i() #函数的调用
结果为:
1
2
3
4
3.函数名可以作为函数的参数
#例1:
def func(a): #a = func2
res = a()
print(res)
def func2():
return 123
func(func2)
#结果解析:
#func2 => 123 => res = 123
4.函数名作为函数的返回值
#例:
def func(a): #a =>
return a
def func2():
return 456
#函数的调用
res = func(func2) #func2是一个函数地址
print(res) #的地址
total = res() #res() ==> func2()
print(total)
结果为:
<function func2 at 0x00000000027310D0>
456
#__doc__或者help查看文档
#(1)help
#help (print)
#(2)__doc__魔术属性
res = print.__doc__
print(res)
#(3)自定义函数文档
print("-==================")
def kao_qiezi(qimin):
'''
功能:告诉你如何做茄子
参数:是一个器皿
返回值:返回烧烤状态
'''
print("从中间抛开,扔到烧烤架子上面")
print("扔胡椒面,扔孜然,扔蒜蓉,扔香菜")
print("用一个%s来盛放" %(qimin))
return "这个茄子做好了"
kao_qiezi("盘")
print("====-------=======")
help(kao_qiezi)
print('4567==============')
res =kao_qiezi.__doc__
print(res)
结果为:(第一个输出函数的结果,第二和第三输出都是帮助文档内容)
从中间抛开,扔到烧烤架子上面
扔胡椒面,扔孜然,扔蒜蓉,扔香菜
用一个盘来盛放
====-------=======
Help on function kao_qiezi in module __main__:
kao_qiezi(qimin)
功能:告诉你如何做茄子
参数:是一个器皿
返回值:返回烧烤状态
==================
功能:告诉你如何做茄子
参数:是一个器皿
返回值:返回烧烤状态
三.局部变量 与 全部变量
局部变量:在函数内部声明的变量就是局部变量
全局变量:在函数外部声明的变量或用global关键字在函数内部声明的变量
作用域:作用的范围
局部变量:作用范围在函数的内部
全局变量:作用范围横跨整个文件
1.局部变量的获取和修改
def func():
a = 1
#获取局部变量
print(a)
#修改局部变量
a = 2
print(a)
func()
2.全局变量的获取和修改
#例1:
c = 15
#获取
#修改
c = 78
print(c)
#在函数内部通过global 修改全局变量
def func():
#如果不加global c 只能获取 不能修改
#加了global c 告诉系统在函数内部允许修改全局变量c
global c
print(c)
c = 90
func()
print("======全局变量=====")
print(c)
结果:
78
78
======全局变量=====
90
#例2:
#在函数内部通过global 定义全局变量
def func():
global ff
ff = 908
print(ff)
func()
print(ff)
输出:
908
908
python特有:
如果外部存在该全局变量,那么利用golbal关键字,可以允许在函数内部修改全局变量
如果外部不存在该全局变量,那么利用global关键字,可以允许在函数内部定义全局变量
在使用global 关键字的时候,一般写在函数内部的第一行
四.locals() 和 globals()
#locals 和 globals
1.locals 获取当前作用域的所有变量
locals 如果在函数外面,获取locals()返回值打印之前,所有的内容
locals 如果在函数的里面,获取locals调用之前,所有的内容
#例1:
#获取打印返回值之前的所有内容
a = 10
b = 20
res = locals()
c = 20
print(res)
d = 30
运行后可知d没有被存到locals()的内存中c是有的,如下为res的打印,是一个字典,没有d的键值对:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000179AD15C2B0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/pystu/pystudy/Knight/test.py', '__cached__': None, 'a': 10, 'b': 20, 'res': {...}, 'c': 20}
#例2:
#获取locals调用之前的所有的内容
def func():
f1 = 11
f2 = 12
res = locals()
f3 = 13
print(res)
func()
输出的结果:(f3没有到res内存中的)
{'f2': 12, 'f1': 11}
2.globals 只获取全局变量(无论在函数内外都只获取全局变量)
globals 如果在函数的外面,获取globals() 返回值打印之前,所有内容
globals 如果在函数的里面,获取globals调用之前,所有的内容
#例1:
a = 15
b = 15
res = globals()
c = 26
print(res)
d =27
#res的结果中,有c 没有d
#例2:
z1 = 5
z2 = 6
def func():
f1 = 1
f2 = 2
f3 = 3
res = globals()
f4 = 6
print(res)
z4 = 8
func() #res = globals()
z3 = 7
#因为f1,f2,f3,f4是局部变量所以都没有,然后是获取打印之前的所以没有z3
3.globals 动态创建全局变量
globals 返回的是系统的 全局命名空间的字典 在空间里面放的全局变量
#例:
dic = globals()
print(dic,type(dic))
dic['wangwen'] = 188
print(dic['wangwen'])
#已经在dic字典中了
#例2:
#globals 可以批量创建全局变量
def func():
res = globals()
for i in range(5):
res["a%d" % (i)] = i
'''
"a%d" % (i) #字符串的格式化
res['a0'] = 0
res['a1'] = 1
res['a2'] = 2
res['a3'] = 3
res['a4'] = 4
'''
func()
print(a0)
print(a1)
print(a2)
print(a3)
print(a4)