一、函数的定义
函数的四个组成部分:
函数名、
函数体、
函数返回值、
函数参数
1、概念:重复利用的工具,可以完成特定功能的代码块,函数是存放代码块的容器
2、定义:
def:声明函数的关键词
函数名fn:使用该函数的依据
函数体:完成功能的代码块
返回值return:功能完成的反馈结果
参数():完成功能需要的条件信息(参数个数可以为0~n个,但()一定不能丢)
3、定义函数的方法:
def 函数名(参数们):
函数体
return‘返回值’
fn直接打印,只能看到函数存放代码的地址 age1:def fn() print('函数的一行代码') print('函数的二行代码') return'函数的返回值' print(fn,id(fn))>>>>打印fn的全部行数体的地址 age2:def fn (money): print('你付了%元钱'%(money)) 使用函数:函数名() fn(10) print("把水喝了") 函数的返回值也称之为函数值,就是函数执行结束后的结果 可以用变量接受|可以直接打印|可以直接使用 msg=fn(10) print(msg)>>>.输出age1全部的函数体 得出结论:函数执行的本质:执行函数体,得到函数返回值
二、函数的操作、使用方法
1、先定义后使用
计算
空函数:项目值出,知道项目有哪些功能,但还没有明确功能体,可以用pass进行函数体填充
def computed():
pass
非空函数:用函数体
def add_num(n1,n2):
'''
:param n1:第一个数
:param n2: 第二个数
:return: 两个数之和
'''
return n1+n2
computed()
res=add_num(10,20)
print(res)
a-50
b=100
print(add_num(a,b))
2、如何使用函数
函数名:拿到行数的地址
函数名():拿到函数的地址,并执行函数中存放的代码块(函数体)*******
函数名(参数):执行函数并传入参数
函数名()执行完毕后,会得到函数的返回值,返回值就跟普通变量一样,可以直接打印、使用、运算
eg:def fn(num): print("传入的num值:%s")
三、函数的分类
1、根据参数列表划分
无参函数:函数体不需要外界提供参数
def start(): print('系统启动') start()
有参函数:函数体需要外界提供参数
def login(usr, pwd): if usr == 'owen' and pwd == '123': print('登录通过') else: print('登录失败') login('owen', '123')
2、从返回值进行划分
空返回
1、没有return的函数
2、空return
def fn1(): print('fn1 run !!!!') res=fn1() print('没有return关键字的返回值:%s'%res) # >>>>输出Noen def fn2(): print('fn2 run!!!1') return return None res=fn2() print('空return关键字的返回值:%s'%res) # >>>>输出Noen
值返回
1、return一个值
2、return多个值
一个值的返回 def add_num(n1, n2): return n1 + n2 print(add_num(10, 15)) def computed(n1, n2): 返回四则运算的结果 r1 = n1 + n2 r2 = n1 - n2 r3 = n1 / n2 r4 = n1 * n2 return [r1, r2, r3, r4] a, b, c, d = computed(50, 25) print(a, b, c, d) 多个值的返回: 本质就是返回装有多个值的元组 def computed_sup(n1, n2): # 返回四则运算的结果 r1 = n1 + n2 r2 = n1 - n2 r3 = n1 // n2 r4 = n1 ** n2 return r1, r2, r3, r4 a, b, c, d = computed_sup(50, 25) print(a, b, c, d) res = computed_sup(50, 25) # 得到的是装有所有结果的元组 print(res)
3、无return函数与空return函数的区别
无return函数与空return函数的区别
空return:可以根据具体情况主动退出函数(像break借束循环一样)
def fn3(msg): print('fn3 第一行逻辑') # msg 信息不正常:''|Noen if msg=='' or msg is None: return # 结束函数 print('msg信息正常:%s'% msg) msg=input('msg:') fn3(msg)
四、函数的嵌套调用
1、定义:在一个函数体重调用另一个函数
2、方法:在解释过程中,不执行函数体,在函数被调用时函数体才被执行
ef fn1 ():
print('fn1 run')
fn2()
def fn2():
print('fn2 run')
fn3()
def fn3():
print('fn3 run')
fn1()
注:在fn1中调用了fn2,所以fn1的逻辑应该在fn2定义之后
案例:用函数实现获取两个数的最大值
def max_2(n1,n2):
if n1>n2:
return n1
return n2
print(max_2(10,20))
用函数实现获取三个数的最大值
def max_3(n1,n2,n3):
m2=max_2(n1,n2)
return max_2(m2,n3)
print(max_3(10,20,30))
用函数实现获取四个数的最大值
def max_4(n1,n2,n3,n4):
m2 = max_2(n1, n2)
return max_3(m2, n3,n4)
print(max_4(10,20,30,40))
五、补充指定文件名的文件复制和函数实现登录注册
1、指定文件们的文件复制
with open('001.jpg','rb') as r,open('100.jpg','wb') as w: for line in r: w.write(line) with open('001.jpg','rb') as r,open('200.jpg','wb')as w: for line in r: w.write(line) def copy_img(target_img): with open('001.jpg','rb')as r ,open('target_img','wb')as w: copy_img('888.jip') copy_img('999.jpg') def copy_file(source,target): ''' :param source:被复制的文件 :param target: 复制得到的文件 :return: ''' with open(source,'rb')as r,open(target,'wb')as w: for line in r: w.write(line) copy_file('cmd.txt','aaa.txt') copy_file('temp.txt','bbb.txt')
2、函数实现登录注册
''' 1.可以循环登录注册,输入1代表选择登录功能,输入2代表注册功能,输入0代表退出,其他输入代表输入有误,重输 2.用户的账号密码信息存放在usr.txt文件中,保证用户注册成功后,重启系统,用户信息仍然保存 3.登录在账号验证通过才输入密码验证登录,账号验证三次失败自动进入注册功能,登录三次验证失败自动退出系统 4.第一次注册,文件写入 账号:密码 信息,再次注册追加写入 |账号:密码 信息 ''' # 获取文件在用户信息 def get_usr_map(): pass # 注册 def register(): print('注册页面') pass # 登录 def login(): print('登录页面') pass # 启动系统 def start(): print("系统启动!") while True: tag=input("""请输入操作指令 0 退出 1 登录 2 注册 》》》: """) if tag.isdigit(): tag=int(tag) if tag==0: break elif tag==1: login() elif tag==2: register() else: print('输入有误,请重新输入') # 启动系统 start()