加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

编程大神进阶之路:Python能力小贴士

发布时间:2019-10-24 13:37:22 所属栏目:建站 来源:机器之心编译
导读:先容 Python 炫酷成果(譬喻,变量解包,偏函数,列举可迭代工具等)的文章层出不穷。可是尚有许多 Python 的编程小能力鲜被说起。因此,本文会试着先容一些其余文章没有提到的小能力,这些小能力也是我平常会用到的的。让我们一探毕竟吧! 清算字符串输入 整
副问题[/!--empirenews.page--]

先容 Python 炫酷成果(譬喻,变量解包,偏函数,列举可迭代工具等)的文章层出不穷。可是尚有许多 Python 的编程小能力鲜被说起。因此,本文会试着先容一些其余文章没有提到的小能力,这些小能力也是我平常会用到的的。让我们一探毕竟吧!

编程大神进阶之路:Python能力小贴士

清算字符串输入

清算用户输入的题目在编程进程中极为常见。凡是环境下,将字符转换为小写或大写就够了,偶然你可以行使正则表达式模块「Regex」完成这项事变。可是假如题目很伟大,也许有更好的要领来办理:

  1. user_input = "Thisnstring hastsome whitespaces...rn" 
  2.  
  3. character_map = { 
  4.     ord('n') : ' ', 
  5.     ord('t') : ' ', 
  6.     ord('r') : None 
  7. user_input.translate(character_map)  # This string has some whitespaces...  

在本例中,你可以看到空格符「 n」和「 t」都被替代成了单个空格,「 r」都被删掉了。这只是个很简朴的例子,我们可以更进一步,行使「unicodedata」措施包天生大型重映射表,并行使个中的「combining()」举办天生和映射,我们可以

迭代器切片(Slice)

假如对迭代器举办切片操纵,会返回一个「TypeError」,提醒天生器工具没有下标,可是我们可以用一个简朴的方案来办理这个题目:

  1. import itertools 
  2.  
  3. s = itertools.islice(range(50), 10, 20)  # <itertools.islice object at 0x7f70fab88138> 
  4. for val in s: 
  5.     ... 

我们可以行使「itertools.islice」建设一个「islice」工具,该工具是一个迭代器,可以发生我们想要的项。但必要留意的是,该操纵要行使切片之前的全部天生器项,以及「islice」工具中的全部项。

跳过可迭代工具的开头

偶然你要处理赏罚一些以不必要的行(如注释)开头的文件。「itertools」再次提供了一种简朴的办理方案:

  1. string_from_file = """ 
  2. // Author: ... 
  3. // License: ... 
  4. // 
  5. // Date: ... 
  6. Actual content... 
  7. """ 
  8.  
  9. import itertools 
  10.  
  11. for line in itertools.dropwhile(lambda line: line.startswith("//"), string_from_file.split("n")): 
  12.     print(line) 

这段代码只打印初始注释部门之后的内容。假如我们只想舍弃可迭代工具的开头部门(本示例中为开头的注释行),而又不知道要这部门有多长时,这种要领就很有效了。

只包括要害字参数的函数 (kwargs)

当我们行使下面的函数时,建设仅仅必要要害字参数作为输入的函数来提供更清楚的函数界说,会很有辅佐:

  1. def test(*, a, b): 
  2.     pass 
  3.  
  4. test("value for a", "value for b")  # TypeError: test() takes 0 positional arguments... 
  5. test(a="value", b="value 2")  # Works... 

如你所见,在要害字参数之前加上一个「*」就可以办理这个题目。假如我们将某些参数放在「*」参数之前,它们显然是位置参数。

建设支持「with」语句的工具

举例而言,我们都知道怎样行使「with」语句打开文件或获取锁,可是我们可以实现本身上下文表达式吗?是的,我们可以行使「__enter__」和「__exit__」来实现上下文打点协议:

  1. class Connection: 
  2.     def __init__(self): 
  3.         ... 
  4.  
  5.     def __enter__(self): 
  6.         # Initialize connection... 
  7.  
  8.     def __exit__(self, type, value, traceback): 
  9.         # Close connection... 
  10.  
  11. with Connection() as c: 
  12.     # __enter__() executes 
  13.     ... 
  14.     # conn.__exit__() executes 

这是在 Python 中最常见的实现上下文打点的要领,可是尚有更简朴的要领:

  1. from contextlib import contextmanager 
  2.  
  3. @contextmanager 
  4. def tag(name): 
  5.     print(f"<{name}>") 
  6.     yield 
  7.     print(f"</{name}>") 
  8.  
  9. with tag("h1"): 
  10.     print("This is Title.") 

上面这段代码行使 contextmanager 的 manager 装饰器实现了内容打点协议。在进入 with 块时 tag 函数的第一部门(在 yield 之前的部门)就已经执行了,然后 with 块才被执行,最后执行 tag 函数的别的部门。

用「__slots__」节减内存

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读