如何通过星号编写Python代码的最佳方式

python以句法简单、简洁而闻名,只需掌握简单的英语就能理解其代码。对初学者来说极具吸引力,它没有声明,没有花哨的字符或者奇怪的句法。正因如此,python才得以风靡全球。
除此之外,python还具备一些很酷的特点,比如装饰器和列表解析。这些特点确实能创造奇迹,但*也值得这一美名,小小字符能带来翻天覆地的变化。
先从一个小技巧开始:
in [1]:
first_dict= {‘key1’: ‘hello’, ‘key2’: ‘world’}
second_dict= {‘key3’: ‘whats’, ‘key4’: ‘up’}
in [2]:
#joins the dicts
combined_dict= {**first_dict, **second_dict}
combined_dict
out[2]:
{‘key1’: ‘hello’, ‘key2’: ‘world’, ‘key3’:‘whats’, ‘key4’: ‘up’}
in [ ]:
这是合并字典的超简单方法!你能明显看出,我仅用了几个星号就将字典结合了起来,我接下来会一一解释。
星号在哪些地方发挥作用?
除了众所周知的乘法作用,星号还能让你轻松完成一些重要任务,例如解包。一般来说,你可以使用星号来解包可迭代对象,也能对双向可迭代对象(就像字典一样)进行双重解包。
in [7]:
# unpackingan iterable
[xfor x inrange(100)] == [*range(100)]
out[7]:
true
in [8]:
#unpkacing dict keys
d = {‘key1’: ‘a’}
list(d.keys()) == [*d]
out[8]:
true
in [9]:
#unpacking whole dict
d == {**d}
out[9]:
true
解包的力量
不要破坏别人的代码
大家也越来越理解这一点,但仍然有人没有遵守。开发者写出的每一个函数都有其特征。如果函数被改变,那么所有基于你的代码而撰写的代码都会被破坏。
我将介绍一种简单的方法,你可以为自己的函数增添更多功能性,同时也不会破坏其向后兼容性,最后你会得到更多的模块化代码。
在你的代码中输入*args和**kwrags,它们会将所有输入都解包进函数。单星号针对标准的可迭代对象,双星号针对字典类的双向可迭代对象,举例说明:
in [1]:
defversion1(a, b):
print(a)
print(b)
in [2]:
version1(4,5)
4
5
in [3]:
#code breaks
version1(4,5,6)
---------------------------------------------------------------------------
typeerror traceback(most recent call last)
《ipython-input-3-b632c039a799》 in《module》
1# code breaks
----》 2 version1(4,5,6)
typeerror: version1() takes 2 positionalarguments but 3 were given
in [4]:
defversion2(a, b, *args):
print(a)
print(b)
# new function.
if args:
for c in args:
print(c)
in [5]:
version2(1,2,3,4,5)
1
2
3
4
5
in [6]:
#code breaks
version2(1,2,3,4,5, extra=10)
---------------------------------------------------------------------------
typeerror traceback(most recent call last)
《ipython-input-6-748b0aef9e5d》in 《module》
1 # code breaks
----》 2 version2(1,2,3,4,5, extra=10)
typeerror: version2() got an unexpectedkeyword argument ‘extra’
in [7]:
defversion3(a, b , *args, **kwrags):
print(a)
print(b)
# new function.
if args:
for c in args:
print(c)
if kwrags:
for key, value inzip(kwrags.keys(), kwrags.values()):
print(key,‘:’, value)
in [8]:
version3(1,2,3,4,5, extra=10)
1
2
3
4
5
extra : 10
in [ ]:
工作代码和破解代码
这个例子展示了如何使用args和kwargs来接收之后的参数,并留到将来使用,同时也不会破坏你函数中原有的call函数。
星号是python中很重要的一部分,但却常常被我们忽略。事实上,我们平常没有注意到的关键点还有很多,值得我们去一点点探索。

如何实现简单的隔离偏置电源的设计?
Z-Wave是智能家居首选的八个优点
全新固态电池具有2倍传统电池的能量且无阳极
手机行业九成利润的竟然是苹果 难怪iPhone X不会降价
人工智能技术给动画制作业会带来什么影响
如何通过星号编写Python代码的最佳方式
OPPO R15深度体验:基于安卓8.1焕然一新 ColorOS 5.0更好用
护城河与成长性并重 菲菱科思未来可期
预计京东方成都6代柔性AMOLED生产线2019年实现满产
机房动力环境监控系统的组成及特点分析
胡厚崑: 边缘计算,正在释放商用价值
一键开关机电路原理图解析
金升阳推出66-160VDC输入铁路电源 输出功率可达400W
物联网技术研究与应用案例分析
大数据及人工智能时代的3项关键技术
利用电分析和纳米尺度表征方法证明锂电镀形貌和电流密度高度相关
什么叫断路器失灵保护 断路器失灵保护是什么
软件模拟I2C从机的实现方法及注意事项
新能源汽车废旧动力电池精细拆解设备工艺
TOP204单片开关电源IC的原理及应用