一.今日主要内容总览(重点)
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天 初识函数的更多相关文章

  1. 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from

    一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...

  2. 巨蟒python全栈开发-第10天 函数进阶

    一.今日主要内容总览(重点) 1.动态传参(重点) *,** *: 形参:聚合 位置参数*=>元组 关键字**=>字典 实参:打散 列表,字符串,元组=>* 字典=>** 形参 ...

  3. 巨蟒python全栈开发linux之centos1

    1.linux服务器介绍 2.linux介绍 3.linux命令学习 linux默认有一个超级用户root,就是linux的皇帝 注意:我的用户名是s18,密码是centos 我们输入密码,点击解锁( ...

  4. 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理

    一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...

  5. 巨蟒python全栈开发linux之centos6

    1.nginx复习 .nginx是什么 nginx是支持反向代理,负载均衡,且可以实现web服务器的软件 在129服务器中查看,我们使用的是淘宝提供的tengine,也是一种nginx服务器 我们下载 ...

  6. 巨蟒python全栈开发linux之centos3

    1.作业讲解 (1)递归创建文件夹/tmp/oldboy/python/{alex,wusir,nvshen,xiaofeng} 下面中的路径没有必要换,在哪里创建都行,根目录下或者tmp目录下或者其 ...

  7. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

  8. 巨蟒python全栈开发-第11阶段 ansible_project2

    一个NB的网站: https://www.toolfk.com/ CDN:将用户的需求送到最近的节点:内容分发网络 有些是专门做CDN的工具 常用的markdown是需要知道的,短信有字数限制. we ...

  9. 巨蟒python全栈开发-第4天 列表&元组&range

    今日内容大纲 1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操 ...

随机推荐

  1. epoll反应堆模型

    ================================ 下面代码实现的思想:epoll反应堆模型:( libevent 网络编程开源库 核心思想) 1. 普通多路IO转接服务器: 红黑树 ― ...

  2. 自己动手写CPU之第五阶段(2)——OpenMIPS对数据相关问题的解决措施

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第16篇.我尽量每周四篇 5.2 OpenMIPS对数据相关问题的解决措施 OpenMIPS处理器採用数据前推的方法来解决流水 ...

  3. windows server 2003中端口默认不能使用问题

    问题:在windows server 2003中IIS6.0新建站点,给了一个新端口(非80),然后配置好后不能访问 解决方案:系统内置防火墙需要添加对应端口,如下图:     即解决.

  4. 170. Rotate List【medium】

    Given a list, rotate the list to the right by k places, where k is non-negative.   Example Given 1-& ...

  5. 0055 <mvc:default-servlet-handler />不能同时访问静态资源和动态资源的问题

    刚才在折腾的时候,发现applicationContext.xml中配置了<mvc:default-servlet-handler />后,能访问静态资源,却不能访问动态资源了:注释掉之后 ...

  6. python 练习题1--打印三位不重复数字

    题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码 ...

  7. The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器

    标签 下面的部分概述了常见的Django标签. if/else {%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子: ...

  8. 爬虫 (5)- Scrapy 框架简介与入门

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  9. 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 ...

  10. 第一百五十四节,封装库--JavaScript,表单验证--提交验证

    封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...