Python3函数基础实践

声明:参考B站视频,自学成长记录
https://www.bilibili.com/video/BV1qC4y1s71m?p=208

函数

1. 什么是函数
函数就相当于具备某一功能的工具,要先定义后使用
2. 为何要用函数
代码冗余、组织结构不清晰、可读性差、可维护性差、可扩展性差
3. 如何使用函数
先定义(3种定义方式)、后调用(3种调用方式)、返回值(3种返回值的形式)

定义函数

定义函数发生的事情

1.申请内存空间 保存函数体代码
2.将内存地址绑定给函数名
3.定义函数时不会执行整体代码,只会检测函数体语法

定义函数的语法

def 函数名(参数1, 参数2, ...参数n):
	"""文档描述"""
	函数体
	return

定义方式1 - 无参函数

def func():
	print("哈哈哈")
	
func()

定义方式2 - 有参数函数

def func(x, y): # x=1, y=2
	print(x, y)	# 1, 2

func(1, 2)

定义方式3 - 空函数

def func():
	pass
	# ...

不同定义方式的应用场景

无参函数的应用场景

# 调用时,函数体不需要外部传入参数
def input():
	name = input("请输入姓名:")
	age = input("请输入年龄:")
	msg = '名字:{} 年龄:{}'.format(name, age)
	print(msg)
	

有参函数的应用场景

# 调用时,函数体需要外部传入参数
def sum(x, y)
	return x + y

s = sum(3, 5)
print(s)	# 8

空参函数的应用场景

# 构思代码的实现思路时,可以先做好定义并用pass占好位置
def auth_user():
	"""用户认证"""
	pass

def upload_file():
	"""文件上传"""
	pass

def download_file():
	"""下载文件"""
	...

调用函数

调用函数发生的事情

1.通过函数名找到函数的内存地址
2.然后加括号就是在触发函数体代码的执行

调用方式1 - 语句形式

# 只加括号调用函数
func()

调用方式2 - 表达式形式

# 赋值表达式
res = add(1, 2)	# 3

# 数学表达式
add(1, 3) * 10	# 40

调用方式3 - 函数的调用可以当参数

add(add(1,2), add(3,4))	# 10

函数返回值

如果需要将函数一系列的处理得出的结果反馈给调用者,就需要用到return
return是函数结束的标志,即函数体代码一旦运行到return会立刻终止函数的运行,并将return后的值 当作本次运行的结果返回

返回方式1 - None

# 没有return, 默认返回None
def func():
	pass

print(func())	# None

返回方式2 - 返回一个值

# return 值
def func():
	return 10

print(func())	# 10

返回方式3 - 返回多个值

# return 值1, 值2, 值n
def func():
	return 1, 'aa', [1,2]

print(func())	# 元组形式:(1, 'aa', [1,2]) 

形参与实参

形式参数

在定义函数阶段定义的参数称之为形式参数,简称形参

def func(x, y):	# x , y  为形参
	print(x, y)

实际参数

在调用函数阶段传入的值称为实际参数,简称实参

func(1, 2) 	# 1, 2为实参

形参与实参的关系

形参与实参得个数需一致,多一个或少一个都不可以,不能为同一个形参重复传值
在调用时会将实际传入的值得内存地址 分别绑定 给对应形参,这种绑定关系只能在函数体内使用,且在函数调用结束后解除绑定关系

# 形参
def func(x, y):	# x=1 , y=2 
	print(x, y)	# 1, 2

# 实参
func(1, 2)

位置参数

# 定义时 按照从左向右得顺序依次定义得参数 称之为 位置形参
def func(x, y, z):
	print(x, y, z)
	
func(1, 2, 3)

关键字参数

def func(x, y, z):
	print(x, y, z)
	
# 调用时 按照key=value得形式传给形参,完全不参照顺序得参数 称之为 关键字实参
func(x=1, z=3, y=2)

默认参数

# 定义时 就已经被赋值得形参 称之为 默认参数
# 定义时 位置参数必须在默认参数的左边
def func(x, y=3):
	print(x, y)	# 5, 3

# 调用时 可以不用给形参传值
func(5)	
# 调用时 也可以给形参传值
# func(5, y=8)	# 5, 8

形参不使用用可变类型

# 推荐:形参不使用可变类型
def func(x, y, z, l=None):
	if l is None:
		l = []
	l.append(x)
	l.append(y)
	l.append(z)
	print(l)	# [1, 2, 3]
	
func(1,2,3)	

可变长度的参数

形参中带 *

# *args:接收多出来得位置实参  会被 * 保存成元组得格式 然后赋值给其后得形参名args
def my_sum(*args):	# item = (1, 2, 3, 4, 5)
	s = 0
	for i in args:
		s += i 
	return s
res = my_sum(1, 2, 3, 4, 5)
print(res)	#	15

形参中带 **

# **kwargs:接收多出来得关键字实参 会被 ** 保存成字典得格式 然后赋值给其后得形参名kwargs
def func(**kwargs):
    print(kwargs)	# {'x': 1, 'y': 2, 'z': 3}

func(x=1,y=2,z=3)	

实参中带 *

# 实参中带 * 先将*后得值拆分成 位置实参 再给形参传值
def func(x, y, *z):	# --> 2.func(1, 2, (11, 22, 33))
	print(x, y, z)	# --> 3. 1, 2, (11, 22, 33)

func(1, 2, *[11, 22, 33]) # --> 1.func(1, 2, 11, 22, 33)

实参中带 **

# 实参中带 ** 先将**后得值(必须为字典)拆分成关键字实参 再给形参传值
def func(x, y, z):
	print(x, y, z)

# *
func(*{'x':1, 'y':2, 'z':3})	# --> func(x, y, z)
# **
func(**{'x':1, 'y':2, 'z':3})	# --> func(x=1, y=2, z=3)

形参与实参中都带 **

def func(x,y,**kwargs):
	print(x,y,kwargs)	# 1 2 {'a': 11, '2': 22, 'c': 33}

func(**{'y':2, 'x':1, 'a':11, '2':22, 'c':33})

特此铭记

"90"后灯塔 - 袁隆平 / 吴孟超 双星西沉,致敬缅怀!2020.05.22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值