Day10 函数基础+函数三种定义形式 + 函数的返回值、对象和参数 + 可变长参数

chsun12 / 2024-11-17 / 原文

目录
  • 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 操作文件的步骤

  1. 打开文件
  2. 读写
  3. 关闭文件

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. 可以把冗余的代码独立开来

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 函数定义的两个阶段

  1. 定义函数:在这个过程中,本来会报错的可能不会报错,因为这个阶段只识别语法,而不执行代码
  2. 调用函数:这个过程才执行代码题

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)
  1. return可以返回任意类型的数据
  2. return默认返回none
  3. 当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函数定义分为两个阶段

  1. 定义阶段:定义阶段的x和y被称为形参,形参具有描述意义,类似于变量名,不为具体的数据类型
  2. 调用阶段:此阶段的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