函数的定义与调用:
1. 函数必须先定义,后调用
2. 函数在定义阶段,如果有参数,调用阶段也需要给对应的参数
3. 函数在定义阶段只检测语法是否正确,不执行具体的代码功能
4. 函数在调用阶段会执行具体的函数体代码
5. 如何调用函数?# 函数名()
函数的底层原理:
1. 申请一块内存空间,存储函数体代码
2. 把函数体代码绑定给函数名
3. 通过调用函数(函数名())来执行函数体代码
函数的分类:
内置函数:
在python解释器提前存在,可以直接调用
自定义函数:
就是我们自己写的函数
分为三大类:
无参:def func():
print('')
有参:def func(x,y):
print(x,y)
func(1,2)
空函数:def func():
pass
函数的返回值:
# 返回值:函数执行完毕之后,返回的结果
res = my_func1() # 把函数的执行结果赋值给res变量,结果就是None
print(res) # None
# 1. 当函数没有返回值的时候,没有return的时候,返回的是None
# 2. 当函数中只要return关键字的时候,返回的结果仍然是None
# 3. 当return后有数据的时候,写什么就返回什么
# 4. 当return后面跟多个数据的时候,会组织成元组形式返回
# 5. 如果你想返回多个值得时候,最后使用容器类型包一下
# 6. 在函数中,只要遇到return关键字,代码立刻终止执行,一个函数最多只有有一个return关键字
# 7. return 只能出现在函数中。if else中绝对不能出现
函数在调用时可以当参数调用
res = add(add(1,2),10)
print(res)
函数练习题:
# 写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作
# 写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
通过elif判断区分每一个种类,然后再修改res字典中的值
代码的优化:
查看代码
def login():
print('登录')
def transfer():
print('转账功能')
def banlance():
print('查询余额')
def withdraw():
print(‘提现’)
func_dic={
'1':['登录':login], #函数不带为函数的内存地址
'2':[‘转账’:transfer],
'3':[‘查询余额’:check_banlance],
'4':[‘提现’:withdraw]
}
while True:
for k in func_dic:
print(k,func_dic[k][0]) #输出的为指令查找单
choice = input(‘请输入指令’).strip()
if choice in func_dic:
func_dic[choice][1]( ) #v()为调取函数
else:
print('输入的指令不存在')
函数的嵌套:
1.函数的嵌套调用:在调用一个函数的过程中又吊钟其他的函数
def max2(x,y):
if x>y:
return x
else:
return y
def max4(a,b,c,d): #可以把比较的值拆分出来然后再比较
#第一步:比较a,b得到res1
res1 = max2(a,b)
#第二步:比较res1,c得到res2
res2 = max2(res1,c)
#第三步:比较res2,d得到res3
res3 = max2(res2,d)
return res3
闭包函数:
核心点:名字的查找关系是以函数定义阶段为准“”
“闭”函数指的该函数是内嵌函数
“包”函数指的该函数包含对外层函数作用域名字的引用(不是对全局作用域)
def f1():
x=333
def f2():
print(x) x=333
f2()
# 无论外面套多少层,已定义阶段为准,就和套麻袋一样,永远是最里面一层
def f1():
x=3333333
def f2():
print(x)
return f2 #不加括号得到的是f2的内存地址
f = f1() #f1()= f2 #将f2的内存地址传入的f
f() #你得到一个可以随时访问的值,但这个值外面无论如何操作都无法更改
标签:f2,return,函数,func,print,def From: https://www.cnblogs.com/whxx/p/17189066.html