成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

3 個到今天仍然有用的 Python 3.2 特性

開發(fā) 后端
這是Python 3.x 首發(fā)特性系列文章中的第三篇。其中一些 Python 版本已經(jīng)推出了一段時間。例如,Python 3.2 是在 2011 年首次發(fā)布的,但其中引入的一些很酷、很有用的特性仍然沒有被使用。下面是其中的三個。

[[402342]]

探索一些未被充分利用但仍然有用的 Python 特性。

這是Python 3.x 首發(fā)特性系列文章中的第三篇。其中一些 Python 版本已經(jīng)推出了一段時間。例如,Python 3.2 是在 2011 年首次發(fā)布的,但其中引入的一些很酷、很有用的特性仍然沒有被使用。下面是其中的三個。

argparse 子命令

argparse 模塊首次出現(xiàn)在 Python 3.2 中。有許多用于命令行解析的第三方模塊。但是內(nèi)置的 argparse 模塊比許多人認(rèn)為的要強大。

要記錄所有的 argparse 的特性,那需要專門寫系列文章。下面是一個例子,說明如何用 argparse 做子命令。

想象一下,一個命令有兩個子命令:negate,需要一個參數(shù),multiply,需要兩個參數(shù):

  1. $ computebot negate 5
  2. -5
  3. $ computebot multiply 2 3
  4. 6
  1. import argparse
  2.  
  3. parser = argparse.ArgumentParser()
  4. subparsers = parser.add_subparsers()

add_subparsers() 方法創(chuàng)建一個對象,你可以向其添加子命令。唯一需要記住的技巧是,你需要添加通過 set_defaults() 調(diào)用的子命令:

  1. negate = subparsers.add_parser("negate")
  2. negate.set_defaults(subcommand="negate")
  3. negate.add_argument("number", type=float)
  1. multiply = subparsers.add_parser("multiply")
  2. multiply.set_defaults(subcommand="multiply")
  3. multiply.add_argument("number1", type=float)
  4. multiply.add_argument("number2", type=float)

我最喜歡的一個 argparse 功能是,因為它把解析和運行分開,測試解析邏輯特別令人愉快。

  1. parser.parse_args(["negate", "5"])
  1. Namespace(number=5.0, subcommand='negate')
  1. parser.parse_args(["multiply", "2", "3"])
  1. Namespace(number1=2.0, number2=3.0, subcommand='multiply')

contextlib.contextmanager

上下文是 Python 中一個強大的工具。雖然很多人 使用 它們,但編寫一個新的上下文常常看起來像一門黑暗藝術(shù)。有了 contextmanager 裝飾器,你所需要的只是一個一次性的生成器。

編寫一個打印出做某事所需時間的上下文,就像這樣簡單:

  1. import contextlib, timeit
  2.  
  3. @contextlib.contextmanager
  4. def timer():
  5. before = timeit.default_timer()
  6. try:
  7. yield
  8. finally:
  9. after = timeit.default_timer()
  10. print("took", after - before)

你可以這樣使用:

  1. import time
  2.  
  3. with timer():
  4. time.sleep(10.5)
  1. took 10.511025413870811`

functools.lru_cache

有時,在內(nèi)存中緩存一個函數(shù)的結(jié)果是有意義的。例如,想象一下經(jīng)典的問題:“有多少種方法可以用 25 美分、1 美分、2 美分和 3 美分可以來換取 1 美元?”

這個問題的代碼可以說是非常簡單:

  1. def change_for_a_dollar():
  2. def change_for(amount, coins):
  3. if amount == 0:
  4. return 1
  5. if amount < 0 or len(coins) == 0:
  6. return 0
  7. some_coin = next(iter(coins))
  8. return (
  9. change_for(amount, coins - set([some_coin]))
  10. +
  11. change_for(amount - some_coin, coins)
  12. )
  13. return change_for(100, frozenset([25, 10, 5, 1]))

在我的電腦上,這需要 13ms 左右:

  1. with timer():
  2. change_for_a_dollar()
  1. took 0.013737603090703487`

事實證明,當(dāng)你計算有多少種方法可以做一些事情,比如用 50 美分找錢,你會重復(fù)使用相同的硬幣。你可以使用 lru_cache 來避免重復(fù)計算。

  1. import functools
  2.  
  3. def change_for_a_dollar():
  4. @functools.lru_cache
  5. def change_for(amount, coins):
  6. if amount == 0:
  7. return 1
  8. if amount < 0 or len(coins) == 0:
  9. return 0
  10. some_coin = next(iter(coins))
  11. return (
  12. change_for(amount, coins - set([some_coin]))
  13. +
  14. change_for(amount - some_coin, coins)
  15. )
  16. return change_for(100, frozenset([25, 10, 5, 1]))
  1. with timer():
  2. change_for_a_dollar()
  1. took 0.004180959425866604`

一行的代價是三倍的改進(jìn)。不錯。

歡迎來到 2011 年

盡管 Python 3.2 是在 10 年前發(fā)布的,但它的許多特性仍然很酷,而且沒有得到充分利用。如果你還沒使用,那么將他們添加到你的工具箱中。 

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2013-06-30 09:51:54

SpringWeb服務(wù)器

2022-08-11 12:28:09

For-elsePython

2022-05-05 19:00:22

PythonPython特性

2009-02-04 17:33:24

ibmdwPython

2021-05-28 05:24:22

Python 3.1開發(fā)命令

2011-02-15 11:08:25

2021-05-20 10:42:59

PythonPython 3.0編程語言

2011-09-30 09:47:15

GNOME 3.2

2013-08-19 16:16:37

2013-08-19 15:53:27

LinuxLinux命令

2020-09-19 17:59:21

sorted()Python函數(shù)

2024-01-15 00:30:04

Python 3語言版本

2020-01-03 10:24:06

Python 開發(fā)編程語言

2024-02-01 12:53:00

PandasPython數(shù)據(jù)

2012-09-19 10:03:07

iPhone 5

2023-06-26 16:13:43

馬達(dá)驅(qū)動模型鴻蒙

2023-05-31 15:45:49

HCS鴻蒙

2018-01-17 17:15:58

Python項目模塊

2010-07-27 09:37:44

Flex

2023-05-18 15:32:02

HTML開發(fā)技巧
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人午夜性成交 | 国产成人免费网站 | 精品国产乱码久久久久久蜜退臀 | 一级黄色片日本 | 欧美日韩一区二区视频在线观看 | 欧美成人免费电影 | 欧美激情视频一区二区三区在线播放 | 久久久精品欧美 | 久久久久久久久蜜桃 | 国产乱码精品一品二品 | 久草.com | 国产清纯白嫩初高生在线播放视频 | 亚洲欧美日韩久久久 | 国产高清视频 | 成人影院在线 | 国产福利在线免费观看 | 日韩成人免费视频 | 久久久久久成人 | 99精品欧美一区二区三区 | 精品永久 | 中文字幕亚洲一区二区三区 | 欧美成人一区二区三区片免费 | 国产精品久久久久久久久久 | 精品一区二区三 | 久久激情视频 | 蜜桃视频在线观看免费视频网站www | 久久久成人免费视频 | 久久蜜桃av一区二区天堂 | 成人片免费看 | 午夜精品视频在线观看 | 国产高清精品一区二区三区 | 国产精品成人在线播放 | 羞羞色视频 | 伊人影院在线观看 | 久久久精品视频免费看 | 日韩国产在线 | 性色视频在线观看 | a欧美| 亚洲人免费视频 | 亚洲男人天堂网 | 老牛影视av一区二区在线观看 |