函数

函数的定义与调用:

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() #你得到一个可以随时访问的值,但这个值外面无论如何操作都无法更改

 

posted @ 2023-03-07 18:12  无敌大帅逼  阅读(145)  评论(0)    收藏  举报