Day10 函数基础+函数三种定义形式 + 函数的返回值、对象和参数 + 可变长参数
- 0 上节课复习
- 0.1 文件是什么
- 0.2 操作文件的步骤
- 0.3 open
- 0.4 指针操作
- 0.5 文件的复制
- 1 函数基础
- 1.1 函数的作用
- 1.2 函数的定义形式
- 1.3 函数定义的两个阶段
- 2 定义函数的三种形式
- 2.1 无参函数
- 2.2 有参函数
- 2.3 空函数
- 3 函数的返回值
- 4 函数对象
- 5 函数参数的应用
- 5.1函数定义分为两个阶段
- 5.2 默认形参
- 5.3 关键字实参
- 5.4 何时用?
- 6 可变长参数
- 6.1 可变长形参
- 6.2 可变长实参
0 上节课复习
0.1 文件是什么
是操作系统提供的虚拟单位,用来存储数据
0.2 操作文件的步骤
- 打开文件
- 读写
- 关闭文件
0.3 open
- with open(‘文件路径‘,打开方式,编码格式) as 变量名:
读写操作
- r只读 w清空文件后只写,a追加写入,t文本模式 /b二进制模式(没有encoding参数)
0.4 指针操作
seek移动指针,tell告诉你当前指针位置,read(n)读取n个字符,truncate阶段文件(了解)
0.5 文件的复制
with open('a.txt','r',encoding = 'utf8') as fr,open('a_swap.txt','w',encoding = 'utf8') as fw:
data = fr.read()
data = data.replace('apple','banana')
fw.write(data)
import os
os.remove('a.txt')
os.rename('a_swap.txt','a.txt')
# 换行加个斜杠
with open('a.txt','r',encoding = 'utf8') as fr,\
open('a_swap.txt','w',encoding = 'utf8') as fw:
1 函数基础
1.1 函数的作用
- 把冗余的代码写成一个通用模板
- 可以把冗余的代码独立开来
1.2 函数的定义形式
def 函数名(): # 函数名得有一定的意义(类似于变量名)
操作代码
# 引用时
函数名()
例如,注册功能
def register():
print("注册".center(100, '*'))
username = input("请输入你的用户名:\n")
password = input("请输入你的密码:\n")
with open(r'users information.txt', 'a', encoding='utf-8') as fa:
fa.write(f'{username}:{password}\n')
# 使用方式:函数名()可以使用这个工具
register()
1.3 函数定义的两个阶段
- 定义函数:在这个过程中,本来会报错的可能不会报错,因为这个阶段只识别语法,而不执行代码
- 调用函数:这个过程才执行代码题
2 定义函数的三种形式
注意:函数知识一种思想,干活的具体的实现都是靠if/while/for+变量,函数只是让你干活更轻松
以比大小为例,介绍三种形式
2.1 无参函数
# 定义
def self_max():
x,y = 10,20
if x > y:
print(x)
else:
print(y)
# 调用
self_max()
2.2 有参函数
# 定义
def self_max(x,y):
if x > y:
print(x)
else:
print(y)
# 调用
self_max(i,j)
2.3 空函数
def self_max:
pass
为什么有空函数?
你想造一把锯子,但你现在造不来,就给他东西留下来会造的时候再造
3 函数的返回值
变量名用来接收变量值
函数名用来接收函数的返回值,返回值默认为none,可以把函数体里面的输出值换成return,返回一个值给函数名,任意数据类型均可
def get_list():
return [1,2,3,4]
lis = get_list()
print(lis)
- return可以返回任意类型的数据
- return默认返回none
- 当return返回多个值的时候,会以元组的形式把多个值包在一起
4 函数对象
函数名可以看成变量名
打印函数名可以打印返回值
python中一切皆对象,列表数据类型,str,dict,object
举个例子比较四个数值的大小
def self_max(x,y):
if x > y:
return x
else:
return y
# 比较四个数大小
a,b,c,d = 10,5,14,6
#甚至可以接用其定义一个新的函数
def self_max_four(a,b,c,d):
max_four = self_max(self_max(self_max(a,b),c),d)
return(max_four)
print(self_max_four(1,4,5,2))
切记:函数体里面要有return,不能由print
5 函数参数的应用
5.1函数定义分为两个阶段
- 定义阶段:定义阶段的x和y被称为形参,形参具有描述意义,类似于变量名,不为具体的数据类型
- 调用阶段:此阶段的a和b称为实参,实参必须是具体的数据类型
def self_max(x,y): # 位置形参
if x > y:
return x # return有break的作用,一旦执行后面的就不输出了
print(333)
print(666)
return y
num_1 = self_max(10,20) #位置形参
print(num_1)
print('*'*100)
num_2 = self_max(20,10)
print(num_2)
5.2 默认形参
在函数定义阶段,提前赋值给形参,当你实参传值的时候,实参传的值会覆盖默认值
def guess_age(age=18):
inp_age = int(input("age>>>"))
if age == inp_age:
print("bingo")
else:
print("error!")
a = guess_age(20)
b = guess_age()
5.3 关键字实参
用在函数调用阶段,找到与形参的对应关系,并赋值给对应的形参,形参名为什么则关键字实参名也必须为什么
def self_max(x,y):
print(f'x:{x},y:{y}')
if x > y:
return x
return y
print(self_max(y=10,x=41))
5.4 何时用?
什么时候用默认形参:值不需要改变,并且经常使用,默认形参必须在位置形参后面
什么时候用关键字实参:当你的参数非常多的时候,使用关键字实参,关键字实参必须位置实参后面
6 可变长参数
6.1 可变长形参
def self_max(*args,**kwargs):
print(args) # *a接受了所有参数,然后以元组的形式保存了下来,只接受位置参数,不接受关键字实参
print(kwargs) # **b接收了所有的关键字实参,然后以字典的形式保存下来
self_max(1,2,3,4,5,6,7,8,9,x=11,m=47,ff=74)
6.2 可变长实参
def self_max(a,b,c,d,e,f,g,x=1,y=2,z=3):
print(a,b,c,d,e,f,g,x,y,x,z)
args = [1,2,3,4,5,6,7] # 把这个列表内的元素一个一个取出来,然后一个一个传给这个函数,取出的值会覆盖默认参数
kwargs = {"x":10,"y":11,"z":12} # 把这个字典内的元素一个一个取出来,然后一个一个传给这个函数,取出的值会覆盖默认参数
self_max(*args,**kwargs) # *args,**kwargs,被称为可变长实参,
约定俗称的,*后面必须得写args,**后面必须写kwargs