目录
列表推导式 [结果 for 变量 in 可迭代对象 if 筛选]
字典推导式 {键 : 值 for 变量 in 可迭代对象 if 筛选} 结果是
集合推导式 {结果 for 变量 in 可迭代对象 if 筛选}
函数的基础
- # 申明方法
def 方法名(形参):
代码块
- # 调用方法
方法名(实参)
def demo(name,age):
print(f'(我是{name},我今年{age}岁))
#调用方法
demo('admin',12)
形参:
位置形参:def demo(name,age)
默认值形参:def demo(name,age=12)
二者可以混合使用,但是 位置形参 必须在默认值形参之前
实参:
位置实参:demo('admin',12)
关键字实参: demo('admin',age=12)
二者可以混合使用,但是 位置实参 必须在关键字实参之前
动态传参:
*参数 是位置参数
**参数 是关键字参数 方法接受到的是字典
位置参数>动态位置参数>关键字参数>动态关键字参数
在形参上:*聚合 **聚合
在实参上:*打散 **打散
格式:
*args 接受所有位置参数
lis = [1,2,3,4]
def function(*args): # 聚合 将打散的 内容 再次组成元组形式 (1,2,3,4)
print(args)
print(*args)
function(lis) #
function(*lis) #打散 *lis实际上就是 1,2,3,4
#结果:
([1, 2, 3, 4],)
[1, 2, 3, 4]
(1, 2, 3, 4)
1 2 3 4
**wargs 接受所有关键字参数*******************************************
dir = {'a':1,'b':2,"c":3,"d":4}
def function(**kargs): #这里将其聚合成 {'a':1,'b':2,"c":3,"d":4}
# print(**kargs) #报错 TypeError: 'a' is an invalid keyword argument for this function
# print(*kargs) # a b c d
print(kargs) #{'a': 1, 'b': 2, 'c': 3, 'd': 4}
function(**dir) # 其实这里的是 a=1 b=2 c=3 d=4
# function(*dir) #报错 TypeError: function() takes 0 positional arguments but 4 were given
# function(dir) #报错 TypeError: function() takes 0 positional arguments but 1 was given
#注意 :
dir = {'a':1,'b':2,"c":3,"d":4}
def function(**kwargs):
print(**kwargs) #报错 TypeError: 'a' is an invalid keyword argument for this function
function(**dir)
为什么打印 **kwargs 会报错的原因是:
字典前加 ** 会将字典打散为 a=1,b=2,c=3,d=4。
传入 function(**kwargs)方法后会被 **kwargs 全部接受 聚合成 {'a': 1, 'b': 2, 'c': 3, 'd': 4}
而 print(**字典) 则会将 字典再次打散为关键字参数,
但是print 的方法的参数中是没有 **kwargs(接受所有的关键字参数的) , 因此会报错
但是 print()方法中是有 *args 参数的,也就是为什么print(*args) 并不会报错
不容易理解的地方:
def func(**kwargs):
print(kwargs)
dic = {"1":1}
func(**dic)
#结果: {'1': 1}
#减少写参数量
# dic = {"1":1}
# func(**dic) 等同于 func("1"=1) 虽然后者报错,但是在实际空间中是以这种方式存储