当前位置: 首页 > news >正文

函数(定义、返回值、调用、参数)

目录

❤  无参函数

❤  有参函数

❤  空函数

❤  什么是返回值?

❤  为什么要有返回值?

❤  什么是函数调用?

❤  为何用调用函数?

❤  函数调用的三种形式

❤  形参和实参

形参

实参

❤  位置参数

位置形参

位置实参

❤  关键字实参

❤  默认形参

❤  总结


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502

❤  无参函数

定义函数时参数是函数体接收外部传值的一种媒介,其实就是一个变量名

在函数阶段括号内没有参数,称为无参函数。需要注意的是:定义时无参,意味着调用时也无需传入参数。

如果函数体代码逻辑不需要依赖外部传入的值,必须得定义成无参函数。

def func():print('hello nick')func()  # hello nick

❤  有参函数

在函数定义阶段括号内有参数,称为有参函数。需要注意的是:定义时有参,意味着调用时也必须传入参数。

如果函数体代码逻辑需要依赖外部传入的值,必须得定义成有参函数。

def sum_self(x, y):"""求和"""res = x+yprint(res)sum_self(1,2)  # 3

❤  空函数

当你只知道你需要实现某个功能,但不知道该如何用代码实现时,你可以暂时写个空函数,然后先实现其他的功能。

def func():pass

❤  什么是返回值?

函数内部代码经过一些列逻辑处理获得的结果。

def func():name = 'nick'return namename = func()
print(name)

nick

❤  为什么要有返回值?

现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪。

如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值。

需要注意的是:

  • return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。
  • return的返回值可以返回任意数据类型
  • return的返回值无个数限制,即可以使用逗号隔开返回多个值

0个:返回None
1个:返回值是该值本身
多个:返回值是元组


# 为什么要有返回值
def max_self(salary_x, salary_y):if salary_x > salary_y:return salary_xelse:return salary_ymax_salary = max_self(20000, 30000)
print(max_salary*12)

360000


# 函数返回多个值
def func():name = 'nick'age = 19hobby_list = ['read', 'run']return name, age, hobby_listname, age, hobby_list = func()
print(f"name,age,hobby_list: {name,age,hobby_list}")

name,age,hobby_list: ('nick', 19, ['read', 'run'])

❤  什么是函数调用?

第一次讲函数其实就讲了函数的调用,但是你不得不再次更新你对函数调用的印象。函数名(…)即调用函数,会执行函数体代码,直到碰到return或者执行完函数体内所有代码结束。

函数运行完毕所有代码,如果函数体不写return,则会返回None。


def foo():passprint(foo())

None

❤  为何用调用函数?

很愚蠢的一个问题,但是我们依然得回答:使用函数的功能。

❤  函数调用的三种形式


def max_self(x,y):if x>y:return xelse:return y# 1.
max_self(1,2)
# 2.
res = max_self(1,2)*12
# 3.
max_self(max_self(20000,30000),40000)

❤  形参和实参

形参

在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质就是变量名。


def func(x, y):print(x)print(y)

实参

在函数调用阶段括号内传入的参数,称之为实际参数,简称实参,本质就是变量的值。


func(1, 2)

❤  位置参数

位置形参

在函数定义阶段,按照从左到右的顺序依次定义的形参,称之为位置形参。

def func(x, y):print(x)print(y)

特点:按照位置定义的形参,都必须被传值,多一个不行,少一个也不行。

位置实参

在函数调用阶段,按照从左到右的顺序依次定义的实参,称之为位置实参。


func(1, 2)

特点:按照位置为对应的形参依次传值。

❤  关键字实参

在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参。


func(y=2, x=1)

特点:可以打破位置的限制,但仍能为指定的形参赋值。

注意:

  1. 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
  2. 可以混用位置实参和关键字实参,但不能对一个形参重复赋值。

func(x, y=2)
func(y=2, x)  # SyntaxError: positional argument follows keyword argument
func(x, x=1)  # NameError: name 'x' is not defined

❤  默认形参

在定义阶段,就已经被赋值。

def func(x, y=10):print(x)print(y)func(2)

特点:在定义阶段就已经被赋值,意味着在调用时可以不用为其赋值。

注意:

  1. 位置形参必须放在默认形参的左边。
  2. 默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。
m = 10def foo(x=m):print(x)m = 111
foo()  # 10
  1. 默认参数的值通常应该是不可变类型。

# 演示形参是可变类型
def register(name, hobby, hobby_list=[]):hobby_list.append(hobby)print(f"{name} prefer {hobby}'")print(f"{name} prefer {hobby_list}")register('nick', 'read')
register('tank', 'zuipao')
register('jason', 'piao')

nick prefer read'
nick prefer ['read']
tank prefer zuipao'
tank prefer ['read', 'zuipao']
jason prefer piao'
jason prefer ['read', 'zuipao', 'piao']

# 修改形参是可变类型代码
def register(name, hobby, hobby_list=None):if hobby_list is None:hobby_list = []hobby_list.append(hobby)print(f"{name} prefer {hobby}'")print(f"{name} prefer {hobby_list}")register('nick', 'read')
register('tank', 'zuipao')
register('jason', 'piao')

nick prefer read'
nick prefer ['read']
tank prefer zuipao'
tank prefer ['zuipao']
jason prefer piao'
jason prefer ['piao']

❤  总结

实参的应用:取决于个人习惯
形参的应用:

  1. 大多数情况的调用值一样,就应该将该参数定义成位置形参
  2. 大多数情况的调用值一样,就应该将该参数定义成默认形参
http://www.lryc.cn/news/65392.html

相关文章:

  • 28. Kubernetes 核心组件讲解——API Server
  • springboot框架开发医院云HIS 住院医生站、住院护士站功能实现
  • 高性能定时器介绍及代码逐行解析--时间堆
  • 汇编语言学习笔记五
  • Linux下的epf 是什么?
  • 如何在广告形式选择上化解用户厌恶和变现瓶颈?
  • 【Android入门到项目实战-- 9.2】—— 传感器实战使用教程(靠近黑屏和计步器)
  • 软件项目生命周期模型
  • linux系统TP-ti,tsc2046外设调试
  • ChatGPT指令大全
  • 【Vue面试题】Vue2.x生命周期?
  • 运算放大器 - 笔记 02 -恒流源
  • Python:Python进阶:Python字符串驻留技术
  • 2022年 全国职业院校技能大赛(中职组)网络安全赛项 正式赛卷 A模块 做题记录
  • 华为OD机试 - 优选核酸检测点(Python)
  • windows怎么把包含某个关键词的文件移动到一个文件夹中
  • Unity 后处理(Post-Processing) -- (2)创建后处理配置文件
  • BI 商业智能和报表,傻傻分不清楚?一文给你讲透
  • CSS布局基础(传统布局小结)
  • 【五一创作】Qt quick基础1(包含基本元素Text Image Rectangle的使用)
  • LVS+Keepalived 高可用群集部署
  • 小黑子—Java从入门到入土过程:第八章
  • innodb_flush_log_at_trx_commit 和 sync_binlog 参数解析
  • hd debug - DAPLink的资料
  • Android adb常用50条命令
  • 【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
  • Visual Studio高效调试手段与调试技巧总结
  • Day37 Map集合
  • 是人就能学会的Spring源码教学-Spring的简单使用
  • NOC大赛·核桃编程马拉松赛道知识点大纲(高年级及初中组)