一.今日主要内容总览(重点)
1.什么是函数?
f(x)=x+1
y=x+1
函数是对功能或者动做的封装
2.函数的语法和定义
def 函数名():
函数体
调用:函数名()
3.关于函数的返回值
return:返回
(1)当程序没写过return,不返回任何结果.若是你非要接收,接收到的是None
(2)当函数写return 值,有一个返回值.
(3)当函数写了 return 值1,值2,值3...... 返回多个结果,多个结果打包成元组
(4)当程序执行到return,函数结束执行
总结:return,中止函数调用
4.函数的参数(部分)
小括号是什么,小括号表示调用,传参
1.什么是参数:参数是给函数传递的信息
形参:在函数us恒明的位置写的变量
1.位置参数
2.默认值
3.动态传参(明天讲解), *,**
实参:在函数调用的时候给函数传递的具体值
1.位置参数
2.关键字参数
3.混合:位置,关键字
传参:把实参给形参的过程
二.今日内容大纲
1.什么是函数?
2.函数的语法和定义
3.关于函数的返回值
4.函数的参数(部分)
内容详解:
1.什么是函数?
(1)引子
约妹子
print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影')
开心,上瘾,再来一次
print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影')
为了减小代码的重复
while循环也不行
2.函数的语法和定义
(1)初尝函数
先计划一下,约应该怎么约...而后在须要的时候吧这个事情拿出来作一次.
先定义好一个函数,后期须要用,再调用就能够直接用了了
理解:咱们能够使用函数来定义一个动做
define 定义
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') #调用函数 yue() print('上班') print('上班') print('上班') yue()
结果:git
拿出手机
打开陌陌
找一个心仪的小姐姐
有没有时间啊,聊一聊人生
一块儿出来吃饭唱歌,看电影
上班
上班
上班
拿出手机
打开陌陌
找一个心仪的小姐姐
有没有时间啊,聊一聊人生
一块儿出来吃饭唱歌,看电影
下面的程序对比上边的程序微信
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') #调用函数 print('上班') #先打印这一行 yue() print('上班') print('上班') print('上班') yue()
#避免了重复写代码,也就是重复造轮子
(2)
def yue(): print('你好') print(yue) #16位 结果:内存地址:<function yue at 0x000001C666601E18>
函数名字是一个内存地址,内部的代码块存储在内存地址内
3.关于函数的返回值
(1)
return
继续约#超级重点
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') #获得一个结果 return '小姐姐' yue()
这里调用的函数,返回值就返回给这里
谁调用就返回给谁,没有人调用就不返回,这里就是这种状况,不会返回'小姐姐'
(2)
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') #获得一个结果 return '小姐姐' ret=yue() #这里调用的函数,返回值就返回给这里,结果就会有"小姐姐"了 print(ret)
(3)
return多个字符串,调用的结果除原来的代码块,还有return的多个值,以元组的形式返回
同时返回多个结果,返回的是元组
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') #获得一个结果 return '小姐姐','大妈','流浪汉' #同时返回多个结果,返回的是元组 ret=yue() #这里调用的函数,返回值就返回给这里 print(ret)
结果:app
结果: 拿出手机 打开陌陌 找一个心仪的小姐姐 有没有时间啊,聊一聊人生 一块儿出来吃饭唱歌,看电影 ('小姐姐', '大妈', '流浪汉')
(4)
当代码块下面有多个return时,最终调用的返回,只返回第一个返回值
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') #获得一个结果 return '小姐姐' #只能返回小姐姐,其余的都不会执行 return'大妈' return'流浪汉' ret=yue() #这里调用的函数,返回值就返回给这里 print(ret)
(5)
函数的返回值问题总结:
函数能够有返回值,也能够没有返回值
函数若是没有返回值,在函数最后执行完毕的时候会默认返回None
在函数中只写了return,可是没有写返回值
在函数中写了return 值, 返回一个结果
在函数中写 return 值1,值2,值3 ,最终返回值会以元组形式返回
def yue(): #描述你的动做 print('拿出手机') print('打开陌陌') print('找一个心仪的小姐姐') return None #返回的是None,后面的就再也不执行了 print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') ret=yue() print(ret)
结果:函数
拿出手机
打开陌陌
找一个心仪的小姐姐
None
(6)
练习:写一个函数,在函数内部,要求用户输入两个数,返回大的那个数
个人两种解法
#解法一: def big(): a=1 b=2 if a>b: #普通写法 print(a) else: print(b) big() #解法二: def big(): a=1 b=2 print(a if a>b else b) #三元运算符 big()
#老师讲解1 def func():#定义函数 a=int(input('请输入第一个数:')) b=int(input('请输入第二个数:')) if a>b: return a else: return b ret=func() print(ret) #老师讲解2 ,#只有Python是用这种:三元运算符或者叫三目运算符 #模式:值1 if 条件 else 值2 def func():#定义函数 a=int(input('请输入第一个数:')) b=int(input('请输入第二个数:')) #三目运算 c=a if a>b else b #c装的是a,b中大数 #模式:值1 if 条件 else 值2 return c ret=func() print(ret)
4.函数的参数(部分)
(1)回顾上边讲的
def chi(): print('池什么') print('酸菜鱼') chi() #小括号表示调用
(2)
def yue(tools): #描述你的动做 print('拿出手机') print('打开%s'%tools) print('找一个心仪的小姐姐') print('有没有时间啊,聊一聊人生') print('一块儿出来吃饭唱歌,看电影') yue('微信') yue('探探') yue('陌陌')
上边定义的函数,若是调用的时候,没有参数,则会报下面的错误 # yue() #报错: yue() missing 1 required positional argument: 'tools'
(3)
def chi(zhushi,fushi,tang,tiandian): print("主食:%s"%zhushi) print('副食:%s'%fushi) print('汤:%s'%tang) print('甜点:%s'%tiandian) # chi('大米饭','锅包肉',tiandian='哈根达斯','酸辣汤') #错误写法,关键字必须在位置参数后面 chi('大米饭','锅包肉',tiandian='哈根达斯',tang='酸辣汤') #正确写法 #规则,调用时,先写位置参数,再写关键字参数
(4)#练习
def regist(name,age,edu,gender): print('name:',name) print('age:',age) print('edu:',edu) print('gender:',gender) regist('赵玉冰','19','中专','男') regist('韩志远','25','本科','男') regist('董忠浩','25','高中','男') regist('刘力','21','本科','女')
(5)总结
需求:根据你指定的APP去约
在括号内的东西叫参数
在函数声明的位置,写的参数叫形参
在函数调用的地方,写的参数叫实参
传参:把实参传递给形参的过程叫作传参
在函数调用的时候,必须保证全部的参数都有值
yue() #错误的,必须保证有参数
1.关于实参:
(1)位置参数, 按照位置给形参传递信息
(2)关键字参数,按照形参声明的变量名进行传递
(3)混合参数.位置参数+关键字(规定)
2.形式参数(2):#今天只说两个简单的
1.位置参数,按照位置声明的变量
2.默认值参数
3.当默认值和位置参数同时存在的时候,规定:默认值必须写在后面
4.动态传参(明天)
总结:全部带等号的,都写在后面
今日做业:
2,写函数,检查获取传入列表或元组对象的全部奇数位索引对应的元素,
并将其做为新列表返回给调用者。
def fun(a): lst=[] for i in range(len(a)): if i%2==1: lst.append(a[i]) return lst k=fun([1,2,3,4,5,6,7,0]) print(k) a=fun((1,2,3,4,5,6,7))
3,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def func(a): if len(a)>5: print('长度大于5') else: print('长度小于等于5') func('skt') func((1,2,3,4,5,6,7)) func([1,2,3,4,5,6,7,8,9])
4,写函数,检查传入列表的长度,若是大于2,将列表的前两项内容返回给调用者。
def func(a): if len(a)>2: # return a[0],a[1] #以元组形式返回给调用者 return a[0:2] #以列表形式返回给调用者 a=func([1,2,3]) print(a)
5,写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其余内容的个数,并返回结果。
def func(canshu): num=0 zimu=0 kongge=0 qita=0 for i in canshu: if i.isdigit(): num+=1 elif i.isalpha(): zimu+=1 elif i is " ": kongge+=1 else: qita+=1 return '数字:',num,'字母:',zimu,"空格:",kongge,'其余:',qita #必定要注意return放置的位置 s=func(' 1w3v') print(s)
6,写函数,接收两个数字参数,返回比较大的那个数字。
def func(): a=int(input('请输入一个数:')) b=int(input('请输入另外一个数:')) if a>b: return a else: return b k=func() print('返回值是:',k)
7,写函数,检查传入字典的每个value的长度,若是大于2,那么仅保留前两个长度的内容,
并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func(a): for i in a: a[i]=a[i][0:2] return a s=func({"k1": "v1v1", "k2": [11,22,33,44]}) print(s) #若是长度小于2不操做
8,写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,
此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33]
返回的字典为 {0:11,1:22,2:33}。
def func(lst): dic={} for i in range(len(lst)): dic[i]=lst[i] return dic a=func([11,22,33]) print(a)
9,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。
用户经过输入这四个内容,而后将这四个内容传入到函数中,此函数接收到这四个内容,
将内容追加到一个student_msg文件中。
#方法一:个人想法 def func(name,sex,age,xueli): with open('student_msg',mode='a',encoding='utf-8') as f: f.write(name) #注意,这个write只能接收一个参数,且必须是字符串类型的 f.write(sex) f.write(age) f.write(xueli) func('小冬瓜\t','男\t','28\t','小学本科\t')
#方法二:另外一种想法 def w(name,sex,age,edu): f = open("student_msg",mode='w',encoding="utf-8") f.write("姓名:%s\n性别:%s\n年龄:%s\n学历:%s" % (name,sex,age,edu)) #一句话搞定写入,格式化 f.flush() f.close() w("corn","男",21,"专科")
10,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,若是遇到女学生,则把性别输入女。
方法一:
while 1: a=input('请输入要输入的姓名:') b=input('请输入要输入的性别:') c=input('请输入要输入的年龄:') d=input('请输入要输入的学历:') if a.upper()=="Q"or b.upper()=="Q"or c.upper()=="Q"or d.upper()=="Q": break def func(name,age,xueli,sex='男'): with open('student_msg',mode='a',encoding='utf-8') as f: f.write(name) #注意,这个write只能接收一个参数,且必须是字符串类型的 f.write(sex) f.write(age) f.write(xueli) func(a,b,c,d)
方法二:
while 1: s=input('要输入的格式(姓名,年龄,学历,性别)或者输入Q退出:') if s.upper()=='Q': break a,b,c,d=s.split(',') def func(name,age,xueli,sex='男'): with open('student_msg',mode='a',encoding='utf-8') as f: f.write(name) #注意,这个write只能接收一个参数,且必须是字符串类型的 f.write(sex) f.write(age) f.write(xueli) func(a,b,c,d)
方法三:
def func(name, age,edu,sex ="男"): f = open("student.msg", mode="a", encoding="utf-8") f.write(name+"_"+str(age)+"_"+sex+"_"+edu+"\n") f.flush() f.close() while 1: content = input("请问. 是否要录入学生信息, 输入q退出:") if content.upper() == "Q": break n = input("请输入名字:") a = input("请输入年龄:") s = input("请输入性别:") e = input("请输入学历:") if s == "": func(n,a,e) else: func(n,a,e,s)
11,写函数,用户传入修改的文件名,与要修改的内容,执行函数,
完成整个文件的批量修改操做(升级题, 此题认真阅读和理解. 应该有3个参数才对)。
def mod(r,m,n): import os with open(r,mode="r",encoding="utf-8")as f, \ open("a1.txt",mode="w",encoding="utf-8")as f1: for line in f: s = line.replace(m,n) f1.write(s) os.remove(r) os.rename("a1.txt",r) mod("a.txt","我很差!","我很好!")
12,写一个函数完成三次登录功能,再写一个函数完成注册功能(升级题)
参考网上的操做 def dl(): count = 3 while count > 0: account = input("请输入你的帐号:") password = input("请输入你的密码:") count -= 1 for i in dic: if account == i and password ==dic[i]: print("登陆成功") return print('帐号或者密码错误,请从新输入(还剩%s次机会):' % count) x = input("按Q返回上一菜单,其余键继续:") if x.upper().strip() == "Q": return def login(): while 1: account = input("请输入你注册的帐号(6位以上):") password = input("请输入你的密码:") password1 = input("请从新输入一遍你的密码:") if len(account) <= 6 or account.isdigit() == False: print("帐号不合法!请从新输入!") elif password == password1: dic[account] = password print("恭喜你,注册成功!") return else: print("你输入的两次密码不匹配,请从新输入") x = input("按Q返回上一菜单,其余键继续:") if x.upper().strip() == "Q": break dic = {} menus = ("1, 登陆", "2, 注册", "3, 退出") while 1: for item in menus: print(item) s = input('请输入您要选择的菜单项:') if s == '1': dl() elif s == "2": login() elif s == "3": break else: print("指令错误!")
#利用文件操做来进行操做(有时间再升级成这样)
明日默写。①,return的做用。②,传参的几种方法,每一个都简单写一个代码。如,实参,按位置传参。def func(x,y):Passfunc(‘a’,’b’)