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

【Python】11、函数-01

文章目录

    • 1. 函数简介
      • 1.1 函数创建
    • 2. 函数参数
    • 3. 参数传递方式
    • 4. 不定长参数
    • 5. 参数解包

1. 函数简介

函数也是一个对象,函数用来保存一些可执行的代码,并且可以在需要的时候对这些语句进行多次的调用。

1.1 函数创建

语法定义:

def 函数名 ([行参1 : type,行参2 : type,...,行参数n : type]) -> return_type : 
	代码块

# type表示参数类型,不具有强制性,仅作为提示信息
# return_type 表示返回值类型,不具有强制性,作为提示信息
# 定义函数
def fn (a : int,b : int) -> int : 
	print('这是一个函数!')

# 调用
fn()

# 结果:
这是一个函数!

***Repl Closed***

定义行参相当于在函数内部申明了变量,但是并不赋值

2. 函数参数

定义函数一般都是需要实现某种功能,定义函数时可以在函数的()中定义数量不等的行参,多个参数之间使用逗号分割

  • 形参(形式参数): 定义形参相当于在函数内部申明了变量,但是并不赋值
  • 实参(实际参数): 如果函数定义了形参,那么在调用函数时也必须传递实参,实参将会赋值给对应的形参。有几个形参就有多少个实参
# 定义函数
def fn(a, b) : 
	print(a+b)

# 调用
fn(4,82)

# 结果:
86

***Repl Closed***

3. 参数传递方式

定义形参是,可以为形参指定默认值,指定了默认值以后如果用户传递了默认值则默认值没有任何作用,如果用户没有传递,则默认值就会生效

# 定义函数
def fn(a, b,c = 20) : 
	print(a+b+c)

# 调用
fn(4,82)

# 结果:
106

***Repl Closed***

  • 实参传递方式
  1. 位置参数:将对象位置的实参赋值给对应位置的形参
  2. 关键字参数:可以不按照形参的定义顺序去传递参数,而是直接根据参数名取传递参数
# 定义函数
def fn(a, b,c = 20) : 
	print(a+b+c)

# 调用
fn(c=4,a=82,b=2)

# 结果
88

***Repl Closed***

  • 位置参数和关键字参数可以混合使用
    混合使用时,必须将位置参数写到前面
# 定义函数
def fn(a, b,c = 20) : 
	print(a+b+c)

# 调用
fn(4,c=22,b=2)

# 结果:
28

***Repl Closed***

  • 实参的类型
    函数在调用的时候,解析器不会检查实参的类型,实参可以传递任意类型的对象。

4. 不定长参数

参数的个数是不定的,在定义函数时,可以在形参前加上*,这样这个形参会获取到的所有实参,会将所有的实参保存到一个元组中

# 定义函数
def fn(*a) : 
	print('a = ',a)

# 调用
fn(1,3,5,4)

# 结果:
a =  (1, 3, 5, 4)

***Repl Closed***

  • 带星号的参数只能有一个
  • 带星号的参数可以和其他参数配合使用
# 定义函数
def fn(a,b,*c) : 
	print('a = ',a)
	print('b = ',b)
	print('c = ',c)

# 调用
fn(1,3,5,4)

# 结果:
a =  1
b =  3
c =  (5, 4)

***Repl Closed***

  • 可变参数不是必须写在最后,但是需要注意,带星号的参数后的所有参数,必须以关键字参数的形式传递
# 定义函数
def fn(a,*b,c) : 
	print('a = ',a)
	print('b = ',b)
	print('c = ',c)

# 调用
fn(1,3,5,c = 4)

# 结果:
a =  1
b =  (3, 5)
c =  4

***Repl Closed***

  • 如果在形参开头直接写一个*,则要求所有的参数必须以关键字参数的形式传递
# 定义函数
def fn(*,a,b,c) : 
	print('a = ',a)
	print('b = ',b)
	print('c = ',c)

# 调用
fn(a = 1,b = 3,c = 4)

# 结果
a =  1
b =  3
c =  4

***Repl Closed***

  • *形参只能接受位置参数,而不能接受关键字参数
# 定义函数
def fn(*a) : 
	print('a = ',a)

# 调用
fn(a = 1) # 正确调用 fn(1) 

# 结果
TypeError: fn() got an unexpected keyword argument 'a'

  • ** 形参可以接受其它的关键字参数,它会将这些参数统一保存到一个字典中,字典的key就是参数名字,字典的value就是参数的值
    ** 形参只能有一个,必须写在所有参数的最后
# 定义函数
def fn(**a) : 
	print('a = ',a)

# 调用
fn(a = 1,b = 2,c = 3)

# 结果
a =  {'a': 1, 'b': 2, 'c': 3}

***Repl Closed***

5. 参数解包

  • 传递实参时,也可以在序列类型的参数前添加星号
    这样会自动将序列中的元素依次作为参数传递,这里要求序列中元素的个数必须和形参的个数一致
# 定义函数
def fn(a,b,c) : 
	print('a = ',a)
	print('b = ',b)
	print('c = ',c)

t = (10,30,45)

# 调用
fn(*t)

#结果:
a =  10
b =  30
c =  45

***Repl Closed***
  • 通过** 来对一个字典进行解包
# 定义函数
def fn(a,b,c) : 
	print('a = ',a)
	print('b = ',b)
	print('c = ',c)

d = {'a' : 10,'b' : 30,'c' : 45}

# 调用
fn(**d)

# 结果:
a =  10
b =  30
c =  45

***Repl Closed***

相关文章:

  • OpenCV图像处理:分割、合并、打码、组合与边界填充
  • VS Code + Git 分支操作指南(附流程图)
  • 基于Redis实现共享token登录
  • pytorch小记(十四):pytorch中 nn.Embedding 详解
  • 机器学习之梯度消失和梯度爆炸
  • 1.5.2 掌握Scala内建控制结构 - 块表达式
  • 【css酷炫效果】纯CSS实现虫洞穿越效果
  • Rust + WebAssembly 实现康威生命游戏
  • java 之枚举问题(超详细!!!!)
  • MySQL(索引)
  • 华为ISC+战略规划项目数字化转型驱动的智慧供应链革新(169页PPT)(文末有下载方式)
  • 架构师面试(十七):总体架构
  • numpy学习笔记4:np.arange(0, 10, 2) 的详细解释
  • 深度学习零碎知识
  • 【C语言】自定义类型:结构体
  • Android 15 获取网络切片信息的标准接口
  • 《C语言中的ASCII码表:解锁字符与数字的桥梁》
  • Netty基础—Netty实现消息推送服务
  • go语言中数组、map和切片的异同
  • Mobile-Agent-V:通过视频引导的多智体协作学习移动设备操作
  • 庄语乐︱宋代历史是被“塑造”出来的吗?
  • 零食连锁鸣鸣很忙递表港交所:去年营收393亿元,门店超1.4万家,净利润率2.1%
  • 李铁案二审今日宣判
  • 太好玩了!坐进大卫·霍克尼的敞篷车穿越他画笔下的四季
  • 伊朗内政部长:港口爆炸由于“疏忽”和未遵守安全规定造成
  • 楼下电瓶车起火老夫妻逃生时被烧伤,消防解析躲火避烟注意事项