函数 (函数的命名规则和变量一样:①是由字母,数字,下划线组成②开头不是数字,更不能是纯数字③不能是关键字④不要用中文⑤要有意义⑥区分大小写⑦不要太长⑧推荐驼峰和下划线格式)
一.函数的含义
先定义一个事情或者功能,等到需要的时候直接去用,这列定义的一个东西就是函数
函数的语法;
def 函数名(形参):
函数体
函数名(实参)
函数就是对代码块和功能的封装和定义
二.函数的定义
例如: 步骤分为4步骤: ①先定义def 函数名 ②调用函数 ③准备执行函数 ④ 执行函数
#首先定义一个功能叫chi() ===> (函数名)
def chi():
print("首先,打开手机") 中间print部分是函数体,代码块
print("打开手机美团") (函数被执行后要执行的代码块)
print("选择一家餐厅")
print("点餐") ==>当函数最后一句话完成的时候,函数完成
chi() =====>函数的调用 #执行函数 当函数执行完毕,表示当前本次chi()执行完毕
print("减肥")
chi()
三.函数的返回 (return) 是要函数执行到return,函数就会停止 (return 返回值 当函数结束的时候,给调用者一个结果)
例如:
def chi():
print("首先,打开手机")
print("打开美团外卖")
print("点餐")
print("吃饭")
return "减肥" ====>return在这里返回了一个结果,就是做这件事情之后的结果是什么
ret = chi()
print(ret)
函数的返回主要有四个方面的总结:
1.每个函数如果在函数中不写return,默认返回None
例如:
def chi():
print("洗菜")
print("切菜") 洗菜
print("做饭") ====>切菜
做饭
ret = chi() None
print(ret)
2.每个函数中如果在函数中的return后面什么都不写 默认返回None值
例如:
def chi():
print("洗菜")
print("切菜") 洗菜
print("做饭") ======>切菜
return 做饭
ret = chi() None
print(ret)
3.return后面只写一个值,则调用者可以接收到一个结果
例如:
def chi()
print("洗菜") 洗菜
print("切菜") 切菜
print("做饭") ===>做饭
return "刷碗" 刷碗
ret = chi()
print(ret)
4.如果return后面写了多个结果,则调用者可以接收到一个元组(tuple),调用者可以直接解构成多个变量
例如:
def chi()
print("洗菜") 洗菜
print("切菜") 切菜
print("做饭") 做饭
return "收拾","刷碗","休息" =====> 收拾
a,b,c = chi() ret = chi() 刷碗
print(a) print(ret) (这个打印出来的是个元组) 休息
print(b)
print(c)
四.函数的参数 (在函数执行的时候给函数传递的信息)
函数的参数个数是没有要求的,但是在运行的时候,形参与实参要匹配,按照位置把实参赋值给形参
(1)站在实参的角度上有三个参数:①位置参数②关键字参数③混合参数
形参(在函数声明的位置,声明出来变量)
①位置参数
例如:
def chi(fangshi):
print("打开手机")
print("打开%s"软件" % fangshi)
print("点餐") ======>打印两边chi()函数 美团外卖和饿了么各执行一次
chi("美团外卖") 实参(在函数调用的时候,实际你给的函数传递的值)
chi("饿了么")
②关键字参数(形参) 在实参调用的时候,可以指定参数的值是多少
例如: (按照名称给形参赋值)
def chi(a,b,c):
print(a)
print(b) =====> a = 2,b = 3,c = 1
print(c)
fn(1,2,3)
fn(b = 3,a = 2,c = 1)
③混合参数 顺序(先写位置参数,后写关键字参数,否则会报错)
例如:
def gn(name,age,sex,address,hobby)
print("姓名是%s,年龄是%s,性别是%s,家住地址是%s,爱好是%s" % (name,age,sex,address,hobby))
gn("刘怀源",22,"女","济源市","美食") (位置参数)
gn(name="刘怀源",address = "济源市",hobby = "美食",sex = "女",age = 22) (关键字参数)
gn("刘怀源",22,女,hobby = "美食",address = "济源市") (混合参数)
(2)站在形参的角度上有三种参数 ①位置参数 ② 默认值参数 ③默认值参数和位置参数混着用
①位置参数
②默认值参数
例如:
def regist(id,name,sex="女") sex = 女 已经给sex赋予值了 如果是,下面就不需要再写,此时就是默认值参数
print("录入学生信息:id%s,名字:%s,性别:%s" % (id,name,sex))
regist(1,"刘怀源","女") (位置参数)
regist(2,"郭晓君",) (默认值参数)
regist(3,"张舒文","男") 如果实际不是默认值参数的话,就自行添加
③默认值参数和位置参数混着用
顺序(先写位置参数,后写默认值参数)
def xinxi(name,age,sex = "女",address = "焦作市"):
print("姓名是%s,年龄:%s,性别:%s,地址是%s" % (name,age,sex,address))
xinxi("刘怀源",22)
xinxi("郭晓君",22,)
xinxi("刘亚楠",23,)
xinxi("张舒文",22,"男")
打印出来的结果:
姓名是刘怀源,年龄:22,性别:女,地址是焦作市
姓名是郭晓君,年龄:22,性别:女,地址是焦作市
姓名是刘亚楠,年龄:23,性别:女,地址是焦作市
姓名是张舒文,年龄:22,性别:男,地址是焦作市
五.函数的实际运用
例如:
1+2+3+4+5+..........+100 = ?
def sum(n)
s = 0
count = 1
while count < = n:
s = s + count
count = count + 1 对功能的封装
return s
ret = sum(100)
print(ret)
计算n是奇数还是偶数
def fn(n)
if n %2 == 0:
return"偶数"
else:
return"奇数"
ret = fn(一个数) ====>print(fn(一个数))
print(ret)
作业题:
1.写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
def func(str):
num = 0
zimu = 0
kongge = 0
qita = 0
for i in str:
if i.isdigit():
num += 1
elif i.isalpha():
zimu += 1
elif i.isspace():
kongge += 1
else:
qita += 1
return (num,zimu,kongge,qita)
ret = func("123defg *&%%")
print(ret)
2.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
def func(name,age,stu,sex="男"):
f = open("sutdent_msg",mode="a",encoding="utf-8")
f.write("名字是:%s,性别是%s,年龄是%s,学历是%s
" % (name,age,stu,sex))
f.flush()
f.close()
return (name,sex,age,stu)
while 1:
tuichu = input("请输入Q或q退出")
if tuichu.upper() == "Q":
break
name = input("名字:")
age = input("年龄:")
stu = input("学历:")
sex = input("性别:")
if sex == "女":
ret = func(name, age, stu, sex)
else:
ret = func(name, age, stu)
print(ret)
3.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题)
def func(f,old,new):
import os
with open(f,mode="r",encoding="utf-8") as f1,open(f+"副本",mode="w",encoding="utf-8") as f2:
s = f1.read()
ss = s.replace(old,new)
f2.write(ss)
os.remove(f)
os.rename(f+"副本",f)
func("chi","菜","肉")
4.写一个函数完成三次登陆功能
def func(name,password):
num = 1
while num <=3 :
n1 = input("请输入用户名:")
p1 = input("请输入密码:")
if n1== name and p1 == password:
print("登录成功")
break
else:
print("登录失败")
num = num + 1
func("刘怀源","123")