挑战“不可能”的代码:你不知道的Python功能

开发 后端
Python看似简单,但实则变化万千,笔者总都能看到一些代码以近乎不可能的方式呈现。这些功能很精妙,以至于我无法想象没有Python时该怎样生活。

 本文转载自公众号“读芯术”(ID:AI_Discovery)

Python看似简单,但实则变化万千,笔者总都能看到一些代码以近乎不可能的方式呈现。这些功能很精妙,以至于我无法想象没有Python时该怎样生活。

[[335892]]

本文会涉及其中几个不常用却很有用的功能,包括:

  • 变量赋值——运用*args和**kwargs(包括字典合并)
  • 不可变集合——是什么,为什么有用
  • 多因素条件——更清晰的逻辑
  • 检查变量是否存在——在本地和全局范围内
  • 胜过lambda函数——编写Python风格和函数风格的一行式代码

变量赋值

正如函数*args和**kwargs,在变量赋值中可以运用相同的语法:

 

挑战“不可能”的代码:你不知道的Python功能

 

合并两个字典

合并字典时运用可迭代变量赋值法中的**kwargs语法:

 

挑战“不可能”的代码:你不知道的Python功能

 

需要小心的是,如果字典间有公共键,后一个键值对(y中的)会替代前者。据即将发行的最新Python版本(3.9),可以用一个全新的语法来规避这个问题,即字典合并,并更新操作符:

z = x | y # 合并——如上所述的行为模式

x |= y # 更新——替代字典合并

不可变集合

在Python中,可以运用集合,也就是不同对象的无序集合。这些集合是可变的,意味着能用add()和remove()进行变换——这说明可变集合是不可哈希的。

反之,可以运用不可变集合frozenset()——一种无法改变值的集合。但正因不可变,它是可哈希的——当把set和frozenset同时作为字典的键时,这一点就体现出来了:

 

挑战“不可能”的代码:你不知道的Python功能

 

 

挑战“不可能”的代码:你不知道的Python功能

 

把frozenset作为字典的键似乎并不实用,但是frozenset的作用是提供更详细、更具目的性的代码。这提醒了未来的代码阅读者——如果改变我,一切都会崩溃。

多因素条件

清理那些杂乱的if语句,而不是:

 

  1. if 0 <= x and x <= 1: 
  2. print('value is %'

可以写成:

 

  1. if (0 <= x <= 1): 
  2. print('value is %'

再深入一点,可以添加更多的条件语句,并用逐位运算符把它们串起来:

 

  1. if (0 <= x < 1) | (7 <= x < 8) | (x == 10): 
  2.     print('passed'

检查变量是否存在

我需要检查变量是否存在吗?

 

  1. if "var_name" in globals(): 
  2.     print("var_nameexists!")elif "var_name" in locals(): 
  3.     print("var_name existslocally!")else
  4.     print("var_name does notexist."

可以分别利用 globals()和 locals()在全局和本地范围内检查变量。

 

挑战“不可能”的代码:你不知道的Python功能

 

检查变量test1和test2是否在全局或本地

globals和locals这两个作用域函数都会返回字典——因此也执行上述的字典合并语法{**x, **y}。代码在合并范围后的字典中同时检查了test1和test2。

胜过lambda函数

利用lambda函数编写一行简单快捷的程序是很常见的,但是它很少用来建立多参数函数。通常情况如下:

 

  1. do_something = lambda x: x**2 / (1 - x) 

但lambda函数也可用来构建简练的一行式函数:

 

挑战“不可能”的代码:你不知道的Python功能

 

运用lambda函数构建一个带有Cochran方

在到处运用lambda函数之前,你要知道这是Python语法中最忌讳的用法之一。PEP 8——Python的代码风格指南——非常不鼓励把lambda函数作为命名函数。同时,特别是对于数字公式,一行式函数看起来会很奇怪。

因此,可以编写一行式的def 语句来替代lambda:

 

挑战“不可能”的代码:你不知道的Python功能

 

运用单行的def语句构建一个带有Cochran

运用哪一种方法取决于你。除非是想得到消极的反馈,那么请用lambda,否则还是用def吧。

这是五项非常有用的Python功能,如果你不知道的话,就赶快积累起来吧!

 

责任编辑:华轩 来源: 读芯术
相关推荐

2021-01-05 11:22:58

Python字符串代码

2020-01-29 19:40:36

Python美好,一直在身边Line

2021-03-25 11:19:34

Windows 10Windows微软

2021-12-17 00:10:00

ChromeDevtools功能

2019-11-25 14:05:47

Python装饰器数据

2020-06-22 08:09:22

GitHub工具开发

2019-11-20 10:25:06

sudoLinux

2015-08-13 09:03:14

调试技巧

2012-11-23 10:57:44

Shell

2020-09-11 08:48:52

Python 3开发代码

2022-05-01 09:29:19

Chrome面板页面

2014-12-08 10:39:15

2015-09-16 10:48:57

Python

2023-02-27 09:20:24

绝对定位CSS

2023-01-29 09:46:47

Dialog弹窗模态

2022-04-30 19:22:35

Python编程语言

2010-07-26 13:24:11

2015-05-14 15:59:33

DockerLinux容器管理工具

2010-07-21 12:37:11

Linux用户

2010-08-06 13:15:35

点赞
收藏

51CTO技术栈公众号