巨蟒python全栈开发-第9天 初识函数
一.今日主要内容总览(重点)
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.混合:位置,关键字
传参:把实参给形参的过程
DAY9-初识函数
二.今日内容大纲
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()
结果:
拿出手机
打开陌陌
找一个心仪的小姐姐
有没有时间啊,聊一聊人生
一起出来吃饭唱歌,看电影
上班
上班
上班
拿出手机
打开陌陌
找一个心仪的小姐姐
有没有时间啊,聊一聊人生
一起出来吃饭唱歌,看电影
下面的程序对比上边的程序
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)
结果:
结果:
拿出手机
打开陌陌
找一个心仪的小姐姐
有没有时间啊,聊一聊人生
一起出来吃饭唱歌,看电影
('小姐姐', '大妈', '流浪汉')
(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('赵玉冰','','中专','男')
regist('韩志远','','本科','男')
regist('董忠浩','','高中','男')
regist('刘力','','本科','女')
(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 == '':
dl()
elif s == "":
login()
elif s == "":
break
else:
print("指令错误!")
#利用文件操作来进行操作(有时间再升级成这样)
明日默写。
①,return的作用。
②,传参的几种方法,每个都简单写一个代码。
如,实参,按位置传参。
def func(x,y):
Pass
func(‘a’,’b’)
巨蟒python全栈开发-第9天 初识函数的更多相关文章
- 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from
一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...
- 巨蟒python全栈开发-第10天 函数进阶
一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...
- 巨蟒python全栈开发linux之centos1
1.linux服务器介绍 2.linux介绍 3.linux命令学习 linux默认有一个超级用户root,就是linux的皇帝 注意:我的用户名是s18,密码是centos 我们输入密码,点击解锁( ...
- 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理
一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...
- 巨蟒python全栈开发linux之centos6
1.nginx复习 .nginx是什么 nginx是支持反向代理,负载均衡,且可以实现web服务器的软件 在129服务器中查看,我们使用的是淘宝提供的tengine,也是一种nginx服务器 我们下载 ...
- 巨蟒python全栈开发linux之centos3
1.作业讲解 (1)递归创建文件夹/tmp/oldboy/python/{alex,wusir,nvshen,xiaofeng} 下面中的路径没有必要换,在哪里创建都行,根目录下或者tmp目录下或者其 ...
- 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查
内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...
- 巨蟒python全栈开发-第11阶段 ansible_project2
一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...
- 巨蟒python全栈开发-第4天 列表&元组&range
今日内容大纲 1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操 ...
随机推荐
- epoll反应堆模型
================================ 下面代码实现的思想:epoll反应堆模型:( libevent 网络编程开源库 核心思想) 1. 普通多路IO转接服务器: 红黑树 ― ...
- 自己动手写CPU之第五阶段(2)——OpenMIPS对数据相关问题的解决措施
将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第16篇.我尽量每周四篇 5.2 OpenMIPS对数据相关问题的解决措施 OpenMIPS处理器採用数据前推的方法来解决流水 ...
- windows server 2003中端口默认不能使用问题
问题:在windows server 2003中IIS6.0新建站点,给了一个新端口(非80),然后配置好后不能访问 解决方案:系统内置防火墙需要添加对应端口,如下图: 即解决.
- 170. Rotate List【medium】
Given a list, rotate the list to the right by k places, where k is non-negative. Example Given 1-& ...
- 0055 <mvc:default-servlet-handler />不能同时访问静态资源和动态资源的问题
刚才在折腾的时候,发现applicationContext.xml中配置了<mvc:default-servlet-handler />后,能访问静态资源,却不能访问动态资源了:注释掉之后 ...
- python 练习题1--打印三位不重复数字
题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码 ...
- The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器
标签 下面的部分概述了常见的Django标签. if/else {%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子: ...
- 爬虫 (5)- Scrapy 框架简介与入门
Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...
- Using Fast Weights to Attend to the Recent Past
Ba, Jimmy, et al. "Using Fast Weights to Attend to the Recent Past." Advances In Neural In ...
- 第一百五十四节,封装库--JavaScript,表单验证--提交验证
封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...