Python 隐秘的角落
1. *args 和 **kwargs 的使用
# 此处一定要注意 python 中有默认值得参数一定一定要放在没有默认值的后边。
# *args 是以元组类型传入
# **kwargs 是字典类型传入
def parameter_learn(parameter_1, parameter_2=None, *args, **kwargs):
""" *args, **kwargs 参数传递的使用
:param parameter_1: 此处的 parameter_1 一定要在 parameter_2 前面
:param parameter_2:
:param args: 当出现默认赋值时(ps:parameter_2=None) args 可能无法生效。
:param kwargs: 无顺序新增加参数时将新参数直接传入即可( ps:kwarg_1=1 ) ; 参数将以字典的形式传入
:return:
"""
print(parameter_1, parameter_2)
print(args)
print(kwargs)
parameter_learn(parameter_1=1, parameter_2=2, kwarg_1=1)
"""result:
1 2
()
{'kwarg_1': 1}
"""
# 按位置传参
def parameter_learn2(parameter_1, parameter_2, *args, **kwargs):
"""
:param parameter_1: 第一个位置参数
:param parameter_2: 第二个位置参数
:param args: 第二个后面的位置参数
:param kwargs: 字典传入的参数
:return:
"""
print(parameter_1, parameter_2)
print(args)
print(kwargs)
parameter_learn2(1, 2, 3, 4, 5, kwarg_1=1, kwarg_2=2)
"""result:
1 2
(3, 4, 5)
{'kwarg_1': 1, 'kwarg_2': 2}
"""
2. 三元运算符
if-else 语句
# 普通判断语句
a = 10
if a < 11:
a += 1
print(a)
else:
a -= 1
print(a)
"""result:
11
"""
# 三元表达式
# 格式:(变量1) = 符合条件返回:(变量 or 常量 or 表达式) if (条件) else 否则不符合条件返回:(变量 or 常量 or 表达式)
a = 10
b = a + 1 if a < 11 else a - 1
print(b)
"""result:
11
"""
3.列表推导式
# 列表推导式 生成一个列表 0-99 能被2整除 或者 能被3整除的自然数
a_list = [x for x in range(0, 100) if x % 2 == 0 or x % 3 == 0]
print(a_list)
# result:
[0, 2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 26, 27, 28, 30, 32, 33, 34, 36, 38, 39, 40, 42, 44, 45, 46, 48, 50, 51, 52, 54, 56, 57, 58, 60, 62, 63, 64, 66, 68, 69, 70, 72, 74, 75, 76, 78, 80, 81, 82, 84, 86, 87, 88, 90, 92, 93, 94, 96, 98, 99]
4.数值互换
# python 可以直接进行数值互换
a = 1
b = 2
c = 3
a, b, c = b, c, a
print(a, b, c)
# result:
3 1 4
5.反转
# 字符串反转
str1 = "123456789"
print(str1[::-1])
# 987654321
# 列表反转
list1 = [1, 2, 3, 4, 5, 6, 7]
print(list[::-1])
# [7, 6, 5, 4, 3, 2, 1]
6.for - else 组合
# for-else 语句。
for i in [1, 2, 3, 4]:
print(i)
if i == 1:
# 当执行 break 语句时, else是不会执行的。
break
# 只要执行完 for 循环语句就会执行 else。
else:
print("I am else")
7. lambda 匿名函数
# x, y 是参数, x + y 是返回值
func = lambda x, y: x + y
print(func(1, 2))
# result:
# 3
8.生成器 和 迭代器
# 迭代器
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
"""result:
1
2
3
"""
# 生成器 (本质上也是迭代器)
# for 循环条件 迭代对象必须是可迭代对象
def get_number():
for data in range(0, 100):
# 有 yield 的就叫做生成器
yield data
a1 = get_number()
print(next(a1))
9.装饰器
# 装饰器
def learn(func):
def inner(*args, **kwargs):
print(args)
print(kwargs)
func(*args, **kwargs)
return inner
@learn
def learn1(a, b, *args):
print(a + b)
return a + b
learn1(1, 2, 90, 0)
# result:
(1, 2, 90, 0)
{}
3