持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天
函数定义与使用
语法
#定义语法
def 函数名 ([参数列表]) :
'''注释'''
函数体
#调用语法
函数名(实参)
定义时注意:
- 不需定义形参类型 不需指定函数返回值类型
- 无参数也应保留() 不可省略冒号:
- 函数体相对def关键字保持缩进 允许嵌套定义
参数相关
写在前面
- 在“/”左边的参数被视为仅位置参数
- 如果函数定义中“/”没有指定,则函数中所有参数都不是仅位置参数
- 仅位置参数的可选值的逻辑与位置-关键字参数的逻辑相同。
- 一旦使用默认值指定了仅位置参数,下面的仅位置参数和位置-关键字参数也需要具有默认值。
- 没有默认值的仅位置参数在调用的时候必需给值。
位置参数
按顺序赋值给局部变量 顺序不可变 传参时前面不带"变量名="
关键字参数
按名称赋值给与其同名的局部变量 顺序可变 传参时前面带"变量名="
默认值参数
函数定义时即设置参数的默认值
在参数列表最右侧
可通过显示赋值替换其默认值
关键参数
即关键字参数
按名称赋值给与其同名的局部变量 顺序可变 传参时前面带"变量名="
可变长度参数
作用
接收参数并存储
*parameter 接收多个位置参数并将其存放在一个元组中
**parameter 接收多个关键参数并将其存放在字典中
语法
def demo (*p):
print(p)
demo(1,2,3)
def demo2(**p):
for item in p.items():
print(item)
demo (x = 1, y = 2)
参数传递序列解包
原始
赋值运算符左边的变量数目与序列中的元素数目相等,你都可以用这种方法将元素序列解包到另一组变量中
作用
将实参解包,传递给多个单变量形参
实参--元组/数组/字典
语法
def demo(a,b,c):
printf(a+b+c)
seq = [1,2,3]
demo(*seq)
#输出6
tup = (1,2,3)
demo(*tup)
#输出6
dic = {1:'a', 2:'b', 3:'c'}
demo(*dic) #解包字典的键
#输出6
demo(*dic.values()) #解包字典的值
#输出abc
Set = {1,2,3}
demo(*Set)
#输出6
#当字典的键为函数形参的名称/与**的可变长度参数对应
dic = {'a';1, 'b': 2, 'c':3}
demo(**dic) #解包字典 类似关键字传参