Python开发【第十一篇】函数 (2)

示例:

# 此示例示意如何定义函数的缺省参数 def info(name, age=1, address="不详"): print(name, '今年', age,'岁,家庭住址:', address) info("魏明择", 35, "北京市朝阳区") info("Tarena", 15) info("张飞") # info() # 出错

说明:

缺省参数必须自右至左一次存在,如果一个参数有缺省参数,则其右侧的所有参数必须有缺省参数 缺省参数可以有0个、一个或多个,甚至全部都有缺省参数

例子:

def fn(a,b=10,c): #错误 pass def fn(a=0,b=None,c=False): #正确 pass 函数的可变实参和不可变实参的传递

示例:

# 在函数内部对变量赋值是在函数内部创建新的局部变量 # 此赋值语句不会改变外部变量的绑定关系 L = [1, 2, 3] def f1(L): L = [4, 5, 6] # 赋值语句的作用是创建和或改变变量的绑定关系 print(L) # [4, 5, 6] f1(L) print(L) # [1, 2, 3] L = [1, 2, 3] def f1(L): # L = [4, 5, 6] # 赋值语句的作用是创建和或改变变量的绑定关系 L.append("ABC") print(L) # [1, 2, 3, "ABC"] f1(L) print(L) # [1, 2, 3, "ABC"]

说明:

当一个可变通过函数实参传入函数内时,在函数内可以通过局部变量来操作可变对象(列表,字典,集合...)

面试题:

#运行以下程序的结果是什么?为什么? L = [1,2] def fn(a,lst=[]) lst.append(a) print(lst) fn(3,L) #[1,2,3] fn(4,L) #[1,2,3,4] ##################### fn(5) #[5] fn(6) #[5,6] fn(7) #[5,6,7] 函数形参的定义方式

位置形参

星号元组形参

命名关键字形参

双星号字典形参

位置形参

语法:

def 函数名(形参变量1,形参变量2,....): 语句块 星号元组形参

语法:

def 函数名(*元组形参名): 语句块

作用:

收集多余的位置传参

说明:

元组形参名一般命名为'args' *元组形参一个函数只能有一个

示例:

# 此示例示意星号元组形参 def func(*args): print("实参的个数是:", len(args)) print("args=", args) func() # 无参 func(1,2,3,4) func(1, 2, 3, 4, 5, 6, 7, 8) s = "ABCDE" func(*s) # 等同于func('A', 'B', ....) func(a=100, b=200) # 出错 命名关键字形参

语法:

def 函数名(*,命名关键字形参1,命名关键字形参2,....): 语句块 或 def 函数名(*args,命名关键字形参1,命名关键字形参2,....): 语句块

作用:

强制所有的命名关键字形参都必须用关键字传参或字典关键字传参

示例:

# 此示例示意命名关键字形参 def func(a, b, *, c, d): print(a, b, c, d) # func(1, 2, 3, 4) # 传参失败 func(1, 2, c=30, d=40) func(a=10, b=20, c=30, d=40) func(1, 2, **{'d':400, 'c':300}) 双星号字典形参

语法:

def 函数名(**字典形参名): 语句块

作用:

收集多余的关键字传参

示例:

# 此示例示意双星号字典形参 def func(**kwargs): print("关键字传参的个数是:", len(kwargs)) print('kwargs=', kwargs) func(name="隔壁老王", age=35, address="朝阳区") def func(*,a, b, **kwargs): print("关键字传参的个数是:", len(kwargs)) print('kwargs=', kwargs) func(a=1, b=2, c=3, d=4)

说明:

字典形参名一般命名为:'kwargs' 一个函数内字典形参最多只有一个 函数的形参说明:

位置形参,缺省参数,星号元组形参,双星号字典形参可以混合使用

函数形参自左至右的定义顺序为:

位置形参

星号元组形参

命名关键字形参

双星号字典形参

示例:

def fn(a, b, *args, c, **kwargs): pass fn(1, 2, 3, 4, c=30, d=40, e=50) 函数的不定长参数

星号元组形参

双星号字典形参

用不定长参数可以接收任意的传参

如:

def fn(*args,**kwargs): print(*args,**kwargs)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxysg.html