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

3 個值得使用的首次亮相在 Python 3.0 中的特性

開發 后端
這是 Python 3.x 首發特性系列文章的第一篇。Python 3.0 于 2008 年首次發布,盡管它已經發布了一段時間,但它引入的許多特性都沒有被充分利用,而且相當酷。這里有三個你應該知道的。

[[400678]]

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

這是 Python 3.x 首發特性系列文章的第一篇。Python 3.0 于 2008 年首次發布,盡管它已經發布了一段時間,但它引入的許多特性都沒有被充分利用,而且相當酷。這里有三個你應該知道的。

僅限關鍵字參數

Python 3.0 首次引入了僅限關鍵字參數參數的概念。在這之前,不可能指定一個只通過關鍵字傳遞某些參數的 API。這在有許多參數,其中一些參數可能是可選的函數中很有用。

請看一個特意設計的例子:

  1. def show_arguments(base, extended=None, improved=None, augmented=None):
  2. print("base is", base)
  3. if extended is not None:
  4. print("extended is", extended)
  5. if improved is not None:
  6. print("improved is", improved)
  7. if augmented is not None:
  8. print("augmented is", augmented)

當閱讀調用該函數的代碼時,有時很難理解發生了什么:

  1. show_arguments("hello", "extra")
  2.  
  3. base is hello
  4. extended is extra
  5.  
  6. show_arguments("hello", None, "extra")
  7.  
  8. base is hello
  9. improved is extra

雖然可以用關鍵字參數來調用這個函數,但這明顯不是最好的方法。相反,你可以將這些參數標記為僅限關鍵字:

  1. def show_arguments(base, *, extended=None, improved=None, augmented=None):
  2. print("base is", base)
  3. if extended is not None:
  4. print("extended is", extended)
  5. if improved is not None:
  6. print("improved is", improved)
  7. if augmented is not None:
  8. print("augmented is", augmented)

現在,你不能用位置參數傳入額外的參數:

  1. show_arguments("hello", "extra")
  2. ---------------------------------------------------------------------------
  3.  
  4. TypeError Traceback (most recent call last)
  5.  
  6. <ipython-input-7-6000400c4441> in <module>
  7. ----> 1 show_arguments("hello", "extra")
  8.  
  9. TypeError: show_arguments() takes 1 positional argument but 2 were given

對該函數的有效調用更容易預測:

  1. show_arguments("hello", improved="extra")
  2. base is hello
  3. improved is extra

nonlocal

有時,函數式編程的人根據編寫累加器的難易程度來判斷一種語言。累加器是一個函數,當它被調用時,返回目前為止發給它的所有參數的總和。

在 3.0 之前,Python 的標準答案是:

  1. class _Accumulator:
  2. def __init__(self):
  3. self._so_far = 0
  4. def __call__(self, arg):
  5. self._so_far += arg
  6. return self._so_far
  7.  
  8. def make_accumulator():
  9. return _Accumulator()

雖然我承認有些啰嗦,但這確實有效:

  1. acc = make_accumulator()
  2. print("1", acc(1))
  3. print("5", acc(5))
  4. print("3", acc(3))

這樣做的輸出結果將是:

  1. 1 1
  2. 5 6
  3. 3 9

在 Python 3.x 中,nonlocal 關鍵字可以用少得多的代碼實現同樣的行為。

  1. def make_accumulator():
  2. so_far = 0
  3. def accumulate(arg):
  4. nonlocal so_far
  5. so_far += arg
  6. return so_far
  7. return accumulate

雖然累加器是人為的例子,但使用 nonlocal 關鍵字使內部函數擁有具有狀態的的能力是一個強大的工具。

擴展析構

想象一下,你有一個 CSV 文件,每一行由幾個元素組成:

  • 第一個元素是年份
  • 第二個元素是月
  • 其他元素是該月發表的全部文章數,每天一個條目

請注意,最后一個元素是 文章總數,而不是 每天發表的文章。例如,一行的開頭可以是:

  1. 2021,1,5,8,10

這意味著在 2021 年 1 月,第一天發表了 5 篇文章。第二天,又發表了三篇文章,使總數達到 8 篇。第三天,又發表了兩篇文章。

一個月可以有 28 天、30 天或 31 天。提取月份、日期和文章總數有多難?

在 3.0 之前的 Python 版本中,你可能會這樣寫:

  1. year, month, total = row[0], row[1], row[-1]

這是正確的,但它掩蓋了格式。使用擴展析構,同樣可以這樣表達:

  1. year, month, *rest, total = row

這意味著如果該格式改為前綴了一個描述,你可以把代碼改成:

  1. _, year, month, *rest, total = row

而不需要在每個索引中添加 1

接下來是什么?

Python 3.0 和它的后期版本已經推出了 12 年多,但是它的一些功能還沒有被充分利用。在本系列的下一篇文章中,我將會寫另外三個。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-05-28 05:24:22

Python 3.1開發命令

2014-07-01 09:39:07

Orange Box

2009-06-15 14:53:00

NetBeans 6.

2021-03-09 11:20:35

Linux終端

2011-02-25 10:00:04

Windows 8

2013-09-22 16:35:33

H3CCloudPac云業務系統

2009-02-04 17:33:24

ibmdwPython

2021-05-12 10:25:29

開發技能代碼

2013-06-30 09:51:54

SpringWeb服務器

2021-05-29 07:35:13

Python編程語言

2012-06-13 10:26:21

iOS 6

2021-10-27 10:15:25

Python新特性編程語言

2017-03-13 15:27:55

CSS新特性

2020-03-01 14:57:47

Python編程函數

2020-12-09 11:52:28

Python字符串代碼

2024-12-19 07:51:50

NacosAPI 接口三方調用

2009-04-20 09:55:48

2021-05-12 10:25:53

組件驗證漏洞

2010-07-27 09:37:44

Flex

2014-07-31 17:12:35

Cocos Club
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品国产一区二区三区 | 欧美日韩在线免费 | 国产99在线 | 欧美 | 中文字字幕一区二区三区四区五区 | 久草视频在线播放 | 亚洲人成在线观看 | 久久国内精品 | 999国产精品视频 | 日韩三级在线观看 | 日本免费一区二区三区 | 久久综合久久综合久久 | 欧美激情视频一区二区三区免费 | 国产91亚洲精品一区二区三区 | 四季久久免费一区二区三区四区 | 一区二区三区亚洲 | 国产精品国产三级国产aⅴ中文 | 天天爽夜夜爽精品视频婷婷 | 午夜一区 | 国产成人高清 | 给我免费的视频在线观看 | 毛片一区二区三区 | 91大神在线看| 天天拍天天操 | 求毛片 | 中文字幕亚洲精品 | 黄色av网站在线观看 | 免费看日韩视频 | 男人av在线播放 | 一区二区三区国产视频 | 观看av| 国产这里只有精品 | 成人福利影院 | 久久99精品久久久 | 久久久www成人免费无遮挡大片 | 国产精品久久久久久婷婷天堂 | 成人午夜免费网站 | 亚洲一区二区视频 | 亚洲一区二区三区高清 | 久久aⅴ乱码一区二区三区 91综合网 | 国产一级免费在线观看 | 欧美a区 |