目录

*号的使用

对于*出现在函数参数中的情况可以表示为可变参数,一般写作*args ,用于将可变数量的参数传递给函数

1
2
3
4
5
6
7
8
9
10
11
def Fa(*args):
c=1
for n in args:
c=c*n
return c

print(Fa(2,3)) #输出6

print(Fa(2,3,4)) #输出24

print(Fa(2,3,4,5)) #输出120

对于单独出现在参数中的*参数,则表示,*后面的参数必须为关键字参数的形式

1
2
def f1(a, *, b, c):
return a + b + c

此时要正确使用f1需要b,c以关键字参数的形式传递参数:

1
f1(1, b=2 , c=3)

对于**kwargs 参数允许我们将字典类型的键值对参数传递给函数。

1
2
3
4
5
6
7
8
9
10
11
def myFun(**kwargs):
for i in kwargs:
print(i,'-',kwargs[i])

myFun(a=10, b=20, c=30, d=40)

# 输出:
a - 10
b - 20
c - 30
d - 40

super(father).__init__()

调用父类的__init__()函数进行初始化

1
2
3
4
5
6
7
class A():
def __init__(self):
self.a=100
self.b='xxx'
self.c=True
def func1(self):
pass

现在有类A,现在想创建类B继承类A,但是类Bself.c需要改为False,我们尝试实现

1
2
3
4
5
6
7
8
9
10
11
12
class B(A):
def __init__(self):
super(B,self).__init__()
self.c=False
def func2(self):
print(self.b)
print(self.c)
b=B()
b.func2()
#输出:
xxx
False
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class A():
def __init__(self,a,b):
self.a=a
self.b=b
print(self.b)
self.prints()
def prints(self):
print('self.A:',self.a)
class Zilei(A):
def __init__(self,a):
super(Zilei, self).__init__(a,a+1)
self.a = a+100
print('self.a:', self.a)
def prints(self):
print('self.b:',self.b)
ass=Zilei(1)

# 1/ 先执行super(Zilei, self).__init__(a,a+1),即执行A.__init__
# 所以输出print(self.b),即2
# 再执行self.prints() ,值得注意的是A.prints(),在子类zilei被重写,所以应该执行的是zilei.prints(),即输出:self.b:2
#2/返回到zilei.__init__执行print('self.a:', self.a) 输出 self.a:101

# 最终输出的结果:
# 2
# self.b:2
# self.a:101

if的后置

1
2
3
4
a = 1
b = 2
c = a if a > b else b # if中条件满足则返回a,否则返回b
d = a if a > b else b if b > c else c # 嵌套写法,类似自然语言,可读性强

for的后置

1
2
3
4
5
6
a = list(str(x) for x in range(4))
print(a)
# ['0', '1', '2', '3']

[m + n for m in 'ABC' for n in 'XYZ']
#['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

__getitem__方法

1
2
3
def __getitem__(self, name):
"""Access items like ordinary dict."""
return self.config[name]

这里应该是属于python内置的方法,在类中定义了这个方法就能把实例化的类当字典用比如config['augment']