国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)

這篇具有很好參考價(jià)值的文章主要介紹了一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。
鏈接: https://blog.csdn.net/Ahcao2008

一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)

??摘要

  • 全文介紹python的 setuptools 模塊(一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目)、函數(shù)、類及類的方法和屬性。
  • 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。
  • 是一部不可多得的權(quán)威字典類工具書(shū)。它是系列集的一部分。后續(xù)陸續(xù)發(fā)布、敬請(qǐng)關(guān)注?!驹瓌?chuàng):AhcaoZhu大俠】

??模塊圖

一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)

setuptools
	setuptools._distutils
		◆distutils.util
		◆distutils.dist
		◆distutils.cmd
		setuptools._distutils.archive_util
			setuptools._distutils.log
	setuptools._deprecation_warning
	setuptools.version
		◆pkg_resources
	setuptools.monkey
	setuptools.extension
	setuptools.extern
		setuptools._vendor.packaging
			setuptools._vendor.packaging.__about__
			setuptools.extern.packaging._structures
			setuptools._vendor.packaging._manylinux
			setuptools._vendor.packaging._musllinux
			setuptools.extern.packaging.tags
			setuptools.extern.packaging.utils
			setuptools.extern.packaging.specifiers
		setuptools._vendor.ordered_set
		setuptools._vendor.more_itertools
			setuptools._vendor.more_itertools.recipes
			setuptools._vendor.more_itertools.more
	setuptools._vendor
	setuptools.command
	setuptools.windows_support
	setuptools.config
	setuptools.dist
		setuptools.extern.packaging.version
	setuptools.py34compat
	setuptools._imp
	setuptools.depends
		◆marshal
		◆dis
	setuptools.logging
	setuptools.msvc
		◆subprocess
		◆winreg

??類關(guān)系圖

一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)

◆object
	◆BaseException
		◆Exception
			◆ValueError
				setuptools._vendor.more_itertools.more.UnequalIterablesError
				setuptools.extern.packaging.specifiers.InvalidSpecifier
				setuptools.extern.packaging.utils.InvalidSdistFilename
				setuptools.extern.packaging.utils.InvalidWheelFilename
				setuptools.extern.packaging.version.InvalidVersion
			◆Warning
				setuptools._deprecation_warning.SetuptoolsDeprecationWarning
					setuptools.dist.DistDeprecationWarning
		setuptools._vendor.more_itertools.more.AbortThread
	◆collections.abc.Container
		◆collections.abc.Iterable
			◆collections.abc.Reversible
				◆collections.abc.Sequence
					◆collections.abc.Set
						◆collections.abc.MutableSet
							setuptools._vendor.ordered_set.OrderedSet
					setuptools._vendor.more_itertools.more.SequenceView
					setuptools._vendor.more_itertools.more.numeric_range
	◆distutils.cmd.Command
		setuptools.Command
	◆distutils.dist.Distribution
		setuptools.dist.Distribution
	◆distutils.extension.Extension
		setuptools.extension.Extension
			setuptools.extension.Library
	setuptools.PackageFinder
		setuptools.PEP420PackageFinder
	setuptools._distutils.log.Log
	setuptools._vendor.more_itertools.more.bucket
	setuptools._vendor.more_itertools.more.callback_iter
	setuptools._vendor.more_itertools.more.countable
	setuptools._vendor.more_itertools.more.islice_extended
	setuptools._vendor.more_itertools.more.peekable
	setuptools._vendor.more_itertools.more.run_length
	setuptools._vendor.more_itertools.more.seekable
	setuptools._vendor.more_itertools.more.time_limited
	setuptools._vendor.packaging._manylinux._ELFFileHeader
	setuptools.config.ConfigHandler
		setuptools.config.ConfigMetadataHandler
		setuptools.config.ConfigOptionsHandler
	setuptools.config.StaticModule
	setuptools.depends.Require
	setuptools.extern.VendorImporter
	setuptools.extern.packaging._structures.InfinityType
	setuptools.extern.packaging._structures.NegativeInfinityType
	setuptools.extern.packaging.specifiers.BaseSpecifier
		setuptools.extern.packaging.specifiers.SpecifierSet
		setuptools.extern.packaging.specifiers._IndividualSpecifier
			setuptools.extern.packaging.specifiers.LegacySpecifier
			setuptools.extern.packaging.specifiers.Specifier
	setuptools.extern.packaging.tags.Tag
	setuptools.extern.packaging.version._BaseVersion
		setuptools.extern.packaging.version.LegacyVersion
		setuptools.extern.packaging.version.Version
	setuptools.msvc.EnvironmentInfo
	setuptools.msvc.PlatformInfo
	setuptools.msvc.RegistryInfo
	setuptools.msvc.SystemInfo
	◆str
		setuptools.sic
	◆tuple
		setuptools._vendor.packaging._manylinux._GLibCVersion
		setuptools._vendor.packaging._musllinux._MuslVersion
		setuptools.extern.packaging.version._Version

??模塊全展開(kāi)

??【setuptools】

setuptools, fullname=setuptools, file=setuptools_init_.py

針對(duì)大型或復(fù)雜發(fā)行版的'distutils'擴(kuò)展

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
4 str 6
6 list 2
8 dict 1
9 module 22
10 class 10
11 function 6
13 residual 5
14 system 11
15 private 8
16 all 52

??常量

??模塊

??1 functools

functools, fullname=functools, file=functools.py

??2 os

os, fullname=os, file=os.py

??3 re

re, fullname=re, file=re.py

??4 setuptools._distutils

_distutils, fullname=setuptools.distutils, file=setuptools_distutils_init.py

Python模塊發(fā)布實(shí)用程序的主包。
通常從distutils的設(shè)置腳本中使用
   from distutils.core import setup
   setup (...)

??5 _distutils_hack

_distutils_hack, fullname=_distutils_hack, file=distutils_hack_init.py

??6 setuptools._distutils

_distutils, fullname=setuptools.distutils, file=setuptools_distutils_init.py

??7 setuptools._deprecation_warning

_deprecation_warning, fullname=setuptools._deprecation_warning, file=setuptools_deprecation_warning.py

??8 setuptools.version

version, fullname=setuptools.version, file=setuptools\version.py

??9 setuptools

setuptools, fullname=setuptools, file=setuptools_init_.py

針對(duì)大型或復(fù)雜發(fā)行版的'distutils'擴(kuò)展

??10 setuptools.monkey

monkey, fullname=setuptools.monkey, file=setuptools\monkey.py

distutils 的Monkey補(bǔ)丁。

??11 setuptools.extension

extension, fullname=setuptools.extension, file=setuptools\extension.py

??12 setuptools.extern

extern, fullname=setuptools.extern, file=setuptools\extern_init_.py

??13 setuptools._vendor

_vendor, fullname=setuptools.vendor, file=setuptools_vendor_init.py

??14 setuptools.command

command, fullname=setuptools.command, file=setuptools\command_init_.py

??15 setuptools.windows_support

windows_support, fullname=setuptools.windows_support, file=setuptools\windows_support.py

??16 setuptools.config

config, fullname=setuptools.config, file=setuptools\config.py

??17 setuptools.dist

dist, fullname=setuptools.dist, file=setuptools\dist.py

??18 setuptools.py34compat

py34compat, fullname=setuptools.py34compat, file=setuptools\py34compat.py

??19 setuptools._imp

_imp, fullname=setuptools._imp, file=setuptools_imp.py

重新實(shí)現(xiàn)查找模塊并從已棄用的imp模塊獲取凍結(jié)對(duì)象。

??20 setuptools.depends

depends, fullname=setuptools.depends, file=setuptools\depends.py

??21 setuptools.logging

logging, fullname=setuptools.logging, file=setuptools\logging.py

??22 setuptools.msvc

msvc, fullname=setuptools.msvc, file=setuptools\msvc.py

改進(jìn)了對(duì)Microsoft Visual c++編譯器的支持。
已知支持的編譯器:
--------------------------
Microsoft Visual C++ 9.0:
    Microsoft Visual C++ Compiler for Python 2.7 (x86, amd64)
    Microsoft Windows SDK 6.1 (x86, x64, ia64)
    Microsoft Windows SDK 7.0 (x86, x64, ia64)

Microsoft Visual C++ 10.0:
    Microsoft Windows SDK 7.1 (x86, x64, ia64)

Microsoft Visual C++ 14.X:
    Microsoft Visual C++ Build Tools 2015 (x86, x64, arm)
    Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64)
    Microsoft Visual Studio Build Tools 2019 (x86, x64, arm, arm64)
這也可能支持與兼容的Visual Studio版本一起發(fā)布的編譯器。

??函數(shù)

??23 fnmatchcase(name, pat)

fnmatchcase(name, pat), module=fnmatch, line:64 at fnmatch.py

測(cè)試FILENAME是否與PATTERN匹配,包括大小寫(xiě)。
這是fnmatch()的一個(gè)版本,它不會(huì)對(duì)其參數(shù)進(jìn)行大小寫(xiě)規(guī)范化。

??24 convert_path(pathname)

convert_path(pathname), module=distutils.util, line:166 at site-packages\setuptools_distutils\util.py

返回'pathname'作為本機(jī)文件系統(tǒng)上的名稱,即在'/'上分割它,然后使用當(dāng)前目錄分隔符將其重新組合在一起。
之所以需要,是因?yàn)樵O(shè)置腳本中的文件名總是以Unix風(fēng)格提供的,并且在我們可以在文件系統(tǒng)中實(shí)際使用它們之前必須轉(zhuǎn)換為本地約定。
如果'pathname'以斜杠開(kāi)始或結(jié)束,在非unix系統(tǒng)上引發(fā)ValueError。

??25 _install_setup_requires(attrs)

install_setup_requires(attrs), module=setuptools, line:123 at site-packages\setuptools_init.py

??26 setup(**attrs)

setup(**attrs), module=setuptools, line:151 at site-packages\setuptools_init_.py

通往Distutils的門戶:以高度靈活和用戶驅(qū)動(dòng)的方式完成設(shè)置腳本需要做的所有事情。
簡(jiǎn)單地說(shuō):創(chuàng)建一個(gè)Distribution實(shí)例;查找和解析配置文件;解析命令行;
運(yùn)行其中找到的每個(gè)Distutils命令,這些命令由提供給'setup()'的選項(xiàng)(作為關(guān)鍵字參數(shù))在配置文件和命令行中定制。
Distribution實(shí)例可能是通過(guò)'distclass'關(guān)鍵字參數(shù)提供給'setup'的一個(gè)類的實(shí)例;
如果沒(méi)有提供這樣的類,那么將實(shí)例化Distribution類(在dist.py中)。
'setup'的所有其他參數(shù)('cmdclass'除外)用于設(shè)置Distribution實(shí)例的屬性。
如果提供了'cmdclass'參數(shù),則是一個(gè)將命令名稱映射到命令類的字典。
在命令行上遇到的每個(gè)命令都將被轉(zhuǎn)換為命令類,然后實(shí)例化;
在'cmdclass'中找到的任何類都用于代替默認(rèn)值,即(對(duì)于命令'foo_bar')模塊'distutils.command.foo bar'中的類'foo_bar'。
命令類必須提供一個(gè)'user_options'屬性,該屬性是'distutils‘的選項(xiàng)說(shuō)明符列表。花哨的getopt”。
當(dāng)前命令和下一個(gè)命令之間的命令行選項(xiàng)用于設(shè)置當(dāng)前命令對(duì)象的屬性。
當(dāng)整個(gè)命令行被成功解析后,依次在每個(gè)命令對(duì)象上調(diào)用'run()'方法。
此方法將完全由Distribution對(duì)象(由于其構(gòu)造函數(shù),每個(gè)命令對(duì)象都有對(duì)其的引用)和特定于命令的選項(xiàng)驅(qū)動(dòng),這些選項(xiàng)成為每個(gè)命令對(duì)象的屬性。

??27 _find_all_simple(path)

find_all_simple(path), module=setuptools, line:215 at site-packages\setuptools_init.py

查找'path'下的所有文件

??28 findall(dir=‘.’)

findall(dir=‘.’), module=setuptools, line:227 at site-packages\setuptools_init_.py

查找'dir'下的所有文件并返回完整文件名的列表。
除非dir是'.',返回帶有dir前綴的完整文件名。

??類

??29 distutils.errors.DistutilsOptionError

DistutilsOptionError, distutils.errors.DistutilsOptionError, module=distutils.errors, line:0 at

命令選項(xiàng)中的語(yǔ)法/語(yǔ)義錯(cuò)誤,例如使用相互沖突的選項(xiàng),或不一致的選項(xiàng),拼寫(xiě)錯(cuò)誤的值等。
源自安裝腳本、命令行、配置文件或其他任何東西的選項(xiàng)值之間沒(méi)有區(qū)別,但如果我們“知道”源自安裝腳本的內(nèi)容,我們將引發(fā)DistutilsSetupError。

??30 setuptools._deprecation_warning.SetuptoolsDeprecationWarning

SetuptoolsDeprecationWarning, setuptools._deprecation_warning.SetuptoolsDeprecationWarning, module=setuptools._deprecation_warning, line:1 at site-packages\setuptools_deprecation_warning.py

``setuptools``中警告棄用的基類。這個(gè)類不是從``DeprecationWarning``派生的,因此默認(rèn)情況下是可見(jiàn)的。

??31 setuptools.extension.Extension

Extension, setuptools.extension.Extension, module=setuptools.extension, line:30 at site-packages\setuptools\extension.py

使用'.c'文件代替'.c'文件的擴(kuò)展名'.pyx'的文件

??32 setuptools.dist.Distribution

Distribution, setuptools.dist.Distribution, module=setuptools.dist, line:371 at site-packages\setuptools\dist.py

支持測(cè)試和包數(shù)據(jù)的發(fā)行版。
這是'distutils.dist‘的增強(qiáng)版本。Distribution'有效地將以下新的可選關(guān)鍵字參數(shù)添加到'setup()':
    'install_requires' -一個(gè)字符串或字符串序列,指定安裝發(fā)行版時(shí)需要的項(xiàng)目版本,格式為'pkg_resources.require()'。
                        它們將在安裝包時(shí)自動(dòng)安裝。如果你想使用PyPI中不可用的包,或者想給你的用戶一個(gè)替代的下載位置,
                        你可以在你的項(xiàng)目的“設(shè)置”的“[easy install]”部分添加“查找鏈接”選項(xiàng)。
                        然后,setuptools將掃描列出的網(wǎng)頁(yè),尋找滿足要求的鏈接。
    'extras_require' -一個(gè)字典,將可選的'extras‘的名稱映射到使用這些extras所產(chǎn)生的額外要求。例如:
                        extras_require = dict(reST = ["docutils>=0.3", "reSTedit"])
                        表明發(fā)行版可以選擇性地提供名為"reST"的額外功能,但它只能在安裝了docutils和reSTedit的情況下使用。
                        如果用戶使用EasyInstall安裝您的包并請(qǐng)求您的一個(gè)附加組件,則如果需要,將安裝相應(yīng)的附加需求。
    'test_suite' -為'test'命令運(yùn)行的測(cè)試套件的名稱。
                        如果用戶運(yùn)行'python setup.py test',該包將被安裝,并且指定的測(cè)試套件將運(yùn)行。
                        格式與在'unittest.py'命令行中使用的格式相同。也就是說(shuō),它是要導(dǎo)入并調(diào)用以生成測(cè)試套件的對(duì)象的帶點(diǎn)名稱。
    'package_data' -一個(gè)將包名稱映射到文件名或globs列表的字典,用于查找命名包中包含的數(shù)據(jù)文件。
                    如果字典在(空字符串)下列出了文件名或globs,那么除了特定包的任何名稱外,還將在每個(gè)包中搜索這些名稱。
                    使用這些名稱/globs找到的數(shù)據(jù)文件將與包一起安裝在與包相同的位置。
                    請(qǐng)注意,只要使用'/'作為路徑分隔符,就允許globs引用非包子目錄的內(nèi)容。(Globs在運(yùn)行時(shí)自動(dòng)轉(zhuǎn)換為特定于平臺(tái)的路徑。)
    除了這些新的關(guān)鍵字,這個(gè)類還有幾個(gè)新的方法來(lái)操作分布的內(nèi)容。
    例如,'include()'和'exclude()'方法可以被認(rèn)為是就地添加和減去命令,用于從發(fā)行版中添加或刪除包、模塊、擴(kuò)展等。
method
1 exclude(self, **attrs)

kind=method class=Distribution objtype=function line:1002 at …\lib\site-packages\setuptools\dist.py

從發(fā)行版中刪除以關(guān)鍵字參數(shù)命名的項(xiàng)。
例如,'dist.exclude(py_modules=["x"])'將從發(fā)行版的'py_modules'屬性中刪除'x'。
排除包使用'exclude package()'方法,因此包中包含的所有包、模塊和擴(kuò)展也被排除在外。
目前,此方法僅支持從列表或元組的屬性中排除。
如果你需要在這個(gè)類或子類中添加對(duì)排除其他屬性的支持,你可以添加一個(gè)'_exclude_X'方法,其中'X'是屬性的名稱。
該方法將被調(diào)用,并將值傳遞給'exclude()'。
因此,'dist.exclude(foo={"bar":"baz"})'將嘗試調(diào)用'dist.exclude_foo({"bar":"baz"})',然后它可以處理任何需要的特殊排除邏輯。
2 exclude_package(self, package)

kind=method class=Distribution objtype=function line:936 at …\lib\site-packages\setuptools\dist.py

刪除命名包中的包、模塊和擴(kuò)展
3 fetch_build_egg(self, req)

kind=method class=Distribution objtype=function line:879 at …\lib\site-packages\setuptools\dist.py

取一個(gè)建造所需的egg
4 fetch_build_eggs(self, requires)

kind=method class=Distribution objtype=function line:810 at …\lib\site-packages\setuptools\dist.py

解決安裝前的要求
5 finalize_options(self)

kind=method class=Distribution objtype=function line:821 at …\lib\site-packages\setuptools\dist.py

允許插件對(duì)發(fā)行版應(yīng)用任意操作。
每個(gè)鉤子可以選擇定義一個(gè)“順序”來(lái)影響執(zhí)行的順序。較小的數(shù)字優(yōu)先,默認(rèn)值為0。
6 get_cmdline_options(self)

kind=method class=Distribution objtype=function line:1059 at …\lib\site-packages\setuptools\dist.py

返回所有命令行選項(xiàng)的'{cmd: {opt:val}}'映射。
選項(xiàng)名稱都很長(zhǎng),但不包括前導(dǎo)'-',并且包含破折號(hào)而不是下劃線。
如果該選項(xiàng)不帶參數(shù)(例如:'-quiet'),則'val'為'None'。
注意,配置文件提供的選項(xiàng)被有意排除在外。
7 get_command_class(self, command)

kind=method class=Distribution objtype=function line:885 at …\lib\site-packages\setuptools\dist.py

get_command_class() 的可插入版本
8 get_command_list(self)

kind=method class=Distribution objtype=function line:906 at …\lib\site-packages\setuptools\dist.py

9 get_egg_cache_dir(self)

kind=method class=Distribution objtype=function line:860 at …\lib\site-packages\setuptools\dist.py

10 handle_display_options(self, option_order)

kind=method class=Distribution objtype=function line:1117 at …\lib\site-packages\setuptools\dist.py

如果命令行上有任何非全局的"僅顯示"選項(xiàng)(-help-commands或元數(shù)據(jù)顯示選項(xiàng)),則顯示請(qǐng)求的信息并返回true;否則返回false。
11 has_contents_for(self, package)

kind=method class=Distribution objtype=function line:957 at …\lib\site-packages\setuptools\dist.py

如果'exclude package(package)'將執(zhí)行某些操作,則返回true
12 include(self, **attrs)

kind=method class=Distribution objtype=function line:914 at …\lib\site-packages\setuptools\dist.py

例如,'dist.include(py modules=["x"])'會(huì)將'x'添加到發(fā)行版的'py_modules'屬性中,如果它還不存在的話。
目前,此方法僅支持包含列表或元組的屬性。
如果你需要在這個(gè)或子類中添加對(duì)其他屬性的添加支持,你可以添加一個(gè)' include X'方法,其中'X'是屬性的名稱。
該方法將被調(diào)用,并將值傳遞給'include()'。
因此,'dist.include(foo={"bar":"baz"})'將嘗試調(diào)用'dist._include_foo({"bar":"baz"})',然后它可以處理任何需要的特殊包含邏輯。
13 iter_distribution_names(self)

kind=method class=Distribution objtype=function line:1099 at …\lib\site-packages\setuptools\dist.py

生成發(fā)行版中的所有包、模塊和擴(kuò)展名
14 make_option_lowercase(self, opt, section)

kind=method class=Distribution objtype=function line:738 at …\lib\site-packages\setuptools\dist.py

15 parse_config_files(self, filenames=None, ignore_option_errors=False)

kind=method class=Distribution objtype=function line:797 at …\lib\site-packages\setuptools\dist.py

16 patch_missing_pkg_info(self, attrs)

kind=method class=Distribution objtype=function line:433 at …\lib\site-packages\setuptools\dist.py

17 print_commands(self)

kind=method class=Distribution objtype=function line:898 at …\lib\site-packages\setuptools\dist.py

18 warn_dash_deprecation(self, opt, section)

kind=method class=Distribution objtype=function line:706 at …\lib\site-packages\setuptools\dist.py

??33 setuptools.depends.Require

Require, setuptools.depends.Require, module=setuptools.depends, line:17 at site-packages\setuptools\depends.py

構(gòu)建或安裝發(fā)行版的先決條件
method
1 full_name(self)

kind=method class=Require objtype=function line:35 at …\lib\site-packages\setuptools\depends.py

返回完整的包/發(fā)行版名稱,w/version
2 get_version(self, paths=None, default=“unknown”)

kind=method class=Require objtype=function line:46 at …\lib\site-packages\setuptools\depends.py

獲取已安裝模塊的版本號(hào),'None'或'default'。
如果未找到,則返回'None'。
如果找到,返回提取的版本屬性,如果沒(méi)有指定版本屬性,則返回'default',或者在不導(dǎo)入模塊的情況下無(wú)法確定值。
版本根據(jù)需求的版本格式(如果有的話)進(jìn)行格式化,除非它是'None'或提供的'default'。
3 is_current(self, paths=None)

kind=method class=Require objtype=function line:77 at …\lib\site-packages\setuptools\depends.py

如果'paths'上存在最新的依賴項(xiàng),則返回true
4 is_present(self, paths=None)

kind=method class=Require objtype=function line:73 at …\lib\site-packages\setuptools\depends.py

如果在'paths'上存在依賴,則返回true
5 version_ok(self, version)

kind=method class=Require objtype=function line:41 at …\lib\site-packages\setuptools\depends.py

“版本”是否足夠最新?

??34 setuptools.PackageFinder

PackageFinder, setuptools.PackageFinder, module=setuptools, line:40 at site-packages\setuptools_init_.py

生成一個(gè)目錄中所有Python包的列表
class method
1 find(cls, where=‘.’, exclude=(), include=(‘*’,))

kind=class method class=PackageFinder objtype=classmethod line:46 at …\lib\site-packages\setuptools_init_.py

將函數(shù)轉(zhuǎn)換為類方法。

??35 setuptools.PEP420PackageFinder

PEP420PackageFinder, setuptools.PEP420PackageFinder, module=setuptools, line:113 at site-packages\setuptools_init_.py

??36 distutils.cmd.Command

Command, distutils.cmd.Command, module=distutils.cmd, line:0 at

用于定義命令類的抽象基類“工蜂”
對(duì)命令類的一個(gè)有用的類比是將它們視為具有稱為“options”的局部變量的子例程。
這些選項(xiàng)在initialize_options()中被“聲明”,在finalize_options()中被“定義”(給出它們的最終值,也就是“finalize”),這兩者都必須由每個(gè)命令類定義。
兩者之間的區(qū)別是必要的,因?yàn)檫x項(xiàng)值可能來(lái)自外部世界(命令行,配置文件,…)
),并且任何依賴于其他選項(xiàng)的選項(xiàng)必須在這些外部影響被處理后才計(jì)算——因此'finalize_options()'。
子例程的“主體”是'run()'方法,它根據(jù)其選項(xiàng)的值完成所有工作,該方法也必須由每個(gè)命令類實(shí)現(xiàn)。
data

1 sub_commands=[] kind:data type:list class:<class ‘distutils.cmd.Command’>

method
2 announce()

kind=method class=Command objtype=function

如果當(dāng)前的詳細(xì)級(jí)別大于或等于'level',則將'msg'打印到標(biāo)準(zhǔn)輸出。
3 copy_file()

kind=method class=Command objtype=function

根據(jù)詳細(xì)、干運(yùn)行和強(qiáng)制標(biāo)志復(fù)制一個(gè)文件。
(前兩者默認(rèn)為Distribution對(duì)象中的任何內(nèi)容,而對(duì)于未定義該對(duì)象的命令,后者默認(rèn)為false。)
4 copy_tree()

kind=method class=Command objtype=function

根據(jù)詳細(xì)、干運(yùn)行和強(qiáng)制標(biāo)志復(fù)制整個(gè)目錄樹(shù)。
5 debug_print()

kind=method class=Command objtype=function

如果全局DEBUG(從DISTUTILS_DEBUG環(huán)境變量中獲取)標(biāo)志為真,則打印'msg'到標(biāo)準(zhǔn)輸出。
6 dump_options()

kind=method class=Command objtype=function

7 ensure_dirname()

kind=method class=Command objtype=function

8 ensure_filename()

kind=method class=Command objtype=function

確保'option'是現(xiàn)有文件的名稱。
9 ensure_finalized()

kind=method class=Command objtype=function

10 ensure_string()

kind=method class=Command objtype=function

確保'option'是一個(gè)字符串;如果沒(méi)有定義,將其設(shè)置為'default'。
11 ensure_string_list()

kind=method class=Command objtype=function

確保'option'是一個(gè)字符串列表。
如果'option'當(dāng)前是一個(gè)字符串,我們?cè)?,\s*/或/\s+/上拆分它,所以"foo bar baz", "foo,bar,baz"和"foo,bar baz"都變成["foo", "bar", "baz"]。
12 execute()

kind=method class=Command objtype=function

13 finalize_options()

kind=method class=Command objtype=function

為該命令支持的所有選項(xiàng)設(shè)置最終值。
這總是越晚越好。在完成命令行或其他命令的任何選項(xiàng)賦值之后。
因此,這是編碼選項(xiàng)依賴的地方:如果'foo'依賴于'bar',那么只要'foo'仍然具有在'initialize_options()'中分配的相同值,
那么從'bar'設(shè)置'foo'是安全的。此方法必須由所有命令類實(shí)現(xiàn)。
14 get_command_name()

kind=method class=Command objtype=function

15 get_finalized_command()

kind=method class=Command objtype=function

圍繞Distribution的'get_command_obj()'方法的包裝:
為'command'查找(如果需要?jiǎng)t創(chuàng)建,'create'為true)命令對(duì)象,調(diào)用其'ensure_finalize()'方法,并返回最終的命令對(duì)象。
16 get_sub_commands()

kind=method class=Command objtype=function

確定當(dāng)前發(fā)行版中相關(guān)的子命令(例如,需要運(yùn)行)。
這是基于'sub_commands'類屬性:該列表中的每個(gè)元組可能包含一個(gè)方法,
我們調(diào)用該方法來(lái)確定是否需要為當(dāng)前發(fā)行版運(yùn)行子命令。
返回命令名稱列表。
17 initialize_options()

kind=method class=Command objtype=function

為該命令支持的所有選項(xiàng)設(shè)置默認(rèn)值。
請(qǐng)注意,這些默認(rèn)值可能會(huì)被其他命令、設(shè)置腳本、配置文件或命令行覆蓋。
因此,這里不是編寫(xiě)選項(xiàng)之間依賴關(guān)系的地方;通常,`initialize_options()`的實(shí)現(xiàn)只是一堆 "self.foo = None" 分配。此方法必須由所有命令類實(shí)現(xiàn)。
18 make_archive()

kind=method class=Command objtype=function

19 make_file()

kind=method class=Command objtype=function

處理一個(gè)或多個(gè)輸入文件并生成一個(gè)輸出文件的操作的'execute()'的特殊情況。
工作原理就像'execute()',除了操作被跳過(guò),如果'outfile'已經(jīng)存在并且比'infiles'中列出的所有文件都更新,則打印不同的消息。
如果命令定義了 'self.force' ,如果為true,則無(wú)條件運(yùn)行該命令-不進(jìn)行時(shí)間戳檢查。
20 mkpath()

kind=method class=Command objtype=function

21 move_file()

kind=method class=Command objtype=function

根據(jù)干運(yùn)行標(biāo)志移動(dòng)文件。
22 reinitialize_command()

kind=method class=Command objtype=function

23 run()

kind=method class=Command objtype=function

命令存在的理由:執(zhí)行它要執(zhí)行的操作,由'initialize_options()'中初始化的選項(xiàng)控制,由其他命令、設(shè)置腳本、命令行和配置文件自定義,
并在'finalize_options()'中完成。所有終端輸出和文件系統(tǒng)交互應(yīng)該由'run()'完成。此方法必須由所有命令類實(shí)現(xiàn)。
24 run_command()

kind=method class=Command objtype=function

運(yùn)行其他命令:使用Distribution的'run_command()'方法,該方法在必要時(shí)創(chuàng)建并完成命令對(duì)象,然后調(diào)用其'run()'方法。
25 set_undefined_options()

kind=method class=Command objtype=function

根據(jù)其他命令對(duì)象中相應(yīng)的選項(xiàng)值設(shè)置任何“未定義”選項(xiàng)的值。這里的“未定義”是指 "is None",
這是用于表示選項(xiàng)在'initialize_options()'和'finalize_options()'之間未被更改的約定。
通常從'finalize_options()'調(diào)用,用于依賴于其他命令而不是同一命令的其他選項(xiàng)的選項(xiàng)。
'src_cmd'是另一個(gè)將從中獲取選項(xiàng)值的命令(必要時(shí)將為其創(chuàng)建一個(gè)命令對(duì)象);
其余的參數(shù)是'(src_option,dst_option)'元組,意思是"取'src_cmd'命令對(duì)象中的'src_option'的值,
并將其復(fù)制到當(dāng)前命令對(duì)象中的'dst_option'。
26 spawn()

kind=method class=Command objtype=function

生成一個(gè)關(guān)于干運(yùn)行標(biāo)志的外部命令。
27 warn()

kind=method class=Command objtype=function

??37 setuptools.Command

Command, setuptools.Command, module=setuptools, line:164 at site-packages\setuptools_init_.py

用于定義命令類的抽象基類“工蜂”
對(duì)命令類的一個(gè)有用的類比是將它們視為具有稱為“options”的局部變量的子例程。
這些選項(xiàng)在initialize_options()中被“聲明”,在finalize_options()中被“定義”(給出它們的最終值,也就是“finalize”),
這兩者都必須由每個(gè)命令類定義。兩者之間的區(qū)別是必要的,因?yàn)檫x項(xiàng)值可能來(lái)自外部世界(命令行,配置文件,…)
),并且任何依賴于其他選項(xiàng)的選項(xiàng)必須在這些外部影響被處理后才計(jì)算——因此'finalize_options()'。
子例程的“主體”是'run()'方法,它根據(jù)其選項(xiàng)的值完成所有工作,該方法也必須由每個(gè)命令類實(shí)現(xiàn)。
data

1 command_consumes_arguments=False kind:data type:bool class:<class ‘setuptools.Command’>

method
2 ensure_string_list(self, option)

kind=method class=Command objtype=function line:188 at …\lib\site-packages\setuptools_init_.py

確保'option'是一個(gè)字符串列表。
如果'option'當(dāng)前是一個(gè)字符串,我們?cè)?,\s*/或/\s+/上拆分它,
所以"foo_bar_baz", "foo,bar,baz"和"foo,bar baz"都變成["foo", "bar", "baz"]。
3 reinitialize_command(self, command, reinit_subcommands=0, **kw)

kind=method class=Command objtype=function line:209 at …\lib\site-packages\setuptools_init_.py

??38 setuptools.sic

sic, setuptools.sic, module=setuptools, line:239 at site-packages\setuptools_init_.py

按原樣處理該字符串(https://en.wikipedia.org/wiki/Sic)

??私有或局部

39 _distutils <module ‘distutils’ (<_distutils_hack.DistutilsMetaFinder.spec_for_distutils..DistutilsLoader object at 0x00000195B76DEE88>)>
40 _distutils_hack <module ‘_distutils_hack’ from ‘…\lib\site-packages\_distutils_hack\init.py’>
41 _deprecation_warning <module ‘setuptools._deprecation_warning’ from ‘…\lib\site-packages\setuptools\_deprecation_warning.py’>
42 _vendor <module ‘setuptools._vendor’ from ‘…\lib\site-packages\setuptools\_vendor\init.py’>
43 _imp <module ‘setuptools._imp’ from ‘…\lib\site-packages\setuptools\_imp.py’>
44 _install_setup_requires <function _install_setup_requires at 0x00000195B76A24C8>
45 _Command <class ‘distutils.cmd.Command’>
46 _find_all_simple <function _find_all_simple at 0x00000195B8335948>

??剩余

47 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000195B76A1148>
48 spec ModuleSpec(name=‘setuptools’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x00000195B76A1148>, origin=‘…\lib\site-packages\setuptools\init.py’, submodule_search_locations=[‘…\lib\site-packages\setuptools’])
49 bootstrap_install_from
50 find_packages <bound method PackageFinder.find of <class ‘setuptools.PackageFinder’>>
51 find_namespace_packages <bound method PackageFinder.find of <class ‘setuptools.PEP420PackageFinder’>>

??【distutils.debug】

debug, fullname=distutils.debug, file=distutils\debug.py

??【distutils.errors】

errors, fullname=distutils.errors, file=distutils\errors.py

提供Distutils模塊使用的異常。

??【distutils.fancy_getopt】

fancy_getopt, fullname=distutils.fancy_getopt, file=distutils\fancy_getopt.py

圍繞標(biāo)準(zhǔn)getopt模塊的包裝器,提供一些附加功能。

??【distutils.dep_util】

dep_util, fullname=distutils.dep_util, file=distutils\dep_util.py

用于簡(jiǎn)單的、基于時(shí)間戳的文件和文件組依賴的實(shí)用函數(shù);此外,函數(shù)完全基于這樣的時(shí)間戳依賴性分析。

??【distutils.log】

log, fullname=distutils.log, file=distutils\log.py

一個(gè)類似于PEP 282的簡(jiǎn)單日志機(jī)制。

??【distutils.spawn】

spawn, fullname=distutils.spawn, file=distutils\spawn.py

提供'spawn()'函數(shù),它是各種平臺(tái)特定函數(shù)的前端,用于在子進(jìn)程中啟動(dòng)另一個(gè)程序。還提供了'find executable()'來(lái)搜索給定可執(zhí)行文件名的路徑。

??【distutils.py35compat】

py35compat, fullname=distutils.py35compat, file=distutils\py35compat.py

??【distutils.util】

util, fullname=distutils.util, file=distutils\util.py

distutils。util雜項(xiàng)實(shí)用程序函數(shù)——任何不適合其他*util.py模塊的函數(shù)。

??【distutils.dir_util】

dir_util, fullname=distutils.dir_util, file=distutils\dir_util.py

用于操作目錄和目錄樹(shù)的實(shí)用函數(shù)。

??【distutils.file_util】

file_util, fullname=distutils.file_util, file=distutils\file_util.py

用于操作單個(gè)文件的實(shí)用程序函數(shù)。

??【setuptools._distutils.archive_util】

archive_util, fullname=setuptools._distutils.archive_util, file=setuptools_distutils\archive_util.py

archive_util用于創(chuàng)建存檔文件(tarball、zip文件等)的實(shí)用函數(shù)。

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
4 str 5
8 dict 2
9 module 4
10 class 1
11 function 8
12 builtin_function_or_method 1
13 residual 4
14 system 8
15 private 2
16 all 25

??常量

??dict

1 ARCHIVE_FORMATS {‘gztar’: (<function make_tarball at 0x00000195B774EB88>, [(‘compress’, ‘gzip’)], “gzip’ed tar-file”), ‘bztar’: (<functi…

??模塊

??2 os

os, fullname=os, file=os.py

??3 sys

sys, fullname=sys, file=

??4 zipfile

zipfile, fullname=zipfile, file=zipfile.py

??5 setuptools._distutils.log

log, fullname=setuptools._distutils.log, file=setuptools_distutils\log.py

??函數(shù)

??6 spawn(cmd, search_path=1, verbose=0, dry_run=0, env=None)

spawn(cmd, search_path=1, verbose=0, dry_run=0, env=None), module=distutils.spawn, line:18 at site-packages\setuptools_distutils\spawn.py

在新進(jìn)程中運(yùn)行另一個(gè)程序,指定為命令列表'cmd'。
'cmd'只是新進(jìn)程的參數(shù)列表,例如:Cmd[0]是要運(yùn)行的程序,Cmd[1:]是它的其他參數(shù)。
不能以與其可執(zhí)行文件不同的名稱運(yùn)行程序。
如果'search_path'為true(默認(rèn)值),將使用系統(tǒng)的可執(zhí)行搜索路徑來(lái)查找程序;否則,cmd[0]必須是可執(zhí)行文件的確切路徑。
如果'dry_run'為true,該命令將不會(huì)實(shí)際運(yùn)行。
如果運(yùn)行程序以任何方式失敗,引發(fā)DistutilsExecError;只要成功就可以回報(bào)。

??7 mkpath(name, mode=511, verbose=1, dry_run=0)

mkpath(name, mode=511, verbose=1, dry_run=0), module=distutils.dir_util, line:17 at site-packages\setuptools_distutils\dir_util.py

創(chuàng)建一個(gè)目錄和任何缺失的祖先目錄。
如果目錄已經(jīng)存在(或者如果'name'是空字符串,這意味著當(dāng)前目錄,當(dāng)然是存在的),那么什么都不做。
如果在此過(guò)程中無(wú)法創(chuàng)建某個(gè)目錄(例如:存在一些子路徑,但是文件而不是目錄)。
如果'verbose'為true,則將每個(gè)mkdir的一行摘要打印到stdout。返回實(shí)際創(chuàng)建的目錄列表。

??8 _get_gid(name)

_get_gid(name), module=setuptools._distutils.archive_util, line:31 at site-packages\setuptools_distutils\archive_util.py

返回給定組名的gid。

??9 _get_uid(name)

_get_uid(name), module=setuptools._distutils.archive_util, line:43 at site-packages\setuptools_distutils\archive_util.py

給定用戶名,返回uid。

??10 make_tarball(base_name, base_dir, compress=‘gzip’, verbose=0, dry_run=0, owner=None, group=None)

make_tarball(base_name, base_dir, compress=‘gzip’, verbose=0, dry_run=0, owner=None, group=None), module=setuptools._distutils.archive_util, line:55 at site-packages\setuptools_distutils\archive_util.py

從'base_dir'下的所有文件創(chuàng)建一個(gè)(可能是壓縮的)tar文件。
'compress'必須為"gzip"(默認(rèn)值),"bzip2", "xz", "compress"或None。("compress"將在Python 3.2中棄用)
'owner'和'group'可用于定義正在構(gòu)建的存檔的所有者和組。如果沒(méi)有提供,將使用當(dāng)前的所有者和組。
輸出的tar文件將被命名為“base_dir”+“.tar”,可能會(huì)加上適當(dāng)?shù)膲嚎s擴(kuò)展名(".gz", ".bz2", ".xz" 或“.z”)。
返回輸出文件名。

??11 make_zipfile(base_name, base_dir, verbose=0, dry_run=0)

make_zipfile(base_name, base_dir, verbose=0, dry_run=0), module=setuptools._distutils.archive_util, line:127 at site-packages\setuptools_distutils\archive_util.py

從'base_dir'下的所有文件創(chuàng)建一個(gè)zip文件。
輸出的zip文件將被命名為 'base_name'+“.zip”。
使用"zipfile" Python模塊(如果可用)或InfoZIP "zip"實(shí)用程序(如果安裝并在默認(rèn)搜索路徑上找到)。
如果這兩個(gè)工具都不可用,則引發(fā)DistutilsExecError。返回輸出zip文件的名稱。

??12 check_archive_formats(formats)

check_archive_formats(formats), module=setuptools._distutils.archive_util, line:196 at site-packages\setuptools_distutils\archive_util.py

返回'format'列表中未知的第一個(gè)格式。如果所有格式都已知,則返回None

??13 make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None)

make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None), module=setuptools._distutils.archive_util, line:206 at site-packages\setuptools_distutils\archive_util.py

創(chuàng)建一個(gè)歸檔文件(例如:Zip或tar)。
'base_name'是要?jiǎng)?chuàng)建的文件的名稱,減去任何格式特定的擴(kuò)展名;format為歸檔格式:“zip”、“tar”、“gztar”、“bztar”、“xztar”或“ztar”之一。
'root_dir'是一個(gè)將作為歸檔文件根目錄的目錄;即,在創(chuàng)建歸檔文件之前,我們通常會(huì)將chdir目錄設(shè)置為'root_dir'。
'base_dir'是我們開(kāi)始?xì)w檔的目錄;即,'base_dir'將是歸檔文件中所有文件和目錄的通用前綴。
'root_dir'和'base_dir'都默認(rèn)為當(dāng)前目錄。
返回存檔文件的名稱。'owner'和'group'在創(chuàng)建tar存檔時(shí)使用。
默認(rèn)情況下,使用當(dāng)前所有者和組。

??類

??14 distutils.errors.DistutilsExecError

DistutilsExecError, distutils.errors.DistutilsExecError, module=distutils.errors, line:0 at

??內(nèi)嵌函數(shù)或方法

14 warn

??私有或局部

15 _get_gid <function _get_gid at 0x00000195B7749948>
16 _get_uid <function _get_uid at 0x00000195B774E8B8>

??剩余

17 loader <_frozen_importlib_external.SourceFileLoader object at 0x00000195B774A448>
18 spec ModuleSpec(name=‘setuptools._distutils.archive_util’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x00000195B774A448>, origin=‘…\lib\site-packages\setuptools\_distutils\archive_util.py’)
19 getpwnam
20 getgrnam

??【distutils.cmd】

cmd, fullname=distutils.cmd, file=distutils\cmd.py

提供Command類,它是distutils.command包中命令類的基類。

??【distutils.core】

core, fullname=distutils.core, file=distutils\core.py

要使用Distutils,唯一需要導(dǎo)入的模塊;提供'setup'函數(shù)(將從設(shè)置腳本調(diào)用)。
還間接提供了Distribution和Command類,盡管它們實(shí)際上是在 distutils.dist 和 distutils.cmd 中定義的。

??【distutils.filelist】

filelist, fullname=distutils.filelist, file=distutils\filelist.py

提供filelist類,用于查看文件系統(tǒng)和構(gòu)建文件列表。

??【distutils.ccompiler】

ccompiler, fullname=distutils.ccompiler, file=distutils\ccompiler.py

包含 CCompiler,一個(gè)抽象基類,用于定義Distutils編譯器抽象模型的接口。

??【distutils.msvc9compiler】

msvc9compiler, fullname=distutils.msvc9compiler, file=distutils\msvc9compiler.py

包含MSVCCompiler,一個(gè)用于Microsoft Visual Studio 2008的抽象CCompiler類的實(shí)現(xiàn)。
該模塊兼容vs2005和vs2008。你可以在distutils.msvccompiler中找到對(duì)舊版本VS的支持。

??【distutils._msvccompiler】

_msvccompiler, fullname=distutils._msvccompiler, file=distutils_msvccompiler.py

包含 MSVCCompiler,一個(gè)用于Microsoft Visual Studio 2015的抽象CCompiler類的實(shí)現(xiàn)。
該模塊兼容VS 2015及更高版本。您可以在distutils中找到對(duì)舊版本的遺留支持。msvc9編譯器和distutils。

??【pkg_resources】

pkg_resources, fullname=pkg_resources, file=pkg_resources_init_.py

Package resource API
資源是包中包含的邏輯文件,或邏輯文件子目錄。

??【setuptools._vendor.packaging】

packaging, fullname=setuptools.vendor.packaging, file=setuptools_vendor\packaging_init.py

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
4 str 12
6 list 2
8 dict 1
9 module 8
13 residual 3
14 system 19
15 private 3
16 all 26

??常量

??模塊

??1 setuptools.extern.packaging._structures

_structures, fullname=setuptools.extern.packaging._structures, file=setuptools_vendor\packaging_structures.py

??2 setuptools.extern.packaging.version

version, fullname=setuptools.extern.packaging.version, file=setuptools_vendor\packaging\version.py

??3 setuptools._vendor.packaging._manylinux

_manylinux, fullname=setuptools._vendor.packaging._manylinux, file=setuptools_vendor\packaging_manylinux.py

??4 setuptools._vendor.packaging._musllinux

_musllinux, fullname=setuptools._vendor.packaging._musllinux, file=setuptools_vendor\packaging_musllinux.py

PEP 656支持。
該模塊實(shí)現(xiàn)了檢測(cè)當(dāng)前運(yùn)行的Python是否與musl相關(guān)聯(lián)以及使用哪個(gè)musl版本的邏輯。

??5 setuptools.extern.packaging.tags

tags, fullname=setuptools.extern.packaging.tags, file=setuptools_vendor\packaging\tags.py

??6 setuptools.extern.packaging.utils

utils, fullname=setuptools.extern.packaging.utils, file=setuptools_vendor\packaging\utils.py

??7 setuptools.extern.packaging.specifiers

specifiers, fullname=setuptools.extern.packaging.specifiers, file=setuptools_vendor\packaging\specifiers.py

??私有或局部

8 _structures <module ‘setuptools.extern.packaging._structures’ from ‘…\lib\site-packages\setuptools\_vendor\packaging\_structures.py’>
9 _manylinux <module ‘setuptools._vendor.packaging._manylinux’ from ‘…\lib\site-packages\setuptools\_vendor\packaging\_manylinux.py’>
10 _musllinux <module ‘setuptools._vendor.packaging._musllinux’ from ‘…\lib\site-packages\setuptools\_vendor\packaging\_musllinux.py’>

??【setuptools._vendor.ordered_set】

ordered_set, fullname=setuptools._vendor.ordered_set, file=setuptools_vendor\ordered_set.py

OrderedSet是一個(gè)自定義的MutableSet,它記住了自己的順序,因此每個(gè)條目都有一個(gè)可以查找的索引。
基于Raymond Hettiger最初發(fā)布到ActiveState Recipes的食譜,并在MIT許可下發(fā)布。

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
4 str 6
8 dict 1
9 module 1
10 class 4
11 function 1
13 residual 3
14 system 9
16 all 16

??常量

??模塊

??1 itertools

itertools, fullname=itertools, file=

??函數(shù)

??2 is_iterable(obj)

is_iterable(obj), module=setuptools._vendor.ordered_set, line:22 at site-packages\setuptools_vendor\ordered_set.py

我們是否被要求查找一系列的東西,而不是單個(gè)的東西?我們檢查 `__iter__` 屬性,以便它可以覆蓋該模塊不需要知道的類型,例如NumPy數(shù)組。
然而,字符串應(yīng)該被視為要查找的原子值,而不是可迭代對(duì)象。
元組也是如此,因?yàn)樗鼈兪遣豢勺兊模虼耸怯行У臈l目。
我們不需要檢查Python 2的 `unicode` 類型,因?yàn)樗鼪](méi)有 `__iter__` 屬性。

??類

??3 collections.deque

deque, collections.deque, module=collections, line:-1 at collections_init_.py

??4 collections.abc.MutableSet

MutableSet, collections.abc.MutableSet, module=collections.abc, line:-1 at collections\abc.py

??5 collections.abc.Sequence

Sequence, collections.abc.Sequence, module=collections.abc, line:-1 at collections\abc.py

??6 setuptools._vendor.ordered_set.OrderedSet

OrderedSet, setuptools._vendor.ordered_set.OrderedSet, module=setuptools._vendor.ordered_set, line:42 at site-packages\setuptools_vendor\ordered_set.py

OrderedSet是一個(gè)自定義的MutableSet,它記住了自己的順序,因此每個(gè)條目都有一個(gè)可以查找的索引。
示例:
        >>> OrderedSet([1, 1, 2, 3, 2])
        OrderedSet([1, 2, 3])
method
1 add(self, key)

kind=method class=OrderedSet objtype=function line:145 at …\lib\site-packages\setuptools_vendor\ordered_set.py

將'key'作為一個(gè)項(xiàng)添加到這個(gè)OrderedSet,然后返回它的索引。
如果'key'已經(jīng)在OrderedSet中,則返回它已經(jīng)擁有的索引。
示例:
            >>> oset = OrderedSet()
            >>> oset.append(3)
            0
            >>> print(oset)
            OrderedSet([3])
2 append()

kind=method class=OrderedSet objtype=function

將`key`作為一個(gè)項(xiàng)添加到這個(gè)OrderedSet,然后返回它的索引。
如果`key`已經(jīng)在OrderedSet中,則返回它已經(jīng)擁有的索引。
示例:
            >>> oset = OrderedSet()
            >>> oset.append(3)
            0
            >>> print(oset)
            OrderedSet([3])
3 clear(self)

kind=method class=OrderedSet objtype=function line:252 at …\lib\site-packages\setuptools_vendor\ordered_set.py

從這個(gè)OrderedSet中刪除所有項(xiàng)。
4 copy(self)

kind=method class=OrderedSet objtype=function line:101 at …\lib\site-packages\setuptools_vendor\ordered_set.py

返回該對(duì)象的淺拷貝。
示例:
            >>> this = OrderedSet([1, 2, 3])
            >>> other = this.copy()
            >>> this == other
            True
            >>> this is other
            False
5 difference(self, *sets)

kind=method class=OrderedSet objtype=function line:355 at …\lib\site-packages\setuptools_vendor\ordered_set.py

返回此集合中的所有元素,但不包括其他元素。
示例:
            >>> OrderedSet([1, 2, 3]).difference(OrderedSet([2]))
            OrderedSet([1, 3])
            >>> OrderedSet([1, 2, 3]).difference(OrderedSet([2]), OrderedSet([3]))
            OrderedSet([1])
            >>> OrderedSet([1, 2, 3]) - OrderedSet([2])
            OrderedSet([1, 3])
            >>> OrderedSet([1, 2, 3]).difference()
            OrderedSet([1, 2, 3])
6 difference_update(self, *sets)

kind=method class=OrderedSet objtype=function line:437 at …\lib\site-packages\setuptools_vendor\ordered_set.py

更新此OrderedSet以從一個(gè)或多個(gè)其他集合中刪除項(xiàng)。
示例:
            >>> this = OrderedSet([1, 2, 3])
            >>> this.difference_update(OrderedSet([2, 4]))
            >>> print(this)
            OrderedSet([1, 3])
            >>> this = OrderedSet([1, 2, 3, 4, 5])
            >>> this.difference_update(OrderedSet([2, 4]), OrderedSet([1, 4, 6]))
            >>> print(this)
            OrderedSet([3, 5])
7 discard(self, key)

kind=method class=OrderedSet objtype=function line:228 at …\lib\site-packages\setuptools_vendor\ordered_set.py

移除一個(gè)元素。如果缺席,不要引發(fā)異常。
MutableSet mixin使用這個(gè)來(lái)實(shí)現(xiàn).remove()方法,當(dāng)被要求刪除一個(gè)不存在的項(xiàng)目時(shí),該方法會(huì)引發(fā)一個(gè)錯(cuò)誤。
示例:
            >>> oset = OrderedSet([1, 2, 3])
            >>> oset.discard(2)
            >>> print(oset)
            OrderedSet([1, 3])
            >>> oset.discard(2)
            >>> print(oset)
            OrderedSet([1, 3])
8 get_indexer()

kind=method class=OrderedSet objtype=function

獲取給定條目的索引,如果不存在則引發(fā)IndexError。
'key'可以是一個(gè)非字符串的可迭代項(xiàng),在這種情況下,它返回一個(gè)索引列表。
示例:
            >>> oset = OrderedSet([1, 2, 3])
            >>> oset.index(2)
            1
9 get_loc()

kind=method class=OrderedSet objtype=function

獲取給定條目的索引,如果不存在則引發(fā)IndexError。
`key`可以是一個(gè)非字符串的可迭代項(xiàng),在這種情況下,它返回一個(gè)索引列表。
示例:
            >>> oset = OrderedSet([1, 2, 3])
            >>> oset.index(2)
            1
10 index(self, key)

kind=method class=OrderedSet objtype=function line:188 at …\lib\site-packages\setuptools_vendor\ordered_set.py

獲取給定條目的索引,如果不存在則引發(fā)IndexError。
`key`可以是一個(gè)非字符串的可迭代項(xiàng),在這種情況下,它返回一個(gè)索引列表。
示例:
            >>> oset = OrderedSet([1, 2, 3])
            >>> oset.index(2)
            1
11 intersection(self, *sets)

kind=method class=OrderedSet objtype=function line:333 at …\lib\site-packages\setuptools_vendor\ordered_set.py

返回所有集合之間的公共元素。
順序僅由第一個(gè)集合定義。示例:
            >>> oset = OrderedSet.intersection(OrderedSet([0, 1, 2, 3]), [1, 2, 3])
            >>> print(oset)
            OrderedSet([1, 2, 3])
            >>> oset.intersection([2, 4, 5], [1, 2, 3, 4])
            OrderedSet([2])
            >>> oset.intersection()
            OrderedSet([1, 2, 3])
12 intersection_update(self, other)

kind=method class=OrderedSet objtype=function line:457 at …\lib\site-packages\setuptools_vendor\ordered_set.py

更新此OrderedSet以僅保留另一個(gè)集合中的項(xiàng),并保留它們?cè)谠摷现械捻樞颉?示例:
            >>> this = OrderedSet([1, 4, 3, 5, 7])
            >>> other = OrderedSet([9, 7, 1, 3, 2])
            >>> this.intersection_update(other)
            >>> print(this)
            OrderedSet([1, 3, 7])
13 issubset(self, other)

kind=method class=OrderedSet objtype=function line:377 at …\lib\site-packages\setuptools_vendor\ordered_set.py

報(bào)告其他集合是否包含此集合。
示例:
            >>> OrderedSet([1, 2, 3]).issubset({1, 2})
            False
            >>> OrderedSet([1, 2, 3]).issubset({1, 2, 3, 4})
            True
            >>> OrderedSet([1, 2, 3]).issubset({1, 4, 3, 5})
            False
14 issuperset(self, other)

kind=method class=OrderedSet objtype=function line:393 at …\lib\site-packages\setuptools_vendor\ordered_set.py

報(bào)告此集合是否包含另一個(gè)集合。示例:
            >>> OrderedSet([1, 2]).issuperset([1, 2, 3])
            False
            >>> OrderedSet([1, 2, 3, 4]).issuperset({1, 2, 3})
            True
            >>> OrderedSet([1, 4, 3, 5]).issuperset({1, 2, 3})
            False
15 pop(self)

kind=method class=OrderedSet objtype=function line:209 at …\lib\site-packages\setuptools_vendor\ordered_set.py

移除并返回集合中的最后一個(gè)元素。
如果集合為空則引發(fā)KeyError。示例:
            >>> oset = OrderedSet([1, 2, 3])
            >>> oset.pop()
            3
16 symmetric_difference(self, other)

kind=method class=OrderedSet objtype=function line:409 at …\lib\site-packages\setuptools_vendor\ordered_set.py

返回兩個(gè)OrderedSets的對(duì)稱差值作為一個(gè)新集合。
也就是說(shuō),新集合將包含恰好在其中一個(gè)集合中的所有元素。
它們的順序?qū)⒈3植蛔儯琡self`的元素位于`other`的元素之前。
示例:
            >>> this = OrderedSet([1, 4, 3, 5, 7])
            >>> other = OrderedSet([9, 7, 1, 3, 2])
            >>> this.symmetric_difference(other)
            OrderedSet([4, 5, 9, 2])
17 symmetric_difference_update(self, other)

kind=method class=OrderedSet objtype=function line:472 at …\lib\site-packages\setuptools_vendor\ordered_set.py

更新此OrderedSet以從另一個(gè)集合中刪除項(xiàng)目,然后從另一個(gè)集合中添加此集合中不存在的項(xiàng)目。
示例:
            >>> this = OrderedSet([1, 4, 3, 5, 7])
            >>> other = OrderedSet([9, 7, 1, 3, 2])
            >>> this.symmetric_difference_update(other)
            >>> print(this)
            OrderedSet([4, 5, 9, 2])
18 union(self, *sets)

kind=method class=OrderedSet objtype=function line:310 at …\lib\site-packages\setuptools_vendor\ordered_set.py

組合所有獨(dú)特的物品。每個(gè)項(xiàng)的順序由其第一次出現(xiàn)定義。
示例:
            >>> oset = OrderedSet.union(OrderedSet([3, 1, 4, 1, 5]), [1, 3], [2, 0])
            >>> print(oset)
            OrderedSet([3, 1, 4, 5, 2, 0])
            >>> oset.union([8, 9])
            OrderedSet([3, 1, 4, 5, 2, 0, 8, 9])
            >>> oset | {10}
            OrderedSet([3, 1, 4, 5, 2, 0, 10])
19 update(self, sequence)

kind=method class=OrderedSet objtype=function line:166 at …\lib\site-packages\setuptools_vendor\ordered_set.py

用給定的可迭代序列更新集合,然后返回最后插入元素的索引。
示例:
            >>> oset = OrderedSet([1, 2, 3])
            >>> oset.update([3, 1, 5, 1, 4])
            4
            >>> print(oset)
            OrderedSet([1, 2, 3, 5, 4])

??剩余

7 loader <_frozen_importlib_external.SourceFileLoader object at 0x0000028306DCD388>
8 spec ModuleSpec(name=‘setuptools.extern.ordered_set’, loader=<setuptools.extern.VendorImporter object at 0x0000028306DB7E88>)
9 SLICE_ALL slice(None, None, None)

??【setuptools._vendor.more_itertools】

more_itertools, fullname=setuptools.vendor.more_itertools, file=setuptools_vendor\more_itertools_init.py

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
4 str 5
6 list 1
8 dict 1
9 module 2
10 class 12
11 function 100
13 residual 3
14 system 10
16 all 124

??常量

??模塊

??1 setuptools._vendor.more_itertools.recipes

recipes, fullname=setuptools._vendor.more_itertools.recipes, file=setuptools_vendor\more_itertools\recipes.py

從itertools文檔的recipes部分導(dǎo)入。
所有函數(shù)都取自itertools庫(kù)docs[1]的recipes部分。
一些向后兼容的可用性改進(jìn)已經(jīng)完成。
[參見(jiàn)1](http://docs.python.org/library/itertools.html#recipes)

??2 setuptools._vendor.more_itertools.more

more, fullname=setuptools._vendor.more_itertools.more, file=setuptools_vendor\more_itertools\more.py

??函數(shù)

??3 adjacent(predicate, iterable, distance=1)

adjacent(predicate, iterable, distance=1), module=setuptools._vendor.more_itertools.more, line:1805 at site-packages\setuptools_vendor\more_itertools\more.py

在 `(bool, item)` 元組上返回一個(gè)可迭代對(duì)象,其中`item`從*iterable*中提取,`bool`指示該項(xiàng)目是否滿足*謂詞*或與滿足*謂詞*的項(xiàng)目相鄰。
    例如,要查找項(xiàng)是否與``3``相鄰:
        >>> list(adjacent(lambda x: x == 3, range(6)))
        [(False, 0), (False, 1), (True, 2), (True, 3), (True, 4), (False, 5)]
    設(shè)置*distance*以更改相鄰的計(jì)數(shù)。例如,要查找項(xiàng)目是否與``3``相差兩個(gè)位置:
        >>> list(adjacent(lambda x: x == 3, range(6), distance=2))
        [(False, 0), (True, 1), (True, 2), (True, 3), (True, 4), (True, 5)]
    這對(duì)于將搜索函數(shù)的結(jié)果上下文化很有用。
    例如,代碼比較工具可能想要識(shí)別已更改的行,但也要識(shí)別周圍的行,以便向查看者提供diff上下文。
    對(duì)于可迭代對(duì)象中的每個(gè)項(xiàng),謂詞函數(shù)只被調(diào)用一次。
    另請(qǐng)參見(jiàn) :func:`groupby_transform` ,它可以與此函數(shù)一起使用,對(duì)具有相同`bool`值的項(xiàng)范圍進(jìn)行分組。

??4 always_iterable(obj, base_type=(<class ‘str’>, <class ‘bytes’>))

always_iterable(obj, base_type=(<class ‘str’>, <class ‘bytes’>)), module=setuptools._vendor.more_itertools.more, line:1752 at site-packages\setuptools_vendor\more_itertools\more.py

    如果*obj*是可迭代的,返回一個(gè)遍歷其項(xiàng)的迭代器:
        >>> obj = (1, 2, 3)
        >>> list(always_iterable(obj))
        [1, 2, 3]
    如果*obj*不是可迭代的,返回一個(gè)包含*obj*:
        >>> obj = 1
        >>> list(always_iterable(obj))
        [1]
    如果*obj*是``None``,返回一個(gè)空的可迭代對(duì)象:
        >>> obj = None
        >>> list(always_iterable(None))
        []
    默認(rèn)情況下,二進(jìn)制字符串和文本字符串不被認(rèn)為是可迭代的:
        >>> obj = 'foo'
        >>> list(always_iterable(obj))
        ['foo']
    如果設(shè)置了*base_type*, ``isinstance(obj, base_type)`` 返回``True``的對(duì)象將不被認(rèn)為是可迭代的。
        >>> obj = {'a': 1}
        >>> list(always_iterable(obj))  # Iterate over the dict's keys
        ['a']
        >>> list(always_iterable(obj, base_type=dict))  # Treat dicts as a unit
        [{'a': 1}]
    將 *base_type* 設(shè)置為``None``以避免任何特殊處理并將Python認(rèn)為可迭代的對(duì)象視為可迭代的:
        >>> obj = 'foo'
        >>> list(always_iterable(obj, base_type=None))
        ['f', 'o', 'o']

??5 always_reversible(iterable)

always_reversible(iterable), module=setuptools._vendor.more_itertools.more, line:2410 at site-packages\setuptools_vendor\more_itertools\more.py

:func:`func`的擴(kuò)展,支持所有可迭代對(duì)象,而不僅僅是那些實(shí)現(xiàn) ``Reversible`` 或 ``Sequence`` 協(xié)議的對(duì)象。
        >>> print(*always_reversible(x for x in range(3)))
        2 1 0
    如果可迭代對(duì)象已經(jīng)是可逆的,此函數(shù)返回 :func:`reversed()` 的結(jié)果。
    如果可迭代對(duì)象不可逆,則此函數(shù)將緩存可迭代對(duì)象中的剩余項(xiàng),并以相反的順序生成它們,這可能需要大量存儲(chǔ)空間。

??6 chunked(iterable, n, strict=False)

chunked(iterable, n, strict=False), module=setuptools._vendor.more_itertools.more, line:127 at site-packages\setuptools_vendor\more_itertools\more.py

    將*iterable*分解為長(zhǎng)度為*n*的列表:
        >>> list(chunked([1, 2, 3, 4, 5, 6], 3))
        [[1, 2, 3], [4, 5, 6]]
    默認(rèn)情況下,如果*iterable*的長(zhǎng)度不能被*n*整除,則最后生成的列表將少于*n*個(gè)元素]:
        >>> list(chunked([1, 2, 3, 4, 5, 6, 7, 8], 3))
        [[1, 2, 3], [4, 5, 6], [7, 8]]
    要使用填充值,請(qǐng)參閱:func:`grouper` 。
    如果*iterable*的長(zhǎng)度不能被*n*整除,而*strict*是``True``,那么``ValueError``將在最后一個(gè)列表生成之前引發(fā)。

??7 circular_shifts(iterable)

circular_shifts(iterable), module=setuptools._vendor.more_itertools.more, line:2750 at site-packages\setuptools_vendor\more_itertools\more.py

返回*iterable*的循環(huán)移位列表。
    >>> circular_shifts(range(4))
    [(0, 1, 2, 3), (1, 2, 3, 0), (2, 3, 0, 1), (3, 0, 1, 2)]

??8 collapse(iterable, base_type=None, levels=None)

collapse(iterable, base_type=None, levels=None), module=setuptools._vendor.more_itertools.more, line:1020 at site-packages\setuptools_vendor\more_itertools\more.py

    將具有多層嵌套的可迭代對(duì)象(例如,元組列表的列表)扁平化為不可迭代類型。
        >>> iterable = [(1, 2), ([3, 4], [[5], [6]])]
        >>> list(collapse(iterable))
        [1, 2, 3, 4, 5, 6]
    二進(jìn)制字符串和文本字符串不被認(rèn)為是可迭代的,不會(huì)被折疊。
    為了避免崩潰的其他類型,指定 *base_type*:
        >>> iterable = ['ab', ('cd', 'ef'), ['gh', 'ij']]
        >>> list(collapse(iterable, base_type=tuple))
        ['ab', ('cd', 'ef'), 'gh', 'ij']
    指定*levels*以在某一關(guān)卡后停止扁平化:
        >>> iterable = [('a', ['b']), ('c', ['d'])]
        >>> list(collapse(iterable))  # Fully flattened
        ['a', 'b', 'c', 'd']
        >>> list(collapse(iterable, levels=1))  # Only one level flattened
        ['a', ['b'], 'c', ['d']]

??9 collate(*iterables, **kwargs)

collate(*iterables, **kwargs), module=setuptools._vendor.more_itertools.more, line:399 at site-packages\setuptools_vendor\more_itertools\more.py

    返回幾個(gè)已經(jīng)排序的*可迭代對(duì)象*中的每個(gè)項(xiàng)的排序合并。
        >>> list(collate('ACDZ', 'AZ', 'JKL'))
        ['A', 'A', 'C', 'D', 'J', 'K', 'L', 'Z', 'Z']
    惰性工作,只保留每個(gè)可迭代對(duì)象的下一個(gè)值在內(nèi)存中。
    例如,使用:func:`func`來(lái)對(duì)內(nèi)存中無(wú)法容納的項(xiàng)執(zhí)行n向歸并排序。
    如果指定了*key*函數(shù),則可迭代對(duì)象將根據(jù)其結(jié)果排序:
        >>> key = lambda s: int(s)  # Sort by numeric value, not by string
        >>> list(collate(['1', '10'], ['2', '11'], key=key))
        ['1', '2', '10', '11']
    如果*可迭代對(duì)象*按降序排序,則將*reverse*設(shè)置為``True``:
        >>> list(collate([5, 3, 1], [4, 2, 0], reverse=True))
        [5, 4, 3, 2, 1, 0]
    如果傳入的可迭代對(duì)象的元素?zé)o序,則可能會(huì)得到意想不到的結(jié)果。
    在Python 3.5+中,此函數(shù)是 :func:`heapq.merge` 的別名。

??10 consecutive_groups(iterable, ordering=<function at 0x0000028306E0C5E8>)

consecutive_groups(iterable, ordering=<function at 0x0000028306E0C5E8>), module=setuptools._vendor.more_itertools.more, line:2428 at site-packages\setuptools_vendor\more_itertools\more.py

    使用:func:'itertools.groupby'生成連續(xù)條目的組。
    *ordering*函數(shù)通過(guò)返回兩個(gè)項(xiàng)的位置來(lái)確定它們是否相鄰。
    缺省情況下,排序函數(shù)為恒等函數(shù)。這適用于查找數(shù)字的運(yùn)行:
        >>> iterable = [1, 10, 11, 12, 20, 30, 31, 32, 33, 40]
        >>> for group in consecutive_groups(iterable):
        ...     print(list(group))
        [1]
        [10, 11, 12]
        [20]
        [30, 31, 32, 33]
        [40]
    要查找相鄰字母的運(yùn)行,請(qǐng)嘗試使用字母字符串的:meth:`meth`方法:
        >>> from string import ascii_lowercase
        >>> iterable = 'abcdfgilmnop'
        >>> ordering = ascii_lowercase.index
        >>> for group in consecutive_groups(iterable, ordering):
        ...     print(list(group))
        ['a', 'b', 'c', 'd']
        ['f', 'g']
        ['i']
        ['l', 'm', 'n', 'o', 'p']
    每一組連續(xù)的項(xiàng)目都是一個(gè)迭代器,共享它的源 *iterable*。
    當(dāng)一個(gè)輸出組被推進(jìn)時(shí),前一個(gè)組不再可用,除非它的元素被復(fù)制(例如,復(fù)制到一個(gè)“列表”中)。
        >>> iterable = [1, 2, 11, 12, 21, 22]
        >>> saved_groups = []
        >>> for group in consecutive_groups(iterable):
        ...     saved_groups.append(list(group))  # Copy group elements
        >>> saved_groups
        [[1, 2], [11, 12], [21, 22]]

??11 consumer(func)

consumer(func), module=setuptools._vendor.more_itertools.more, line:437 at site-packages\setuptools_vendor\more_itertools\more.py

自動(dòng)將pep -342風(fēng)格的“反向迭代器”推進(jìn)到其第一個(gè)生成點(diǎn)的裝飾器,因此您不必手動(dòng)調(diào)用``next()``。
        >>> @consumer
        ... def tally():
        ...     i = 0
        ...     while True:
        ...         print('Thing number %s is %s.' % (i, (yield)))
        ...         i += 1
        ...
        >>> t = tally()
        >>> t.send('red')
        Thing number 0 is red.
        >>> t.send('fish')
        Thing number 1 is fish.
    如果沒(méi)有裝飾器,你就必須在使用t.send()之前調(diào)用 ``next(t)``。

??12 count_cycle(iterable, n=None)

count_cycle(iterable, n=None), module=setuptools._vendor.more_itertools.more, line:2106 at site-packages\setuptools_vendor\more_itertools\more.py

從*iterable*到*n*次循環(huán)遍歷項(xiàng)目,生成每個(gè)項(xiàng)目完成循環(huán)的次數(shù)。
如果省略*n*,則該過(guò)程無(wú)限重復(fù)。
    >>> list(count_cycle('AB', 3))
    [(0, 'A'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A'), (2, 'B')]

??13 mark_ends(iterable)

mark_ends(iterable), module=setuptools._vendor.more_itertools.more, line:2122 at site-packages\setuptools_vendor\more_itertools\more.py

生成形式為``(is first, is last, item)``的三元組。
    >>> list(mark_ends('ABC'))
    [(True, False, 'A'), (False, False, 'B'), (False, True, 'C')]
在循環(huán)遍歷可迭代對(duì)象以對(duì)其第一項(xiàng)和/或最后項(xiàng)采取特殊操作時(shí)使用:
    >>> iterable = ['Header', 100, 200, 'Footer']
    >>> total = 0
    >>> for is_first, is_last, item in mark_ends(iterable):
    ...     if is_first:
    ...         continue  # Skip the header
    ...     if is_last:
    ...         continue  # Skip the footer
    ...     total += item
    >>> print(total)
    300

??14 difference(iterable, func=, *, initial=None)

difference(iterable, func=, *, initial=None), module=setuptools._vendor.more_itertools.more, line:2476 at site-packages\setuptools_vendor\more_itertools\more.py

    這個(gè)函數(shù)是 :func:`itertools.accumulate` 的逆函數(shù)。
    默認(rèn)情況下,它將使用 :func:`operator.sub` 計(jì)算*iterable*的第一個(gè)差值。
        >>> from itertools import accumulate
        >>> iterable = accumulate([0, 1, 2, 3, 4])  # produces 0, 1, 3, 6, 10
        >>> list(difference(iterable))
        [0, 1, 2, 3, 4]
    *func*默認(rèn)為 :func:`operator.sub`,但可以指定其他函數(shù)。它們將被應(yīng)用如下:
        A, B, C, D, ... --> A, func(B, A), func(C, B), func(D, C), ...
    例如,要執(zhí)行累進(jìn)除法:
        >>> iterable = [1, 2, 6, 24, 120]
        >>> func = lambda x, y: x // y
        >>> list(difference(iterable, func))
        [1, 2, 3, 4, 5]
    如果設(shè)置了*initial*關(guān)鍵字,則在計(jì)算連續(xù)差時(shí)將跳過(guò)第一個(gè)元素。
        >>> it = [10, 11, 13, 16]  # from accumulate([1, 2, 3], initial=10)
        >>> list(difference(it, initial=10))
        [1, 2, 3]

??15 distinct_combinations(iterable, r)

distinct_combinations(iterable, r), module=setuptools._vendor.more_itertools.more, line:3195 at site-packages\setuptools_vendor\more_itertools\more.py

從*iterable*中獲取*r*項(xiàng)的不同組合。
        >>> list(distinct_combinations([0, 0, 1], 2))
        [(0, 0), (0, 1)]
相當(dāng)于``set(combination (iterable))``,只是不會(huì)生成并丟棄重復(fù)項(xiàng)。對(duì)于較大的輸入序列,這要有效得多。

??16 distinct_permutations(iterable, r=None)

distinct_permutations(iterable, r=None), module=setuptools._vendor.more_itertools.more, line:581 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中元素的連續(xù)不同排列。
        >>> sorted(distinct_permutations([1, 0, 1]))
        [(0, 1, 1), (1, 0, 1), (1, 1, 0)]
    等價(jià)于``set(permutations(iterable))``,不同之處在于重復(fù)項(xiàng)不會(huì)生成并被丟棄。
    對(duì)于較大的輸入序列,這要有效得多。
    當(dāng)輸入可迭代對(duì)象中存在重復(fù)元素時(shí),就會(huì)出現(xiàn)重復(fù)排列。返回的項(xiàng)數(shù)為
        `n! / (x_1! * x_2! * ... * x_n!)`,
    其中`n`是輸入項(xiàng)的總數(shù),每個(gè) `x_i`  是輸入序列中不同項(xiàng)的計(jì)數(shù)。
    如果給定*r*,則只產(chǎn)生*r*長(zhǎng)度的排列。
        >>> sorted(distinct_permutations([1, 0, 1], r=2))
        [(0, 1), (1, 0), (1, 1)]
        >>> sorted(distinct_permutations(range(3), r=2))
        [(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]

??17 distribute(n, iterable)

distribute(n, iterable), module=setuptools._vendor.more_itertools.more, line:1419 at site-packages\setuptools_vendor\more_itertools\more.py

    將*iterable*中的項(xiàng)分發(fā)到*n*個(gè)較小的可迭代對(duì)象中。
        >>> group_1, group_2 = distribute(2, [1, 2, 3, 4, 5, 6])
        >>> list(group_1)
        [1, 3, 5]
        >>> list(group_2)
        [2, 4, 6]
    如果*iterable*的長(zhǎng)度不能被*n*整除,則返回的可迭代對(duì)象的長(zhǎng)度將不相同:
        >>> children = distribute(3, [1, 2, 3, 4, 5, 6, 7])
        >>> [list(c) for c in children]
        [[1, 4, 7], [2, 5], [3, 6]]
    如果*iterable*的長(zhǎng)度小于*n*,則最后返回的可迭代對(duì)象將為空:
        >>> children = distribute(5, [1, 2, 3])
        >>> [list(c) for c in children]
        [[1], [2], [3], [], []]
    此函數(shù)使用:func:`itertools。并且可能需要大量的存儲(chǔ)空間。如果你需要較小的可迭代對(duì)象中的順序項(xiàng)與原始可迭代對(duì)象匹配,請(qǐng)參見(jiàn):func:`func`。

??18 divide(n, iterable)

divide(n, iterable), module=setuptools._vendor.more_itertools.more, line:1701 at site-packages\setuptools_vendor\more_itertools\more.py

    將*iterable*中的元素劃分為*n*個(gè)部分,保持順序。
        >>> group_1, group_2 = divide(2, [1, 2, 3, 4, 5, 6])
        >>> list(group_1)
        [1, 2, 3]
        >>> list(group_2)
        [4, 5, 6]
    如果*iterable*的長(zhǎng)度不能被*n*整除,則返回的可迭代對(duì)象的長(zhǎng)度將不相同:
        >>> children = divide(3, [1, 2, 3, 4, 5, 6, 7])
        >>> [list(c) for c in children]
        [[1, 2, 3], [4, 5], [6, 7]]
    如果可迭代對(duì)象的長(zhǎng)度小于n,那么最后返回的可迭代對(duì)象將為空:
        >>> children = divide(5, [1, 2, 3])
        >>> [list(c) for c in children]
        [[1], [2], [3], [], []]
    此函數(shù)將在返回前耗盡可迭代對(duì)象,并且可能需要大量存儲(chǔ)空間。如果順序不重要,請(qǐng)參閱:func:`func`,它不會(huì)首先將可迭代對(duì)象拉入內(nèi)存。

??19 exactly_n(iterable, n, predicate=<class ‘bool’>)

exactly_n(iterable, n, predicate=<class ‘bool’>), module=setuptools._vendor.more_itertools.more, line:2732 at site-packages\setuptools_vendor\more_itertools\more.py

    根據(jù)*predicate*函數(shù),如果可迭代對(duì)象中恰好有``n``項(xiàng)為``True``,則返回``True``。
        >>> exactly_n([True, True, False], 2)
        True
        >>> exactly_n([True, True, False], 1)
        False
        >>> exactly_n([0, 1, 2, 3, 4, 5], 3, lambda x: x < 3)
        True
    該可迭代對(duì)象將被推進(jìn)到遇到 ``n + 1`` 真值項(xiàng),因此避免在無(wú)限可迭代對(duì)象上調(diào)用它。

??20 filter_except(validator, iterable, *exceptions)

filter_except(validator, iterable, *exceptions), module=setuptools._vendor.more_itertools.more, line:3235 at site-packages\setuptools_vendor\more_itertools\more.py

    從*iterable*中生成*validator*函數(shù)不會(huì)引發(fā)指定的*異常之一的項(xiàng)。
    對(duì)*iterable*中的每個(gè)項(xiàng)調(diào)用*validator*。
    它應(yīng)該是一個(gè)接受一個(gè)參數(shù)并在該參數(shù)無(wú)效時(shí)引發(fā)異常的函數(shù)。
        >>> iterable = ['1', '2', 'three', '4', None]
        >>> list(filter_except(int, iterable, ValueError, TypeError))
        ['1', '2', '4']
    如果由*validator*引發(fā)的異常不是由*exceptions*給出的異常,則會(huì)像正常一樣引發(fā)。

??21 first(iterable, default=<object object at 0x000002830651A4A0>)

first(iterable, default=<object object at 0x000002830651A4A0>), module=setuptools._vendor.more_itertools.more, line:160 at site-packages\setuptools_vendor\more_itertools\more.py

    返回*iterable*的第一項(xiàng),如果*iterable*為空則返回*default*。
            >>> first([0, 1, 2, 3])
            0
            >>> first([], 'some default')
            'some default'
    如果未提供*default*且可迭代對(duì)象中沒(méi)有項(xiàng),則引發(fā)``ValueError``。
    :func:`func`在您有一個(gè)難以檢索的值的生成器并想要任意一個(gè)值時(shí)非常有用。它比 ``next(iter(iterable), default)`` 略短。

??22 groupby_transform(iterable, keyfunc=None, valuefunc=None, reducefunc=None)

groupby_transform(iterable, keyfunc=None, valuefunc=None, reducefunc=None), module=setuptools._vendor.more_itertools.more, line:1844 at site-packages\setuptools_vendor\more_itertools\more.py

    :func:`itertools的擴(kuò)展??梢詫?duì)分組數(shù)據(jù)應(yīng)用轉(zhuǎn)換的Groupby。
        * *keyfunc*是一個(gè)計(jì)算*iterable中每個(gè)項(xiàng)的鍵值的函數(shù)
        * *valuefunc*是一個(gè)將*iterable*中的單個(gè)項(xiàng)進(jìn)行分組后進(jìn)行轉(zhuǎn)換的函數(shù)
        * *reducefunc*是一個(gè)將每組項(xiàng)進(jìn)行轉(zhuǎn)換的函數(shù)
        >>> iterable = 'aAAbBBcCC'
        >>> keyfunc = lambda k: k.upper()
        >>> valuefunc = lambda v: v.lower()
        >>> reducefunc = lambda g: ''.join(g)
        >>> list(groupby_transform(iterable, keyfunc, valuefunc, reducefunc))
        [('A', 'aaa'), ('B', 'bbb'), ('C', 'ccc')]
    :func:`groupby_transform` 在使用單獨(dú)的可迭代對(duì)象作為鍵對(duì)可迭代對(duì)象的元素進(jìn)行分組時(shí)很有用。
        >>> from operator import itemgetter
        >>> keys = [0, 0, 1, 1, 1, 2, 2, 2, 3]
        >>> values = 'abcdefghi'
        >>> iterable = zip(keys, values)
        >>> grouper = groupby_transform(iterable, itemgetter(0), itemgetter(1))
        >>> [(k, ''.join(g)) for k, g in grouper]
        [(0, 'ab'), (1, 'cde'), (2, 'fgh'), (3, 'i')]
    要做到這一點(diǎn),:func:`zip`可迭代對(duì)象,并傳遞一個(gè)*keyfunc*來(lái)提取第一個(gè)元素,一個(gè)*valuefunc*來(lái)提取第二個(gè)元素:
    如果沒(méi)有指定,每個(gè)可選參數(shù)默認(rèn)為一個(gè)身份函數(shù)。

??23 ilen(iterable)

ilen(iterable), module=setuptools._vendor.more_itertools.more, line:469 at site-packages\setuptools_vendor\more_itertools\more.py

    返回*iterable*中的項(xiàng)數(shù)。
        >>> ilen(x for x in range(1000000) if x % 3 == 0)
        333334
    這會(huì)消耗可迭代對(duì)象,所以要小心處理。

??24 interleave_longest(*iterables)

interleave_longest(*iterables), module=setuptools._vendor.more_itertools.more, line:1004 at site-packages\setuptools_vendor\more_itertools\more.py

依次返回每個(gè)可迭代對(duì)象產(chǎn)生的新可迭代對(duì)象,跳過(guò)所有已耗盡的可迭代對(duì)象。
        >>> list(interleave_longest([1, 2, 3], [4, 5], [6, 7, 8]))
        [1, 4, 6, 2, 5, 7, 3, 8]
此函數(shù)產(chǎn)生與:func:`roundrobin`相同的輸出,但對(duì)于某些輸入可能表現(xiàn)更好(特別是當(dāng)可迭代對(duì)象的數(shù)量很大時(shí))。

??25 interleave(*iterables)

interleave(*iterables), module=setuptools._vendor.more_itertools.more, line:990 at site-packages\setuptools_vendor\more_itertools\more.py

    依次從每個(gè)可迭代對(duì)象中返回一個(gè)新的可迭代對(duì)象,直到最短的可迭代對(duì)象耗盡。
        >>> list(interleave([1, 2, 3], [4, 5], [6, 7, 8]))
        [1, 4, 6, 2, 5, 7]
    對(duì)于在最短可迭代對(duì)象耗盡后不終止的版本,請(qǐng)參見(jiàn) :func:`interleave_longest`。

??26 intersperse(e, iterable, n=1)

intersperse(e, iterable, n=1), module=setuptools._vendor.more_itertools.more, line:681 at site-packages\setuptools_vendor\more_itertools\more.py

將填充元素*e*分散到*iterable*中的項(xiàng)中,在每個(gè)填充元素之間留下*n*項(xiàng)。
        >>> list(intersperse('!', [1, 2, 3, 4, 5]))
        [1, '!', 2, '!', 3, '!', 4, '!', 5]
        >>> list(intersperse(None, [1, 2, 3, 4, 5], n=2))
        [1, 2, None, 3, 4, None, 5]

??27 iterate(func, start)

iterate(func, start), module=setuptools._vendor.more_itertools.more, line:486 at site-packages\setuptools_vendor\more_itertools\more.py

返回:``start``, ``func(start)``, ``func(func(start))``, ...
    >>> from itertools import islice
    >>> list(islice(iterate(lambda x: 2*x, 1), 10))
    [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

??28 ichunked(iterable, n)

ichunked(iterable, n), module=setuptools._vendor.more_itertools.more, line:3158 at site-packages\setuptools_vendor\more_itertools\more.py

    將*iterable*分解為子可迭代對(duì)象,每個(gè)子可迭代對(duì)象有*n*個(gè)元素。
    :func:`ichunked`類似于:func:`chunked`,但它產(chǎn)生的是可迭代對(duì)象而不是列表。
    如果按順序讀取子可迭代對(duì)象,則*iterable*的元素不會(huì)存儲(chǔ)在內(nèi)存中。
    如果它們被亂序讀取,:func:`itertools.Tee'用于必要時(shí)緩存元素。
        >>> from itertools import count
        >>> all_chunks = ichunked(count(), 4)
        >>> c_1, c_2, c_3 = next(all_chunks), next(all_chunks), next(all_chunks)
        >>> list(c_2)  # c_1's elements have been cached; c_3's haven't been
        [4, 5, 6, 7]
        >>> list(c_1)
        [0, 1, 2, 3]
        >>> list(c_3)
        [8, 9, 10, 11]

??29 is_sorted(iterable, key=None, reverse=False)

is_sorted(iterable, key=None, reverse=False), module=setuptools._vendor.more_itertools.more, line:3377 at site-packages\setuptools_vendor\more_itertools\more.py

    如果iterable的項(xiàng)按順序排列,則返回' True``,否則返回' False``。
    *key*和*reverse*的含義與內(nèi)置:func:`sorted`函數(shù)中的含義相同。
        >>> is_sorted(['1', '2', '3', '4', '5'], key=int)
        True
        >>> is_sorted([5, 4, 3, 1, 2], reverse=True)
        False
    函數(shù)在遇到第一個(gè)亂序項(xiàng)后返回``False``。如果沒(méi)有無(wú)序項(xiàng),則耗盡可迭代對(duì)象。

??30 last(iterable, default=<object object at 0x000002830651A4A0>)

last(iterable, default=<object object at 0x000002830651A4A0>), module=setuptools._vendor.more_itertools.more, line:188 at site-packages\setuptools_vendor\more_itertools\more.py

返回*iterable*的最后一項(xiàng),如果*iterable*為空,則返回*default*。
        >>> last([0, 1, 2, 3])
        3
        >>> last([], 'some default')
        'some default'
    如果未提供*default*且可迭代對(duì)象中沒(méi)有項(xiàng),則引發(fā)``ValueError``。

??31 locate(iterable, pred=<class ‘bool’>, window_size=None)

locate(iterable, pred=<class ‘bool’>, window_size=None), module=setuptools._vendor.more_itertools.more, line:2159 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中*pred*返回``True``的每個(gè)項(xiàng)的索引。
    *pred*默認(rèn)為:func:`bool`,它將選擇真實(shí)的項(xiàng)目:
            >>> list(locate([0, 1, 1, 0, 1, 0, 0]))
            [1, 2, 4]
    設(shè)置*pred*為自定義函數(shù),例如,查找特定項(xiàng)目的索引。
            >>> list(locate(['a', 'b', 'c', 'b'], lambda x: x == 'b'))
            [1, 3]
    如果給出了*窗口大小*,則將調(diào)用*pred*函數(shù)并調(diào)用該項(xiàng)。這允許搜索子序列:
            >>> iterable = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
            >>> pred = lambda *args: args == (1, 2, 3)
            >>> list(locate(iterable, pred=pred, window_size=3))
            [1, 5, 9]
    使用:func:“seekable”然后找到索引和檢索相關(guān)的項(xiàng)目:
            >>> from itertools import count
            >>> from more_itertools import seekable
            >>> source = (3 * n + 1 if (n % 2) else n // 2 for n in count())
            >>> it = seekable(source)
            >>> pred = lambda x: x > 100
            >>> indexes = locate(it, pred=pred)
            >>> i = next(indexes)
            >>> it.seek(i)
            >>> next(it)
            106

??32 lstrip(iterable, pred)

lstrip(iterable, pred), module=setuptools._vendor.more_itertools.more, line:2207 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中的項(xiàng),但從開(kāi)頭去掉*pred*返回``True``的項(xiàng)。
    例如,要從可迭代對(duì)象的開(kāi)頭刪除一組項(xiàng):
        >>> iterable = (None, False, None, 1, 2, None, 3, False, None)
        >>> pred = lambda x: x in {None, False, ''}
        >>> list(lstrip(iterable, pred))
        [1, 2, None, 3, False, None]
    此函數(shù)類似于 :func:`str.lstrip`,本質(zhì)上是 :func:`itertools.dropwhile` 的包裝。

??33 make_decorator(wrapping_func, result_index=0)

make_decorator(wrapping_func, result_index=0), module=setuptools._vendor.more_itertools.more, line:2760 at site-packages\setuptools_vendor\more_itertools\more.py

返回 *wrapping_func* 的裝飾器版本,這是一個(gè)修改可迭代對(duì)象的函數(shù)。
    *wrapping_func* 是該函數(shù)簽名中可迭代對(duì)象所在的位置。
    這使您可以在“生產(chǎn)端”,即在函數(shù)定義中使用itertools。
    這可以在不更改函數(shù)代碼的情況下增加函數(shù)返回的內(nèi)容。例如,要生成:func:`chunked`的裝飾器版本:
        >>> from more_itertools import chunked
        >>> chunker = make_decorator(chunked, result_index=0)
        >>> @chunker(3)
        ... def iter_range(n):
        ...     return iter(range(n))
        ...
        >>> list(iter_range(9))
        [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
    只允許返回真值項(xiàng):
        >>> truth_serum = make_decorator(filter, result_index=1)
        >>> @truth_serum(bool)
        ... def boolean_test():
        ...     return [0, 1, '',``, False, True]
        ...
        >>> list(boolean_test())
        [1,``, True]
    :func:`peekable` 和 :func:`seekable` 包裝器為實(shí)用裝飾器:
        >>> from more_itertools import peekable
        >>> peekable_function = make_decorator(peekable)
        >>> @peekable_function()
        ... def str_range(*args):
        ...     return (str(x) for x in range(*args))
        ...
        >>> it = str_range(1, 20, 2)
        >>> next(it), next(it), next(it)
        ('1', '3', '5')
        >>> it.peek()
        '7'
        >>> next(it)
        '7'

??34 map_except(function, iterable, *exceptions)

map_except(function, iterable, *exceptions), module=setuptools._vendor.more_itertools.more, line:3259 at site-packages\setuptools_vendor\more_itertools\more.py

    用*function*轉(zhuǎn)換*iterable*中的每個(gè)項(xiàng)并產(chǎn)生結(jié)果,除非*function*引發(fā)指定的*異常之一。
    調(diào)用*函數(shù)*來(lái)轉(zhuǎn)換*iterable*中的每個(gè)項(xiàng)。它應(yīng)該是一個(gè)可接受的參數(shù)。
        >>> iterable = ['1', '2', 'three', '4', None]
        >>> list(map_except(int, iterable, ValueError, TypeError))
        [1, 2, 4]
    如果由*function*引發(fā)的異常不是由*exceptions*給出的異常,則會(huì)像正常一樣引發(fā)。

??35 map_reduce(iterable, keyfunc, valuefunc=None, reducefunc=None)

map_reduce(iterable, keyfunc, valuefunc=None, reducefunc=None), module=setuptools._vendor.more_itertools.more, line:2825 at site-packages\setuptools_vendor\more_itertools\more.py

返回一個(gè)字典,將*iterable*中的項(xiàng)映射到*keyfunc*定義的類別,用*valuefunc*對(duì)它們進(jìn)行轉(zhuǎn)換,然后用*reducefunc*按類別匯總它們。
    如果未指定,*valuefunc*默認(rèn)為identity函數(shù)。
    如果* reducefunc *不明,沒(méi)有總結(jié)發(fā)生:
        >>> keyfunc = lambda x: x.upper()
        >>> result = map_reduce('abbccc', keyfunc)
        >>> sorted(result.items())
        [('A', ['a']), ('B', ['b', 'b']), ('C', ['c', 'c', 'c'])]
    指定*valuefunc*對(duì)分類項(xiàng)進(jìn)行轉(zhuǎn)換:
        >>> keyfunc = lambda x: x.upper()
        >>> valuefunc = lambda x: 1
        >>> result = map_reduce('abbccc', keyfunc, valuefunc)
        >>> sorted(result.items())
        [('A', [1]), ('B', [1, 1]), ('C', [1, 1, 1])]
    指定*reducefunc*總結(jié)分類項(xiàng)目:
        >>> keyfunc = lambda x: x.upper()
        >>> valuefunc = lambda x: 1
        >>> reducefunc = sum
        >>> result = map_reduce('abbccc', keyfunc, valuefunc, reducefunc)
        >>> sorted(result.items())
        [('A', 1), ('B', 2), ('C', 3)]
    在應(yīng)用map/reduce過(guò)程之前,您可能需要過(guò)濾輸入的可迭代對(duì)象:
        >>> all_items = range(30)
        >>> items = [x for x in all_items if 10 <= x <= 20]  # Filter
        >>> keyfunc = lambda x: x % 2  # Evens map to 0; odds to 1
        >>> categories = map_reduce(items, keyfunc=keyfunc)
        >>> sorted(categories.items())
        [(0, [10, 12, 14, 16, 18, 20]), (1, [11, 13, 15, 17, 19])]
        >>> summaries = map_reduce(items, keyfunc=keyfunc, reducefunc=sum)
        >>> sorted(summaries.items())
        [(0, 90), (1, 75)]
    注意,在匯總步驟之前,可迭代對(duì)象中的所有項(xiàng)都被收集到一個(gè)列表中,這可能需要大量的存儲(chǔ)空間。
    返回的對(duì)象是 :obj:`collections.defaultdict`, ``default_factory`` 被設(shè)置為`None``,這樣它的行為就像一個(gè)普通的字典。

??36 nth_or_last(iterable, n, default=<object object at 0x000002830651A4A0>)

nth_or_last(iterable, n, default=<object object at 0x000002830651A4A0>), module=setuptools._vendor.more_itertools.more, line:217 at site-packages\setuptools_vendor\more_itertools\more.py

返回*iterable*的第n項(xiàng)或最后一項(xiàng),如果*iterable*為空則返回*default*。
        >>> nth_or_last([0, 1, 2, 3], 2)
        2
        >>> nth_or_last([0, 1], 2)
        1
        >>> nth_or_last([], 0, 'some default')
        'some default'
    如果未提供*default*且可迭代對(duì)象中沒(méi)有項(xiàng),則引發(fā)``ValueError``。

??37 nth_permutation(iterable, r, index)

nth_permutation(iterable, r, index), module=setuptools._vendor.more_itertools.more, line:3630 at site-packages\setuptools_vendor\more_itertools\more.py

    相當(dāng)于``list(permutations(iterable, r))[index] ``
    長(zhǎng)度為*r*的*iterable*的子序列,其中順序很重要,可以按字典順序排序。
        >>> nth_permutation('ghijk', 2, 5)
        ('h', 'i')
    如果*r*為負(fù)值或大于*iterable*的長(zhǎng)度,將引發(fā)ValueError。
    如果給定的*索引*無(wú)效,將引發(fā)' IndexError``。

??38 nth_product(index, *args)

nth_product(index, *args), module=setuptools._vendor.more_itertools.more, line:3599 at site-packages\setuptools_vendor\more_itertools\more.py

    相當(dāng)于``list(product(*args))[index]``。
    *args*的乘積可以按字典順序排序。
    :func:'nth_product'計(jì)算排序位置*index*的乘積,而不計(jì)算之前的乘積。
        >>> nth_product(8, range(2), range(2), range(2), range(2))
        (1, 0, 0, 0)
    如果給定的*索引*無(wú)效,將引發(fā)' IndexError``。

??39 one(iterable, too_short=None, too_long=None)

one(iterable, too_short=None, too_long=None), module=setuptools._vendor.more_itertools.more, line:514 at site-packages\setuptools_vendor\more_itertools\more.py

返回*iterable*中的第一項(xiàng),預(yù)計(jì)只包含該項(xiàng)。
    如果*iterable*為空或包含多個(gè)項(xiàng)目,則引發(fā)異常。
    :func:`one` 用于確??傻鷮?duì)象僅包含一個(gè)項(xiàng)。
    例如,它可用于檢索預(yù)期返回單行的數(shù)據(jù)庫(kù)查詢的結(jié)果。
    如果*iterable*為空,將引發(fā)``ValueError``。
    你可以用*too short*關(guān)鍵字指定一個(gè)不同的異常:
        >>> it = []
        >>> one(it)  # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        ValueError: too many items in iterable (expected 1)'
        >>> too_short = IndexError('too few items')
        >>> one(it, too_short=too_short)  # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        IndexError: too few items
    類似地,如果*iterable*包含多個(gè)項(xiàng)目,``ValueError``將被引發(fā)。你可以用關(guān)鍵字*too long*指定一個(gè)不同的異常:
        >>> it = ['too', 'many']
        >>> one(it)  # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        ValueError: Expected exactly one item in iterable, but got 'too',
        'many', and perhaps more.
        >>> too_long = RuntimeError
        >>> one(it, too_long=too_long)  # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        RuntimeError
    注意 :func:`one` 試圖將*iterable*推進(jìn)兩次以確保只有一個(gè)項(xiàng)。
    請(qǐng)參閱 :func:`spy` 或 :func:`peekable` 以較少破壞性地檢查可迭代內(nèi)容。

??40 only(iterable, default=None, too_long=None)

only(iterable, default=None, too_long=None), module=setuptools._vendor.more_itertools.more, line:3117 at site-packages\setuptools_vendor\more_itertools\more.py

    如果*iterable*只有一個(gè)元素,返回它。
    如果它沒(méi)有項(xiàng),則返回*default*。
    如果它有多個(gè)項(xiàng)目,則引發(fā)*too_long*給出的異常,默認(rèn)情況下為``ValueError``。
        >>> only([], default='missing')
        'missing'
        >>> only([1])
        1
        >>> only([1, 2])  # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        ValueError: Expected exactly one item in iterable, but got 1, 2,
         and perhaps more.'
        >>> only([1, 2], too_long=TypeError)  # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        TypeError
    注意 :func:`only` 嘗試將*iterable*推進(jìn)兩次以確保只有一個(gè)項(xiàng)。
    請(qǐng)參閱 :func:`spy` 或 :func:`peekable` 以較少破壞性地檢查可迭代內(nèi)容。

??41 padded(iterable, fillvalue=None, n=None, next_multiple=False)

padded(iterable, fillvalue=None, n=None, next_multiple=False), module=setuptools._vendor.more_itertools.more, line:1368 at site-packages\setuptools_vendor\more_itertools\more.py

    產(chǎn)生來(lái)自*iterable*的元素,后面跟著*fillvalue*,這樣至少會(huì)發(fā)出*n*項(xiàng)。
        >>> list(padded([1, 2, 3], '?', 5))
        [1, 2, 3, '?', '?']
    如果*下一個(gè)倍數(shù)*為``True``,則將發(fā)出*fillvalue*,直到發(fā)出的項(xiàng)數(shù)是*n*:
        >>> list(padded([1, 2, 3, 4], n=3, next_multiple=True))
        [1, 2, 3, 4, None, None]
    如果*n*為``None``,則將無(wú)限發(fā)出*fillvalue*。

??42 partitions(iterable)

partitions(iterable), module=setuptools._vendor.more_itertools.more, line:2996 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*的所有可能的保序分區(qū)。
        >>> iterable = 'abc'
        >>> for part in partitions(iterable):
        ...     print([''.join(p) for p in part])
        ['abc']
        ['a', 'bc']
        ['ab', 'c']
        ['a', 'b', 'c']
    這與 :func:`partition`無(wú)關(guān)。

??43 set_partitions(iterable, k=None)

set_partitions(iterable, k=None), module=setuptools._vendor.more_itertools.more, line:3016 at site-packages\setuptools_vendor\more_itertools\more.py

    將*iterable*的集合分區(qū)分成*k*個(gè)部分。集合分區(qū)不保持順序。
        >>> iterable = 'abc'
        >>> for part in set_partitions(iterable, 2):
        ...     print([''.join(p) for p in part])
        ['a', 'bc']
        ['ab', 'c']
        ['b', 'ac']
    如果*k*未給定,則生成每個(gè)集合分區(qū)。
        >>> iterable = 'abc'
        >>> for part in set_partitions(iterable):
        ...     print([''.join(p) for p in part])
        ['abc']
        ['a', 'bc']
        ['ab', 'c']
        ['b', 'ac']
        ['a', 'b', 'c']

??44 repeat_last(iterable, default=None)

repeat_last(iterable, default=None), module=setuptools._vendor.more_itertools.more, line:1400 at site-packages\setuptools_vendor\more_itertools\more.py

    在*iterable*耗盡后,繼續(xù)輸出它的最后一個(gè)元素。
        >>> list(islice(repeat_last(range(3)), 5))
        [0, 1, 2, 2, 2]
    如果可迭代對(duì)象為空,則yield *default* forever:
        >>> list(islice(repeat_last(range(0), 42), 5))
        [42, 42, 42, 42, 42]

??45 replace(iterable, pred, substitutes, count=None, window_size=1)

replace(iterable, pred, substitutes, count=None, window_size=1), module=setuptools._vendor.more_itertools.more, line:2935 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中的項(xiàng),將*pred*返回``True``的項(xiàng)替換為*iterable*替代的項(xiàng)。
        >>> iterable = [1, 1, 0, 1, 1, 0, 1, 1]
        >>> pred = lambda x: x == 0
        >>> substitutes = (2, 3)
        >>> list(replace(iterable, pred, substitutes))
        [1, 1, 2, 3, 1, 1, 2, 3, 1, 1]
    如果給出了*count*,則替換的數(shù)量將受到限制:
        >>> iterable = [1, 1, 0, 1, 1, 0, 1, 1, 0]
        >>> pred = lambda x: x == 0
        >>> substitutes = [None]
        >>> list(replace(iterable, pred, substitutes, count=2))
        [1, 1, None, 1, 1, None, 1, 1, 0]
    使用*窗口大小*來(lái)控制作為參數(shù)傳遞給*pred*的項(xiàng)的數(shù)量。這允許定位和替換子序列。
        >>> iterable = [0, 1, 2, 5, 0, 1, 2, 5]
        >>> window_size = 3
        >>> pred = lambda *args: args == (0, 1, 2)  # 3 items passed to pred
        >>> substitutes = [3, 4] # Splice in these items
        >>> list(replace(iterable, pred, substitutes, window_size=window_size))
        [3, 4, 5, 3, 4, 5]

??46 rlocate(iterable, pred=<class ‘bool’>, window_size=None)

rlocate(iterable, pred=<class ‘bool’>, window_size=None), module=setuptools._vendor.more_itertools.more, line:2892 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中*pred*返回``True``的每個(gè)項(xiàng)的索引,從右開(kāi)始向左移動(dòng)。
    *pred*默認(rèn)為 :func:`bool` ,它將選擇真值項(xiàng):
        >>> list(rlocate([0, 1, 1, 0, 1, 0, 0]))  # Truthy at 1, 2, and 4
        [4, 2, 1]
    設(shè)置*pred*為自定義函數(shù),例如,查找特定項(xiàng)的索引:
        >>> iterable = iter('abcb')
        >>> pred = lambda x: x == 'b'
        >>> list(rlocate(iterable, pred))
        [3, 1]
    如果給出了*窗口大小*,那么將調(diào)用*pred*函數(shù),并調(diào)用這么多項(xiàng)。這允許搜索子序列:
        >>> iterable = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
        >>> pred = lambda *args: args == (1, 2, 3)
        >>> list(rlocate(iterable, pred=pred, window_size=3))
        [9, 5, 1]
    如果*iterable*是可逆的,``rlocate``將反轉(zhuǎn)它并從右搜索。
    否則,它將從左邊開(kāi)始搜索,并以相反的順序返回結(jié)果。
    請(qǐng)參閱 :func:`locate` 了解其他示例應(yīng)用程序。

??47 rstrip(iterable, pred)

rstrip(iterable, pred), module=setuptools._vendor.more_itertools.more, line:2225 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中的項(xiàng),但從*pred*返回``True``的末尾刪除任何項(xiàng)。
    例如,要從可迭代對(duì)象的末尾刪除一組項(xiàng):
        >>> iterable = (None, False, None, 1, 2, None, 3, False, None)
        >>> pred = lambda x: x in {None, False, ''}
        >>> list(rstrip(iterable, pred))
        [None, False, None, 1, 2, None, 3]
    此函數(shù)類似于 :func:`str.rstrip`。

??48 sample(iterable, k, weights=None)

sample(iterable, k, weights=None), module=setuptools._vendor.more_itertools.more, line:3341 at site-packages\setuptools_vendor\more_itertools\more.py

    返回一個(gè)長(zhǎng)度為*k*的從*可迭代對(duì)象*中選擇(不替換)的元素列表。
    如 :func:`random.sample`,但適用于未知長(zhǎng)度的可迭代對(duì)象。
        >>> iterable = range(100)
        >>> sample(iterable, 5)  # doctest: +SKIP
        [81, 60, 96, 16, 4]
    也可以給出具有*weights*的可迭代對(duì)象:
        >>> iterable = range(100)
        >>> weights = (i * i + 1 for i in range(100))
        >>> sampled = sample(iterable, 5, weights=weights)  # doctest: +SKIP
        [79, 67, 74, 66, 78]
    該算法還可用于生成加權(quán)隨機(jī)排列。每個(gè)項(xiàng)目的相對(duì)權(quán)重決定了它在排列中出現(xiàn)較晚的概率。
        >>> data = "abcdefgh"
        >>> weights = range(1, len(data) + 1)
        >>> sample(data, k=len(data), weights=weights)  # doctest: +SKIP
        ['c', 'a', 'b', 'e', 'g', 'd', 'h', 'f']

??49 side_effect(func, iterable, chunk_size=None, before=None, after=None)

side_effect(func, iterable, chunk_size=None, before=None, after=None), module=setuptools._vendor.more_itertools.more, line:1068 at site-packages\setuptools_vendor\more_itertools\more.py

在生成項(xiàng)之前,對(duì)*iterable*中的每個(gè)項(xiàng)調(diào)用*func*(或?qū)γ總€(gè)*塊大小*組的項(xiàng))。
    `func`必須是一個(gè)接受單個(gè)參數(shù)的函數(shù)。它的返回值將被丟棄。
    *before*和*after*是不帶參數(shù)的可選函數(shù)。
    它們將分別在迭代開(kāi)始前和迭代結(jié)束后執(zhí)行。
    `side_effect` 可用于日志記錄、更新進(jìn)度條或任何功能上不"pure."的東西。
    發(fā)出狀態(tài)消息:
        >>> from more_itertools import consume
        >>> func = lambda item: print('Received {}'.format(item))
        >>> consume(side_effect(func, range(2)))
        Received 0
        Received 1
    對(duì)大塊物品進(jìn)行操作的:
        >>> pair_sums = []
        >>> func = lambda chunk: pair_sums.append(sum(chunk))
        >>> list(side_effect(func, [0, 1, 2, 3, 4, 5], 2))
        [0, 1, 2, 3, 4, 5]
        >>> list(pair_sums)
        [1, 5, 9]
    寫(xiě)入一個(gè)類文件對(duì)象:
        >>> from io import StringIO
        >>> from more_itertools import consume
        >>> f = StringIO()
        >>> func = lambda x: print(x, file=f)
        >>> before = lambda: print(u'HEADER', file=f)
        >>> after = f.close
        >>> it = [u'a', u'b', u'c']
        >>> consume(side_effect(func, it, before=before, after=after))
        >>> f.closed
        True

??50 sliced(seq, n, strict=False)

sliced(seq, n, strict=False), module=setuptools._vendor.more_itertools.more, line:1129 at site-packages\setuptools_vendor\more_itertools\more.py

    從序列*seq*中產(chǎn)生長(zhǎng)度*n*的切片。
        >>> list(sliced((1, 2, 3, 4, 5, 6), 3))
        [(1, 2, 3), (4, 5, 6)]
    默認(rèn)情況下,如果*seq*的長(zhǎng)度不能被*n*整除,則最后生成的切片的元素?cái)?shù)將少于*n*個(gè):
        >>> list(sliced((1, 2, 3, 4, 5, 6, 7, 8), 3))
        [(1, 2, 3), (4, 5, 6), (7, 8)]
    如果*seq*的長(zhǎng)度是不整除*n* *strict* 和 ``True`` ,那么“ValueError“將提高之前最后一塊了。
    此函數(shù)僅適用于支持切片的可迭代對(duì)象。對(duì)于不可切片的可迭代對(duì)象,請(qǐng)參見(jiàn) :func:`chunked`。

??51 sort_together(iterables, key_list=(0,), key=None, reverse=False)

sort_together(iterables, key_list=(0,), key=None, reverse=False), module=setuptools._vendor.more_itertools.more, line:1586 at site-packages\setuptools_vendor\more_itertools\more.py

返回排序在一起的輸入可迭代對(duì)象,以*key list*作為排序的優(yōu)先級(jí)。
    所有可迭代對(duì)象都被裁剪為最短對(duì)象的長(zhǎng)度。這可以像電子表格中的排序函數(shù)一樣使用。
    如果每個(gè)可迭代對(duì)象表示一列數(shù)據(jù),則鍵列表決定使用哪些列進(jìn)行排序。
    默認(rèn)情況下,所有可迭代對(duì)象都使用``0``-th iterable:
        >>> iterables = [(4, 3, 2, 1), ('a', 'b', 'c', 'd')]
        >>> sort_together(iterables)
        [(1, 2, 3, 4), ('d', 'c', 'b', 'a')]
    設(shè)置一個(gè)不同的鍵列表,根據(jù)另一個(gè)可迭代對(duì)象進(jìn)行排序。指定多個(gè)鍵指示關(guān)系如何被打破:
        >>> iterables = [(3, 1, 2), (0, 1, 0), ('c', 'b', 'a')]
        >>> sort_together(iterables, key_list=(1, 2))
        [(2, 3, 1), (0, 0, 1), ('a', 'c', 'b')]
    要按可迭代對(duì)象元素的函數(shù)排序,傳遞一個(gè)*key*函數(shù)。它的參數(shù)是鍵列表對(duì)應(yīng)的可迭代對(duì)象的元素:
        >>> names = ('a', 'b', 'c')
        >>> lengths = (1, 2, 3)
        >>> widths = (5, 2, 1)
        >>> def area(length, width):
        ...     return length * width
        >>> sort_together([names, lengths, widths], key_list=(1, 2), key=area)
        [('c', 'b', 'a'), (3, 2, 1), (1, 2, 5)]
    設(shè)置*reverse*為``True``,按降序排序。
        >>> sort_together([(1, 2, 3), ('c', 'b', 'a')], reverse=True)
        [(3, 2, 1), ('a', 'b', 'c')]

??52 split_at(iterable, pred, maxsplit=-1, keep_separator=False)

split_at(iterable, pred, maxsplit=-1, keep_separator=False), module=setuptools._vendor.more_itertools.more, line:1163 at site-packages\setuptools_vendor\more_itertools\more.py

    生成來(lái)自*iterable*的項(xiàng)目列表,其中每個(gè)列表由一個(gè)項(xiàng)目分隔,其中callable *pred*返回``True``。
        >>> list(split_at('abcdcba', lambda x: x == 'b'))
        [['a'], ['c', 'd', 'c'], ['a']]
        >>> list(split_at(range(10), lambda n: n % 2 == 1))
        [[0], [2], [4], [6], [8], []]
    最多*maxsplit*分裂完成。
    如果*maxsplit*未指定或?yàn)?1,則對(duì)分割次數(shù)沒(méi)有限制:
        >>> list(split_at(range(10), lambda n: n % 2 == 1, maxsplit=2))
        [[0], [2], [4, 5, 6, 7, 8, 9]]
    默認(rèn)情況下,分隔項(xiàng)不包括在輸出中。包括它們,設(shè)置 *keep_separator* 為``True``。
        >>> list(split_at('abcdcba', lambda x: x == 'b', keep_separator=True))
        [['a'], ['b'], ['c', 'd', 'c'], ['b'], ['a']]

??53 split_after(iterable, pred, maxsplit=-1)

split_after(iterable, pred, maxsplit=-1), module=setuptools._vendor.more_itertools.more, line:1242 at site-packages\setuptools_vendor\more_itertools\more.py

    從*iterable*中生成項(xiàng)目列表,其中每個(gè)列表以一個(gè)項(xiàng)目結(jié)束,其中callable *pred*返回``True``:
        >>> list(split_after('one1two2', lambda s: s.isdigit()))
        [['o', 'n', 'e', '1'], ['t', 'w', 'o', '2']]
        >>> list(split_after(range(10), lambda n: n % 3 == 0))
        [[0], [1, 2, 3], [4, 5, 6], [7, 8, 9]]
    最多進(jìn)行*maxsplit*分割。如果*maxsplit*未指定或?yàn)?1,則拆分次數(shù)沒(méi)有限制:
        >>> list(split_after(range(10), lambda n: n % 3 == 0, maxsplit=2))
        [[0], [1, 2, 3], [4, 5, 6, 7, 8, 9]]

??54 split_before(iterable, pred, maxsplit=-1)

split_before(iterable, pred, maxsplit=-1), module=setuptools._vendor.more_itertools.more, line:1207 at site-packages\setuptools_vendor\more_itertools\more.py

    從*iterable*中生成項(xiàng)目列表,其中每個(gè)列表在一個(gè)項(xiàng)目之前結(jié)束,callable *pred*返回``True``:
        >>> list(split_before('OneTwo', lambda s: s.isupper()))
        [['O', 'n', 'e'], ['T', 'w', 'o']]
        >>> list(split_before(range(10), lambda n: n % 3 == 0))
        [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
    最多進(jìn)行*maxsplit*拆分。如果*maxsplit*未指定或?yàn)?1,則拆分次數(shù)沒(méi)有限制:
        >>> list(split_before(range(10), lambda n: n % 3 == 0, maxsplit=2))
        [[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]

??55 split_when(iterable, pred, maxsplit=-1)

split_when(iterable, pred, maxsplit=-1), module=setuptools._vendor.more_itertools.more, line:1278 at site-packages\setuptools_vendor\more_itertools\more.py

    根據(jù)*pred*的輸出將*iterable*拆分為幾個(gè)部分。
    *pred*應(yīng)該是一個(gè)函數(shù),它接受連續(xù)的項(xiàng)目對(duì),如果可迭代對(duì)象應(yīng)該在它們之間分割,則返回``True``。
    例如,要查找不斷增加的數(shù)字,當(dāng)元素``i``大于元素``' i + 1``時(shí)拆分可迭代對(duì)象:
        >>> list(split_when([1, 2, 3, 3, 2, 5, 2, 4, 2], lambda x, y: x > y))
        [[1, 2, 3, 3], [2, 5], [2, 4], [2]]
    最多執(zhí)行*maxsplit*次拆分。如果*maxsplit*未指定或?yàn)?1,則對(duì)拆分的數(shù)量沒(méi)有限制:
        >>> list(split_when([1, 2, 3, 3, 2, 5, 2, 4, 2],
        ...                 lambda x, y: x > y, maxsplit=2))
        [[1, 2, 3, 3], [2, 5], [2, 4, 2]]

??56 split_into(iterable, sizes)

split_into(iterable, sizes), module=setuptools._vendor.more_itertools.more, line:1323 at site-packages\setuptools_vendor\more_itertools\more.py

    從*iterable*中為*size *中的每個(gè)整數(shù)'n'生成一個(gè)長(zhǎng)度為'n'的順序項(xiàng)列表。
        >>> list(split_into([1,2,3,4,5,6], [1,2,3]))
        [[1], [2, 3], [4, 5, 6]]
    如果*size *的總和小于*iterable*的長(zhǎng)度,則*iterable*的剩余項(xiàng)將不被返回。
        >>> list(split_into([1,2,3,4,5,6], [2,3]))
        [[1, 2], [3, 4, 5]]
    如果*size *的總和大于*iterable*的長(zhǎng)度,則在超出*iterable*的迭代中返回的項(xiàng)目將更少,并且進(jìn)一步的列表將為空:
        >>> list(split_into([1,2,3,4], [1,2,3,4]))
        [[1], [2, 3], [4], []]
    當(dāng)在*size *中遇到``None``對(duì)象時(shí),返回的列表將包含到*iterable*末尾的項(xiàng)目,與itertools相同。
        >>> list(split_into([1,2,3,4,5,6,7,8,9,0], [2,3,None]))
        [[1, 2], [3, 4, 5], [6, 7, 8, 9, 0]]
    :func:`split_into` 對(duì)于分組大小不一致的一系列項(xiàng)目非常有用。
    例如,在表的一行中,多個(gè)列表示相同特征的元素(例如,由x,y,z表示的點(diǎn)),但是,格式并不是所有列都相同。

??57 spy(iterable, n=1)

spy(iterable, n=1), module=setuptools._vendor.more_itertools.more, line:947 at site-packages\setuptools_vendor\more_itertools\more.py

    返回一個(gè)2元組,其中包含*iterable*的前*n*個(gè)元素,以及一個(gè)具有與*iterable*相同元素的迭代器。
    這允許你“提前查看”可迭代對(duì)象中的項(xiàng),而無(wú)需推進(jìn)它。列表中默認(rèn)有一個(gè)項(xiàng)目:
        >>> iterable = 'abcdefg'
        >>> head, iterable = spy(iterable)
        >>> head
        ['a']
        >>> list(iterable)
        ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    您可以使用解包來(lái)檢索項(xiàng)目而不是列表:
        >>> (head,), iterable = spy('abcdefg')
        >>> head
        'a'
        >>> (first, second), iterable = spy('abcdefg', 2)
        >>> first
        'a'
        >>> second
        'b'
    請(qǐng)求的項(xiàng)數(shù)可以大于可迭代對(duì)象中的項(xiàng)數(shù):
        >>> iterable = [1, 2, 3, 4, 5]
        >>> head, iterable = spy(iterable, 10)
        >>> head
        [1, 2, 3, 4, 5]
        >>> list(iterable)
        [1, 2, 3, 4, 5]

??58 stagger(iterable, offsets=(-1, 0, 1), longest=False, fillvalue=None)

stagger(iterable, offsets=(-1, 0, 1), longest=False, fillvalue=None), module=setuptools._vendor.more_itertools.more, line:1454 at site-packages\setuptools_vendor\more_itertools\more.py

    生成元素偏移于*iterable*的元組。每個(gè)元組中`i`項(xiàng)的偏移量由*offsets*中的`i`項(xiàng)給出。
        >>> list(stagger([0, 1, 2, 3]))
        [(None, 0, 1), (0, 1, 2), (1, 2, 3)]
        >>> list(stagger(range(8), offsets=(0, 2, 4)))
        [(0, 2, 4), (1, 3, 5), (2, 4, 6), (3, 5, 7)]
    默認(rèn)情況下,當(dāng)元組的最后一個(gè)元素是可迭代對(duì)象中的最后一項(xiàng)時(shí),序列將結(jié)束。
    要繼續(xù)直到元組的第一個(gè)元素是可迭代對(duì)象中的最后一個(gè)元素,請(qǐng)將*longest*設(shè)置為``True``:
        >>> list(stagger([0, 1, 2, 3], longest=True))
        [(None, 0, 1), (0, 1, 2), (1, 2, 3), (2, 3, None), (3, None, None)]
    默認(rèn)情況下,``None``將用于替換序列末尾以外的偏移量。指定*fillvalue*以使用其他值。

??59 strip(iterable, pred)

strip(iterable, pred), module=setuptools._vendor.more_itertools.more, line:2251 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*中的項(xiàng),但從*pred*返回``True``的開(kāi)始和結(jié)束處刪除任何項(xiàng)。
    例如,要從可迭代對(duì)象的兩端移除一組元素:
        >>> iterable = (None, False, None, 1, 2, None, 3, False, None)
        >>> pred = lambda x: x in {None, False, ''}
        >>> list(strip(iterable, pred))
        [1, 2, None, 3]
    此函數(shù)類似于 :func:`str.strip`.。

??60 substrings(iterable)

substrings(iterable), module=setuptools._vendor.more_itertools.more, line:791 at site-packages\setuptools_vendor\more_itertools\more.py

    生成*iterable*的所有子字符串。
        >>> [''.join(s) for s in substrings('more')]
        ['m', 'o', 'r', 'e', 'mo', 'or', 're', 'mor', 'ore', 'more']
    注意,非字符串可迭代對(duì)象也可以細(xì)分。
        >>> list(substrings([0, 1, 2]))
        [(0,), (1,), (2,), (0, 1), (1, 2), (0, 1, 2)]

??61 substrings_indexes(seq, reverse=False)

substrings_indexes(seq, reverse=False), module=setuptools._vendor.more_itertools.more, line:817 at site-packages\setuptools_vendor\more_itertools\more.py

    生成的項(xiàng)將是一個(gè)形式為``(substr, i, j)``的元組,其中``substr = seq[i:j]``。
    此函數(shù)僅適用于支持切片的可迭代對(duì)象,例如``str``對(duì)象。
    >>> for item in substrings_indexes('more'):
    ...    print(item)
    ('m', 0, 1)
    ('o', 1, 2)
    ('r', 2, 3)
    ('e', 3, 4)
    ('mo', 0, 2)
    ('or', 1, 3)
    ('re', 2, 4)
    ('mor', 0, 3)
    ('ore', 1, 4)
    ('more', 0, 4)
    將*reverse*設(shè)置為``True`` ,以產(chǎn)生順序相反的相同項(xiàng)。

??62 unique_to_each(*iterables)

unique_to_each(*iterables), module=setuptools._vendor.more_itertools.more, line:707 at site-packages\setuptools_vendor\more_itertools\more.py

    返回每個(gè)輸入可迭代對(duì)象中不在其他輸入可迭代對(duì)象中的元素。
    例如,假設(shè)您有一組軟件包,每個(gè)軟件包都有一組依賴項(xiàng):
        {'pkg_1': {'A', 'B'}, 'pkg_2': {'B', 'C'}, 'pkg_3': {'B', 'D'}}
    如果您刪除了一個(gè)軟件包,哪些依賴項(xiàng)也可以刪除?
    如果刪除``pkg_1``,則不再需要``A ``-它與``pkg_2``或``pkg_3``無(wú)關(guān)。
    類似地,“C”只需要用于``pkg_2``,和``D``只需要``pkg_3```:
        >>> unique_to_each({'A', 'B'}, {'B', 'C'}, {'B', 'D'})
        [['A'], ['C'], ['D']]
    如果在一個(gè)輸入可迭代對(duì)象中有重復(fù)的,而在其他可迭代對(duì)象中沒(méi)有重復(fù)的,它們將在輸出中重復(fù)。輸入順序是保留的:
        >>> unique_to_each("mississippi", "missouri")
        [['p', 'p'], ['o', 'u', 'r']]
    假設(shè)每個(gè)可迭代對(duì)象的元素都是可哈希的。

??63 unzip(iterable)

unzip(iterable), module=setuptools._vendor.more_itertools.more, line:1652 at site-packages\setuptools_vendor\more_itertools\more.py

    作為 :func:`zip` 的逆函數(shù),此函數(shù)分解壓縮后的*iterable*的元素。
    “i”-可迭代對(duì)象包含“i”-可迭代對(duì)象中每個(gè)元素的元素。第一個(gè)元素用于確定剩余元素的長(zhǎng)度。
        >>> iterable = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
        >>> letters, numbers = unzip(iterable)
        >>> list(letters)
        ['a', 'b', 'c', 'd']
        >>> list(numbers)
        [1, 2, 3, 4]
    這類似于使用``zip(*iterable)``,但它避免了將*iterable*讀取到內(nèi)存中。
    但是請(qǐng)注意,這個(gè)函數(shù)使用:func:`itertools。因此可能需要大量的存儲(chǔ)空間。

??64 windowed(seq, n, fillvalue=None, step=1)

windowed(seq, n, fillvalue=None, step=1), module=setuptools._vendor.more_itertools.more, line:740 at site-packages\setuptools_vendor\more_itertools\more.py

    在給定的可迭代對(duì)象上返回一個(gè)寬度為*n*的滑動(dòng)窗口。
        >>> all_windows = windowed([1, 2, 3, 4, 5], 3)
        >>> list(all_windows)
        [(1, 2, 3), (2, 3, 4), (3, 4, 5)]
    當(dāng)窗口大于可迭代對(duì)象時(shí),*fillvalue*被用來(lái)代替缺失的值:
        >>> list(windowed([1, 2, 3], 4))
        [(1, 2, 3, None)]
    每個(gè)窗口將以*step*的增量前進(jìn):
        >>> list(windowed([1, 2, 3, 4, 5, 6], 3, fillvalue='!', step=2))
        [(1, 2, 3), (3, 4, 5), (5, 6, '!')]
    要滑入可迭代對(duì)象的項(xiàng),使用 :func:`chain` 在左側(cè)添加填充項(xiàng):
        >>> iterable = [1, 2, 3, 4]
        >>> n = 3
        >>> padding = [None] * (n - 1)
        >>> list(windowed(chain(padding, iterable), 3))
        [(None, None, 1), (None, 1, 2), (1, 2, 3), (2, 3, 4)]

??65 with_iter(context_manager)

with_iter(context_manager), module=setuptools._vendor.more_itertools.more, line:499 at site-packages\setuptools_vendor\more_itertools\more.py

    將可迭代對(duì)象包裝在``with``語(yǔ)句中,這樣它就會(huì)在耗盡后關(guān)閉。
    例如,這將在迭代器耗盡時(shí)關(guān)閉文件:
        upper_lines = (line.upper() for line in with_iter(open('foo')))
    任何返回可迭代對(duì)象的上下文管理器都是``with_iter``的候選者。

??66 zip_equal(*iterables)

zip_equal(*iterables), module=setuptools._vendor.more_itertools.more, line:1501 at site-packages\setuptools_vendor\more_itertools\more.py

``zip ``將輸入的*可迭代對(duì)象*放在一起,但如果它們的長(zhǎng)度不相同,則引發(fā)``UnequalIterablesError``。
        >>> it_1 = range(3)
        >>> it_2 = iter('abc')
        >>> list(zip_equal(it_1, it_2))
        [(0, 'a'), (1, 'b'), (2, 'c')]
        >>> it_1 = range(3)
        >>> it_2 = iter('abcd')
        >>> list(zip_equal(it_1, it_2)) # doctest: +IGNORE_EXCEPTION_DETAIL
        Traceback (most recent call last):
        ...
        more_itertools.more.UnequalIterablesError: Iterables 具有不同長(zhǎng)度。

??67 zip_offset(*iterables, offsets, longest=False, fillvalue=None)

zip_offset(*iterables, offsets, longest=False, fillvalue=None), module=setuptools._vendor.more_itertools.more, line:1547 at site-packages\setuptools_vendor\more_itertools\more.py

    將輸入的*可迭代對(duì)象*“壓縮”在一起,但將*偏移量*中的`i`項(xiàng)偏移`i` -可迭代對(duì)象。
        >>> list(zip_offset('0123', 'abcdef', offsets=(0, 1)))
        [('0', 'b'), ('1', 'c'), ('2', 'd'), ('3', 'e')]
    這可以用作SciPy或pandas的輕量級(jí)替代品,用于分析某些序列具有領(lǐng)先或滯后關(guān)系的數(shù)據(jù)集。
    默認(rèn)情況下,序列將在最短可迭代對(duì)象耗盡時(shí)結(jié)束。要繼續(xù)直到最長(zhǎng)可迭代對(duì)象耗盡,請(qǐng)將*longest*設(shè)置為``True``。
        >>> list(zip_offset('0123', 'abcdef', offsets=(0, 1), longest=True))
        [('0', 'b'), ('1', 'c'), ('2', 'd'), ('3', 'e'), (None, 'f')]
    默認(rèn)情況下,' ' None ' ' '將用于替換超出序列末尾的偏移量。指定*fillvalue*以使用其他值。

??68 windowed_complete(iterable, n)

windowed_complete(iterable, n), module=setuptools._vendor.more_itertools.more, line:3524 at site-packages\setuptools_vendor\more_itertools\more.py

    生成 ``(beginning, middle, end)``  元組,其中:
        * 每個(gè) ``middle`` 有*n* 項(xiàng)來(lái)自*iterable*
        * 每個(gè) ``beginning`` 在``middle``之前的項(xiàng)有**項(xiàng)。
        * 每個(gè) ``end``在``middle``之后的項(xiàng)有**項(xiàng)。
        >>> iterable = range(7)
        >>> n = 3
        >>> for beginning, middle, end in windowed_complete(iterable, n):
        ...     print(beginning, middle, end)
        () (0, 1, 2) (3, 4, 5, 6)
        (0,) (1, 2, 3) (4, 5, 6)
        (0, 1) (2, 3, 4) (5, 6)
        (0, 1, 2) (3, 4, 5) (6,)
        (0, 1, 2, 3) (4, 5, 6) ()
    注意*n*必須至少為0并且最等于*iterable*的長(zhǎng)度。此函數(shù)將耗盡可迭代對(duì)象,并且可能需要大量存儲(chǔ)空間。

??69 all_unique(iterable, key=None)

all_unique(iterable, key=None), module=setuptools._vendor.more_itertools.more, line:3564 at site-packages\setuptools_vendor\more_itertools\more.py

    如果*iterable*的所有元素都是唯一的(沒(méi)有兩個(gè)元素相等),則返回' True``。
        >>> all_unique('ABCB')
        False
    如果指定了一個(gè)*key*函數(shù),它將用于進(jìn)行比較。
        >>> all_unique('ABCb')
        True
        >>> all_unique('ABCb', str.lower)
        False
    函數(shù)在遇到第一個(gè)非唯一元素時(shí)立即返回。
    可以使用混合了哈希和不可哈希項(xiàng)的Iterables,但對(duì)于不可哈希項(xiàng),該函數(shù)會(huì)變慢。

??70 value_chain(*args)

value_chain(*args), module=setuptools._vendor.more_itertools.more, line:3676 at site-packages\setuptools_vendor\more_itertools\more.py

    按照傳遞給函數(shù)的順序,生成傳遞給函數(shù)的所有參數(shù)。
    如果參數(shù)本身是可迭代的,則迭代其值。
        >>> list(value_chain(1, 2, 3, [4, 5, 6]))
        [1, 2, 3, 4, 5, 6]
    二進(jìn)制字符串和文本字符串不被認(rèn)為是可迭代的,并按原樣發(fā)出:
        >>> list(value_chain('12', '34', ['56', '78']))
        ['12', '34', '56', '78']
    多個(gè)嵌套級(jí)別不會(huì)被扁平化。

??71 product_index(element, *args)

product_index(element, *args), module=setuptools._vendor.more_itertools.more, line:3704 at site-packages\setuptools_vendor\more_itertools\more.py

    相當(dāng)于``list(product(*args)).index(element) ``
    *args*的乘積可以按字典順序排序。
    :func:`product_index` 計(jì)算*element*的第一個(gè)索引,而不計(jì)算前面的產(chǎn)品。
        >>> product_index([8, 2], range(10), range(5))
        42
    如果給定的*元素*不在*args*的乘積中,將引發(fā)' ValueError``。

??72 combination_index(element, iterable)

combination_index(element, iterable), module=setuptools._vendor.more_itertools.more, line:3729 at site-packages\setuptools_vendor\more_itertools\more.py

    相當(dāng)于``list(combination(iterable, r)).index(element)``
    長(zhǎng)度為*r*的*iterable*的子序列可以按字典順序排序。
    :func: '組合索引'計(jì)算第一個(gè)*元素*的索引,不計(jì)算前面的組合。
        >>> combination_index('adf', 'abcdefg')
        10
    如果給定的*元素*不是*iterable*的組合之一,將引發(fā)' ValueError``。

??73 permutation_index(element, iterable)

permutation_index(element, iterable), module=setuptools._vendor.more_itertools.more, line:3772 at site-packages\setuptools_vendor\more_itertools\more.py

    相當(dāng)于``list(permutations(iterable, r)).index(element) ``
    長(zhǎng)度為*r*的*iterable*的子序列,其中順序很重要,可以按字典順序排序。
    :func:'permutation_index'直接計(jì)算第一個(gè)元素的索引,而不計(jì)算前面的排列。
        >>> permutation_index([1, 3, 2], range(5))
        19
    如果給定的*元素*不是*iterable*的排列之一,則會(huì)引發(fā)``ValueError``。

??74 all_equal(iterable)

all_equal(iterable), module=setuptools._vendor.more_itertools.recipes, line:158 at site-packages\setuptools_vendor\more_itertools\recipes.py

如果所有元素彼此相等,則返回“True”。
        >>> all_equal('aaaa')
        True
        >>> all_equal('aaab')
        False

??75 consume(iterator, n=None)

consume(iterator, n=None), module=setuptools._vendor.more_itertools.recipes, line:105 at site-packages\setuptools_vendor\more_itertools\recipes.py

    將*可迭代*向前推進(jìn)*n*步。如果*n*為``None``,則完全消耗它。
    有效地耗盡迭代器而不返回值。
    默認(rèn)消耗整個(gè)迭代器,但可以提供第二個(gè)可選參數(shù)來(lái)限制消耗。
        >>> i = (x for x in range(10))
        >>> next(i)
        0
        >>> consume(i, 3)
        >>> next(i)
        4
        >>> consume(i)
        >>> next(i)
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        StopIteration
    如果迭代器的剩余項(xiàng)少于提供的限制,則整個(gè)迭代器將被消耗。
        >>> i = (x for x in range(3))
        >>> consume(i, 5)
        >>> next(i)
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module> StopIteration

??76 convolve(signal, kernel)

convolve(signal, kernel), module=setuptools._vendor.more_itertools.recipes, line:603 at site-packages\setuptools_vendor\more_itertools\recipes.py

    將可迭代*信號(hào)*與可迭代*內(nèi)核*進(jìn)行卷積。
        >>> signal = (1, 2, 3, 4, 5)
        >>> kernel = [3, 2, 1]
        >>> list(convolve(signal, kernel))
        [3, 8, 14, 20, 26, 14, 5]
    注意:輸入?yún)?shù)是不可互換的,因?yàn)?kernel*會(huì)立即被消耗和存儲(chǔ)。

??77 dotproduct(vec1, vec2)

dotproduct(vec1, vec2), module=setuptools._vendor.more_itertools.recipes, line:209 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回兩個(gè)可迭代對(duì)象的點(diǎn)積。
    >>> dotproduct([10, 10], [20, 20])
    400

??78 first_true(iterable, default=None, pred=None)

first_true(iterable, default=None, pred=None), module=setuptools._vendor.more_itertools.recipes, line:455 at site-packages\setuptools_vendor\more_itertools\recipes.py

    返回可迭代對(duì)象中的第一個(gè)真值。
    如果沒(méi)有找到真值,則返回*default*如果*pred*不是None,則返回 ``pred(item) == True`` 的第一個(gè)項(xiàng)目。
        >>> first_true(range(10))
        1
        >>> first_true(range(10), pred=lambda x: x > 5)
        6
        >>> first_true(range(10), default='missing', pred=lambda x: x > 9)
        'missing'

??79 flatten(listOfLists)

flatten(listOfLists), module=setuptools._vendor.more_itertools.recipes, line:219 at site-packages\setuptools_vendor\more_itertools\recipes.py

    返回一個(gè)迭代器,在列表的列表中平坦化一層嵌套。
        >>> list(flatten([[0, 1], [2, 3]]))
        [0, 1, 2, 3]
    參見(jiàn) :func:`collapse` ,它可以平鋪多層嵌套。

??80 grouper(iterable, n, fillvalue=None)

grouper(iterable, n, fillvalue=None), module=setuptools._vendor.more_itertools.recipes, line:284 at site-packages\setuptools_vendor\more_itertools\recipes.py

將數(shù)據(jù)收集到固定長(zhǎng)度的塊或塊。
    >>> list(grouper('ABCDEFG', 3, 'x'))
    [('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'x', 'x')]

??81 iter_except(func, exception, first=None)

iter_except(func, exception, first=None), module=setuptools._vendor.more_itertools.recipes, line:434 at site-packages\setuptools_vendor\more_itertools\recipes.py

反復(fù)從函數(shù)中獲取結(jié)果,直到引發(fā)異常。將調(diào)用直到異常的接口轉(zhuǎn)換為迭代器接口。
類似于``iter(func, sentinel)``,但使用異常而不是哨兵來(lái)結(jié)束循環(huán)。
        >>> l = [0, 1, 2]
        >>> list(iter_except(l.pop, IndexError))
        [2, 1, 0]

??82 ncycles(iterable, n)

ncycles(iterable, n), module=setuptools._vendor.more_itertools.recipes, line:199 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回序列元素*n*。
    >>> list(ncycles(["a", "b"], 3))
    ['a', 'b', 'a', 'b', 'a', 'b']

??83 nth(iterable, n, default=None)

nth(iterable, n, default=None), module=setuptools._vendor.more_itertools.recipes, line:145 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回第n項(xiàng)或默認(rèn)值。
    >>> l = range(10)
    >>> nth(l, 3)
    3
    >>> nth(l, 20, "zebra")
    'zebra'

??84 nth_combination(iterable, r, index)

nth_combination(iterable, r, index), module=setuptools._vendor.more_itertools.recipes, line:546 at site-packages\setuptools_vendor\more_itertools\recipes.py

    相當(dāng)于``list(combinations(iterable, r))[index]``。
    長(zhǎng)度為*r*的*iterable*的子序列可以按字典順序排序。
    :func:`nth_combination` 直接計(jì)算排序位置*index*的子序列,而不計(jì)算前面的子序列。
        >>> nth_combination(range(5), 3, 5)
        (0, 3, 4)
    如果*r*為負(fù)值或大于*iterable*的長(zhǎng)度,將引發(fā)ValueError。
    如果給定的``IndexError`` 無(wú)效,將引發(fā)' IndexError``。

??85 pad_none(iterable)

pad_none(iterable), module=setuptools._vendor.more_itertools.recipes, line:182 at site-packages\setuptools_vendor\more_itertools\recipes.py

    返回元素序列,然后無(wú)限期返回``None``。
        >>> take(5, pad_none(range(3)))
        [0, 1, 2, None, None]
    用于模擬內(nèi)置的 :func:`map` 函數(shù)的行為。參見(jiàn):func:`padded`。

??86 pad_none(iterable)

pad_none(iterable), module=setuptools._vendor.more_itertools.recipes, line:182 at site-packages\setuptools_vendor\more_itertools\recipes.py

    返回元素序列,然后無(wú)限期返回``None``。
        >>> take(5, pad_none(range(3)))
        [0, 1, 2, None, None]
    用于模擬內(nèi)置的 :func:`map` 函數(shù)的行為。參見(jiàn) :func:`map`。

??87 _pairwise(iterable)

_pairwise(iterable), module=setuptools._vendor.more_itertools.recipes, line:258 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回原始元素中重疊的成對(duì)元素的迭代器。
    >>> take(4, pairwise(count()))
    [(0, 1), (1, 2), (2, 3), (3, 4)]
    在Python 3.10及以上版本中,這是 :func:`itertools.pairwise` 的別名。

??88 partition(pred, iterable)

partition(pred, iterable), module=setuptools._vendor.more_itertools.recipes, line:323 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回從輸入可迭代對(duì)象派生的2元組可迭代對(duì)象。
    第一個(gè)生成具有``pred(item) = False``的項(xiàng)。
    第二個(gè)函數(shù)生成具有``pred(item) = True``的項(xiàng)。
        >>> is_odd = lambda x: x % 2 != 0
        >>> iterable = range(10)
        >>> even_items, odd_items = partition(is_odd, iterable)
        >>> list(even_items), list(odd_items)
        ([0, 2, 4, 6, 8], [1, 3, 5, 7, 9])
    如果 *pred* 為 None, 將使用 :func:`bool`。
        >>> iterable = [0, 1, False, True, '',``]
        >>> false_items, true_items = partition(None, iterable)
        >>> list(false_items), list(true_items)
        ([0, False, ''], [1, True,``])

??89 powerset(iterable)

powerset(iterable), module=setuptools._vendor.more_itertools.recipes, line:354 at site-packages\setuptools_vendor\more_itertools\recipes.py

生成可迭代對(duì)象的所有可能子集。
        >>> list(powerset([1, 2, 3]))
        [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
    :func:`powerset` 將操作非 :class:`set` 實(shí)例的可迭代對(duì)象,因此輸入中的重復(fù)元素將在輸出中產(chǎn)生重復(fù)元素。
    用 :func:`unique_everseen` 輸入以避免產(chǎn)生重復(fù):
        >>> seq = [1, 1, 0]
        >>> list(powerset(seq))
        [(), (1,), (1,), (0,), (1, 1), (1, 0), (1, 0), (1, 1, 0)]
        >>> from more_itertools import unique_everseen
        >>> list(powerset(unique_everseen(seq)))
        [(), (1,), (0,), (1, 0)]

??90 prepend(value, iterator)

prepend(value, iterator), module=setuptools._vendor.more_itertools.recipes, line:588 at site-packages\setuptools_vendor\more_itertools\recipes.py

生成*value*,后跟*iterator*中的元素。
        >>> value = '0'
        >>> iterator = ['1', '2', '3']
        >>> list(prepend(value, iterator))
        ['0', '1', '2', '3']
    預(yù)先考慮多個(gè)值,看到 :func:'itertools.Chain' 或 :func:'value_Chain'。

??91 quantify(iterable, pred=<class ‘bool’>)

quantify(iterable, pred=<class ‘bool’>), module=setuptools._vendor.more_itertools.recipes, line:172 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回謂詞為真的次數(shù)。
    >>> quantify([True, False, True])
    2

??92 random_combination_with_replacement(iterable, r)

random_combination_with_replacement(iterable, r), module=setuptools._vendor.more_itertools.recipes, line:529 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回*iterable*中元素的隨機(jī)*r*長(zhǎng)度子序列,允許重復(fù)單個(gè)元素。
        >>> random_combination_with_replacement(range(3), 5) # doctest:+SKIP
        (0, 0, 1, 2, 2)
    這相當(dāng)于一個(gè)隨機(jī)從``itertools.combinations_with_replacement(iterable, r)``選擇。

??93 random_combination(iterable, r)

random_combination(iterable, r), module=setuptools._vendor.more_itertools.recipes, line:513 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回*iterable*中元素的隨機(jī)*r*長(zhǎng)度子序列。
        >>> random_combination(range(5), 3)  # doctest:+SKIP
        (2, 3, 4)
    這相當(dāng)于從 ``itertools.combinations(iterable, r)``中取一個(gè)隨機(jī)選擇。

??94 random_permutation(iterable, r=None)

random_permutation(iterable, r=None), module=setuptools._vendor.more_itertools.recipes, line:495 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回*iterable*中元素的隨機(jī)*r*長(zhǎng)度排列。
如果未指定*r*或?yàn)閌`None``,則*r*默認(rèn)為*iterable*的長(zhǎng)度。
        >>> random_permutation(range(5))  # doctest:+SKIP
        (3, 4, 0, 1, 2)
這相當(dāng)于從 ``itertools.permutations(iterable, r)`` 中取一個(gè)隨機(jī)選擇。

??95 random_product(*args, repeat=1)

random_product(*args, repeat=1), module=setuptools._vendor.more_itertools.recipes, line:475 at site-packages\setuptools_vendor\more_itertools\recipes.py

從每個(gè)輸入可迭代對(duì)象中隨機(jī)繪制一個(gè)項(xiàng)。
        >>> random_product('abc', range(4), 'XYZ')  # doctest:+SKIP
        ('c', 3, 'Z')
如果*repeat*作為關(guān)鍵字參數(shù)提供,那么將從每個(gè)可迭代對(duì)象中抽取許多項(xiàng)。
        >>> random_product('abcd', range(4), repeat=2)  # doctest:+SKIP
        ('a', 2, 'd', 3)
這相當(dāng)于從 ``itertools.product(*args, **kwarg)`` 中取一個(gè)隨機(jī)選擇。

??96 repeatfunc(func, times=None, *args)

repeatfunc(func, times=None, *args), module=setuptools._vendor.more_itertools.recipes, line:231 at site-packages\setuptools_vendor\more_itertools\recipes.py

反復(fù)調(diào)用帶 *args* 的 *func*,返回結(jié)果的可迭代對(duì)象。
如果指定了*times*,迭代對(duì)象將在重復(fù)多次后終止:
        >>> from operator import add
        >>> times = 4
        >>> args = 3, 5
        >>> list(repeatfunc(add, times, *args))
        [8, 8, 8, 8]
    如果*times*為 ``None``,則可迭代對(duì)象不會(huì)終止:
        >>> from random import randrange
        >>> times = None
        >>> args = 1, 11
        >>> take(6, repeatfunc(randrange, times, *args))  # doctest:+SKIP
        [2, 4, 8, 1, 8, 4]

??97 roundrobin(*iterables)

roundrobin(*iterables), module=setuptools._vendor.more_itertools.recipes, line:300 at site-packages\setuptools_vendor\more_itertools\recipes.py

從每個(gè)可迭代對(duì)象中產(chǎn)生一個(gè)項(xiàng),在它們之間交替。
        >>> list(roundrobin('ABC', 'D', 'EF'))
        ['A', 'D', 'E', 'B', 'F', 'C']
此函數(shù)產(chǎn)生與 :func:`interleave_longest` 相同的輸出,但對(duì)于某些輸入可能表現(xiàn)更好(特別是當(dāng)可迭代對(duì)象數(shù)量較少時(shí))。

??98 tabulate(function, start=0)

tabulate(function, start=0), module=setuptools._vendor.more_itertools.recipes, line:76 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回 ``func(start)``, ``func(start + 1)``, ``func(start + 2)``... 的結(jié)果的迭代器。
*func*應(yīng)該是一個(gè)接受一個(gè)整數(shù)參數(shù)的函數(shù)。如果未指定*start*,則默認(rèn)為0。每次迭代器向前移動(dòng)時(shí),它都會(huì)被加1。
        >>> square = lambda x: x ** 2
        >>> iterator = tabulate(square, -3)
        >>> take(4, iterator)
        [9, 4, 1, 0]

??99 tail(n, iterable)

tail(n, iterable), module=setuptools._vendor.more_itertools.recipes, line:94 at site-packages\setuptools_vendor\more_itertools\recipes.py

返回*iterable*中最后*n*項(xiàng)的迭代器。
    >>> t = tail(3, 'ABCDEFG')
    >>> list(t)
    ['E', 'F', 'G']

??100 take(n, iterable)

take(n, iterable), module=setuptools._vendor.more_itertools.recipes, line:60 at site-packages\setuptools_vendor\more_itertools\recipes.py

以列表形式返回可迭代對(duì)象的前*n*項(xiàng)。
        >>> take(3, range(10))
        [0, 1, 2]
如果可迭代對(duì)象中少于*n*個(gè)元素,則返回所有元素。
        >>> take(10, range(3))
        [0, 1, 2]

??101 unique_everseen(iterable, key=None)

unique_everseen(iterable, key=None), module=setuptools._vendor.more_itertools.recipes, line:377 at site-packages\setuptools_vendor\more_itertools\recipes.py

產(chǎn)生獨(dú)特的元素,保持秩序。
可使用可哈希和不可哈希項(xiàng)混合的序列。
        >>> list(unique_everseen('AAAABBBCCDAABBB'))
        ['A', 'B', 'C', 'D']
        >>> list(unique_everseen('ABBCcAD', str.lower))
        ['A', 'B', 'C', 'D']
對(duì)于不可哈希項(xiàng),該函數(shù)將較慢(即' O(n^2) ')。
請(qǐng)記住,``list``對(duì)象是不可哈希的-您可以使用*key*參數(shù)將列表轉(zhuǎn)換為元組(這是可哈希的)以避免減速。
        >>> iterable = ([1, 2], [2, 3], [1, 2])
        >>> list(unique_everseen(iterable))  # Slow
        [[1, 2], [2, 3]]
        >>> list(unique_everseen(iterable, key=tuple))  # Faster
        [[1, 2], [2, 3]]
類似地,您可能希望將不可哈希的``set``對(duì)象轉(zhuǎn)換為``key=frozenset``。
對(duì)于``dict``對(duì)象, ``key=lambda x: frozenset(x.items())``可以使用。

??102 unique_justseen(iterable, key=None)

unique_justseen(iterable, key=None), module=setuptools._vendor.more_itertools.recipes, line:422 at site-packages\setuptools_vendor\more_itertools\recipes.py

按順序生成元素,忽略串行重復(fù)項(xiàng)。
    >>> list(unique_justseen('AAAABBBCCDAABBB'))
    ['A', 'B', 'C', 'D', 'A', 'B']
    >>> list(unique_justseen('ABBCcAD', str.lower))
    ['A', 'B', 'C', 'A', 'D']

??類

??103 setuptools._vendor.more_itertools.more.AbortThread

AbortThread, setuptools._vendor.more_itertools.more.AbortThread, module=setuptools._vendor.more_itertools.more, line:3396 at site-packages\setuptools_vendor\more_itertools\more.py

??104 setuptools._vendor.more_itertools.more.bucket

bucket, setuptools._vendor.more_itertools.more.bucket, module=setuptools._vendor.more_itertools.more, line:851 at site-packages\setuptools_vendor\more_itertools\more.py

包裝*iterable*并返回一個(gè)對(duì)象,該對(duì)象根據(jù)*key*函數(shù)將其可迭代對(duì)象存儲(chǔ)為子可迭代對(duì)象。
        >>> iterable = ['a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'b3']
        >>> s = bucket(iterable, key=lambda x: x[0])  # Bucket by 1st character
        >>> sorted(list(s))  # Get the keys
        ['a', 'b', 'c']
        >>> a_iterable = s['a']
        >>> next(a_iterable)
        'a1'
        >>> next(a_iterable)
        'a2'
        >>> list(s['b'])
        ['b1', 'b2', 'b3']
    原始可迭代對(duì)象將被高級(jí)化,其項(xiàng)將被緩存,直到它們被子可迭代對(duì)象使用。
    這可能需要大量的存儲(chǔ)空間。默認(rèn)情況下,嘗試選擇不屬于任何項(xiàng)的bucket將耗盡可迭代對(duì)象并緩存所有值。
    如果您指定了一個(gè)驗(yàn)證器函數(shù),那么選中的桶將根據(jù)它進(jìn)行檢查。
        >>> from itertools import count
        >>> it = count(1, 2)  # Infinite sequence of odd numbers
        >>> key = lambda x: x % 10  # Bucket by last digit
        >>> validator = lambda x: x in {1, 3, 5, 7, 9}  # Odd digits only
        >>> s = bucket(it, key=key, validator=validator)
        >>> 2 in s
        False
        >>> list(s[2])
        []

??105 setuptools._vendor.more_itertools.more.callback_iter

callback_iter, setuptools._vendor.more_itertools.more.callback_iter, module=setuptools._vendor.more_itertools.more, line:3400 at site-packages\setuptools_vendor\more_itertools\more.py

將使用回調(diào)函數(shù)的函數(shù)轉(zhuǎn)換為迭代器。
    設(shè)*func*是一個(gè)帶 `callback` 關(guān)鍵字參數(shù)的函數(shù)。
    例如:
    >>> def func(callback=None):
    ...     for i, c in [(1, 'a'), (2, 'b'), (3, 'c')]:
    ...         if callback:
    ...             callback(i, c)
    ...     return 4
    使用``with callback_iter(func)``來(lái)獲取傳遞給回調(diào)函數(shù)的參數(shù)的迭代器。
    >>> with callback_iter(func) as it:
    ...     for args, kwargs in it:
    ...         print(args)
    (1, 'a')
    (2, 'b')
    (3, 'c')
    該函數(shù)將在后臺(tái)線程中調(diào)用。``done``屬性指示它是否已完成執(zhí)行。
    >>> it.done
    True
    如果它成功完成,它的返回值將在result屬性中可用。
    >>> it.result
    4
    注:
    *如果函數(shù)使用了除``callback``以外的關(guān)鍵字參數(shù),請(qǐng)輸入 *callback_kwd* 。
    *如果它完成了執(zhí)行,但引發(fā)了一個(gè)異常,訪問(wèn)``result``屬性將引發(fā)相同的異常。
    *如果它還沒(méi)有完成執(zhí)行,從with塊中訪問(wèn)result屬性會(huì)引發(fā)RuntimeError。
    *如果它還沒(méi)有完成執(zhí)行,從``with``塊外部訪問(wèn)``result``屬性會(huì)引發(fā) ``more_itertools.AbortThread`` 例外。
    *提供 *wait_seconds* 來(lái)調(diào)整它輪詢輸出的頻率。
property

1 done=<property object at 0x0000028306E0E1D8> kind:property type:property class:<class ‘setuptools._vendor.more_itertools.more.callback_iter’>
2 result=<property object at 0x0000028306E0E228> kind:property type:property class:<class ‘setuptools._vendor.more_itertools.more.callback_iter’>

??106 setuptools._vendor.more_itertools.more.countable

countable, setuptools._vendor.more_itertools.more.countable, module=setuptools._vendor.more_itertools.more, line:3796 at site-packages\setuptools_vendor\more_itertools\more.py

包裝*iterable*并記錄已經(jīng)消耗了多少項(xiàng)。
    ``items seen``屬性從``0``開(kāi)始,隨著可迭代對(duì)象被消耗而增加:
        >>> iterable = map(str, range(10))
        >>> it = countable(iterable)
        >>> it.items_seen
        0
        >>> next(it), next(it)
        ('0', '1')
        >>> list(it)
        ['2', '3', '4', '5', '6', '7', '8', '9']
        >>> it.items_seen
        10

??107 setuptools._vendor.more_itertools.more.islice_extended

islice_extended, setuptools._vendor.more_itertools.more.islice_extended, module=setuptools._vendor.more_itertools.more, line:2268 at site-packages\setuptools_vendor\more_itertools\more.py

支持*stop*、*start*和*step*的負(fù)值的 :func:`itertools.islice` 的擴(kuò)展。
        >>> iterable = iter('abcdefgh')
        >>> list(islice_extended(iterable, -4, -1))
        ['e', 'f', 'g']
    帶有負(fù)數(shù)的切片需要對(duì)*iterable*進(jìn)行一些緩存,但是這個(gè)函數(shù)會(huì)盡量減少所需的內(nèi)存量。
    例如,可以對(duì)無(wú)限迭代器使用負(fù)步驟:
        >>> from itertools import count
        >>> list(islice_extended(count(), 110, 99, -2))
        [110, 108, 106, 104, 102, 100]
    你也可以直接使用切片表法:
        >>> iterable = map(str, count())
        >>> it = islice_extended(iterable)[10:20:2]
        >>> list(it)
        ['10', '12', '14', '16', '18']

??108 setuptools._vendor.more_itertools.more.numeric_range

numeric_range, setuptools._vendor.more_itertools.more.numeric_range, module=setuptools._vendor.more_itertools.more, line:1889 at site-packages\setuptools_vendor\more_itertools\more.py

內(nèi)置``range()``函數(shù)的擴(kuò)展,其參數(shù)可以是任何可排序的數(shù)字類型。
    只有*stop*指定,*start*默認(rèn)為``0``,*step*默認(rèn)為' 1``。輸出項(xiàng)將匹配*stop*的類型:
        >>> list(numeric_range(3.5))
        [0.0, 1.0, 2.0, 3.0]
    只有*start*和*stop*指定,*step*默認(rèn)為``1``。輸出項(xiàng)將匹配*start*
        >>> from decimal import Decimal
        >>> start = Decimal('2.1')
        >>> stop = Decimal('5.1')
        >>> list(numeric_range(start, stop))
        [Decimal('2.1'), Decimal('3.1'), Decimal('4.1')]
    與*start*, *stop*和*step*指定的輸出項(xiàng)將匹配``start + step``的類型:
        >>> from fractions import Fraction
        >>> start = Fraction(1, 2)  # Start at 1/2
        >>> stop = Fraction(5, 2)  # End at 5/2
        >>> step = Fraction(1, 2)  # Count by 1/2
        >>> list(numeric_range(start, stop, step))
        [Fraction(1, 2), Fraction(1, 1), Fraction(3, 2), Fraction(2, 1)]
    如果*step*為零,將引發(fā)``ValueError``。
        >>> list(numeric_range(3, -1, -1.0))
        [3.0, 2.0, 1.0, 0.0]
    注意浮點(diǎn)數(shù)的限制;所得數(shù)字的代表可能令人驚訝。
    ``datetime.datetime``對(duì)象可以用于*start*和*stop*,如果*step*是一個(gè)``datetime.timedelta``對(duì)象:
        >>> import datetime
        >>> start = datetime.datetime(2019, 1, 1)
        >>> stop = datetime.datetime(2019, 1, 3)
        >>> step = datetime.timedelta(days=1)
        >>> items = iter(numeric_range(start, stop, step))
        >>> next(items)
        datetime.datetime(2019, 1, 1, 0, 0)
        >>> next(items)
        datetime.datetime(2019, 1, 2, 0, 0)
method
1 count(self, value)

kind=method class=numeric_range objtype=function line:2081 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

2 index(self, value)

kind=method class=numeric_range objtype=function line:2084 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

??109 setuptools._vendor.more_itertools.more.peekable

peekable, setuptools._vendor.more_itertools.more.peekable, module=setuptools._vendor.more_itertools.more, line:234 at site-packages\setuptools_vendor\more_itertools\more.py

包裝迭代器,以允許對(duì)元素進(jìn)行預(yù)查找和預(yù)添加。
    對(duì)結(jié)果調(diào)用 :meth:`peek` 以獲取將由 :func:`next` 返回的值。這不會(huì)推進(jìn)迭代器:
        >>> p = peekable(['a', 'b'])
        >>> p.peek()
        'a'
        >>> next(p)
        'a'
    傳遞 :meth:`peek` 一個(gè)默認(rèn)值以返回該值,而不是在迭代器耗盡時(shí)引發(fā)``StopIteration``。
        >>> p = peekable([])
        >>> p.peek('hi')
        'hi'
    peekables還提供了 :meth:`prepend` 方法,該方法在可迭代對(duì)象的頭部“插入”項(xiàng):
        >>> p = peekable([1, 2, 3])
        >>> p.prepend(10, 11, 12)
        >>> next(p)
        10
        >>> p.peek()
        11
        >>> list(p)
        [11, 12, 1, 2, 3]
    peekables可以被索引。索引0是將由:func:`func`返回的項(xiàng),索引1是在它之后的項(xiàng),依此類推:給定索引之前的值將被緩存。
        >>> p = peekable(['a', 'b', 'c', 'd'])
        >>> p[0]
        'a'
        >>> p[1]
        'b'
        >>> next(p)
        'a'
    'a'支持負(fù)索引,但請(qǐng)注意,它們將在源迭代器中緩存其余項(xiàng),這可能需要大量存儲(chǔ)空間。要檢查peekable是否已耗盡,請(qǐng)檢查其真值:
        >>> p = peekable(['a', 'b'])
        >>> if p:  # peekable has items
        ...     list(p)
        ['a', 'b']
        >>> if not p:  # peekable is exhausted
        ...     list(p)
method
1 peek(self, default=_marker)

kind=method class=peekable objtype=function line:307 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

返回下一個(gè)將從``next()``返回的項(xiàng)。
如果沒(méi)有剩余項(xiàng),則返回' default``。
如果沒(méi)有提供 ``default``,引發(fā) ``StopIteration``。
2 prepend(self, *items)

kind=method class=peekable objtype=function line:323 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

將項(xiàng)目堆疊為``next()``或``self.peek()``返回的下一個(gè)項(xiàng)目。
    條目將按照先入先出的順序返回:
            >>> p = peekable([1, 2, 3])
            >>> p.prepend(10, 11, 12)
            >>> next(p)
            10
            >>> list(p)
            [11, 12, 1, 2, 3]
        通過(guò)添加項(xiàng),可以“復(fù)活”先前引發(fā) ``StopIteration`` 的peekable。
            >>> p = peekable([])
            >>> next(p)
            Traceback (most recent call last):
              ...
            StopIteration
            >>> p.prepend(1)
            >>> next(p)
            1
            >>> next(p)
            Traceback (most recent call last):
              ...
            StopIteration

??110 setuptools._vendor.more_itertools.more.run_length

run_length, setuptools._vendor.more_itertools.more.run_length, module=setuptools._vendor.more_itertools.more, line:2703 at site-packages\setuptools_vendor\more_itertools\more.py

    :func:`run_length.encode` 用運(yùn)行長(zhǎng)度編碼壓縮可迭代對(duì)象。
    它生成重復(fù)項(xiàng)組,并計(jì)算它們重復(fù)的次數(shù):
        >>> uncompressed = 'abbcccdddd'
        >>> list(run_length.encode(uncompressed))
        [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    :func:`run_length.decode` 解壓先前使用運(yùn)行長(zhǎng)度編碼壓縮的可迭代對(duì)象。它產(chǎn)生解壓縮可迭代對(duì)象的項(xiàng):
        >>> compressed = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
        >>> list(run_length.decode(compressed))
        ['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd']
static method
1 decode(iterable)

kind=static method class=run_length objtype=staticmethod line:2728 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

staticmethod(function) -> method將函數(shù)轉(zhuǎn)換為靜態(tài)方法。
2 encode(iterable)

kind=static method class=run_length objtype=staticmethod line:2724 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

staticmethod(function) -> method將函數(shù)轉(zhuǎn)換為靜態(tài)方法。

??111 setuptools._vendor.more_itertools.more.seekable

seekable, setuptools._vendor.more_itertools.more.seekable, module=setuptools._vendor.more_itertools.more, line:2563 at site-packages\setuptools_vendor\more_itertools\more.py

包裝迭代器以允許向后和向前查找。
這將逐步緩存源可迭代對(duì)象中的項(xiàng),以便可以重新訪問(wèn)它們。
    調(diào)用:meth:'seek',帶一個(gè)索引查找到源可迭代對(duì)象中的那個(gè)位置。
    “重置”一個(gè)迭代器,尋求``0``:
        >>> from itertools import count
        >>> it = seekable((str(n) for n in count()))
        >>> next(it), next(it), next(it)
        ('0', '1', '2')
        >>> it.seek(0)
        >>> next(it), next(it), next(it)
        ('0', '1', '2')
        >>> next(it)
        '3'
    也可以向前搜索:
        >>> it = seekable((str(n) for n in range(20)))
        >>> it.seek(10)
        >>> next(it)
        '10'
        >>> it.seek(20)  # Seeking past the end of the source isn't a problem
        >>> list(it)
        []
        >>> it.seek(0)  # Resetting works even after hitting the end
        >>> next(it), next(it), next(it)
        ('0', '1', '2')
    調(diào)用 :meth:`peek` 來(lái)提前查看一項(xiàng)而不推進(jìn)迭代器:
        >>> it = seekable('1234')
        >>> it.peek()
        '1'
        >>> list(it)
        ['1', '2', '3', '4']
        >>> it.peek(default='empty')
        'empty'
    在迭代器結(jié)束之前,調(diào)用 :func:`bool` 將返回``True``。之后它將返回``False``:
        >>> it = seekable('5678')
        >>> bool(it)
        True
        >>> list(it)
        ['5', '6', '7', '8']
        >>> bool(it)
        False
    你可以使用 :meth:`elements` 方法查看緩存的內(nèi)容。
    它返回一個(gè) :class:`SequenceView`,一個(gè)自動(dòng)更新的視圖:
        >>> it = seekable((str(n) for n in range(10)))
        >>> next(it), next(it), next(it)
        ('0', '1', '2')
        >>> elements = it.elements()
        >>> elements
        SequenceView(['0', '1', '2'])
        >>> next(it)
        '3'
        >>> elements
        SequenceView(['0', '1', '2', '3'])
    默認(rèn)情況下,緩存會(huì)隨著源可迭代對(duì)象的進(jìn)展而增長(zhǎng),因此要小心包裝非常大或無(wú)限的可迭代對(duì)象。
    提供*maxlen*來(lái)限制緩存的大小(這當(dāng)然限制了您可以查找的遠(yuǎn))。
        >>> from itertools import count
        >>> it = seekable((str(n) for n in count()), maxlen=2)
        >>> next(it), next(it), next(it), next(it)
        ('0', '1', '2', '3')
        >>> list(it.elements())
        ['2', '3']
        >>> it.seek(0)
        >>> next(it), next(it), next(it), next(it)
        ('2', '3', '4', '5')
        >>> next(it)
        '6'
method
1 elements(self)

kind=method class=seekable objtype=function line:2693 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

2 peek(self, default=_marker)

kind=method class=seekable objtype=function line:2681 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

3 seek(self, index)

kind=method class=seekable objtype=function line:2696 at …\lib\site-packages\setuptools_vendor\more_itertools\more.py

??112 setuptools._vendor.more_itertools.more.SequenceView

SequenceView, setuptools._vendor.more_itertools.more.SequenceView, module=setuptools._vendor.more_itertools.more, line:2518 at site-packages\setuptools_vendor\more_itertools\more.py

返回序列對(duì)象*target*的只讀視圖。
    :class:`SequenceView`對(duì)象類似于Python內(nèi)置的"字典視圖"類型。
    它們提供了序列項(xiàng)的動(dòng)態(tài)視圖,這意味著當(dāng)序列更新時(shí),視圖也會(huì)更新。
        >>> seq = ['0', '1', '2']
        >>> view = SequenceView(seq)
        >>> view
        SequenceView(['0', '1', '2'])
        >>> seq.append('3')
        >>> view
        SequenceView(['0', '1', '2', '3'])
    序列視圖支持索引,切片和長(zhǎng)度查詢。它們的行為就像底層序列,除了它們不允許賦值:
        >>> view[1]
        '1'
        >>> view[1:-1]
        ['1', '2']
        >>> len(view)
        4
    序列視圖作為復(fù)制的替代方案很有用,因?yàn)樗鼈儾恍枰?太多)額外的存儲(chǔ)空間。

??113 setuptools._vendor.more_itertools.more.time_limited

time_limited, setuptools._vendor.more_itertools.more.time_limited, module=setuptools._vendor.more_itertools.more, line:3072 at site-packages\setuptools_vendor\more_itertools\more.py

從*iterable*中生成項(xiàng)目,直到*limit_seconds*通過(guò)。
如果時(shí)間限制在所有物品被產(chǎn)生之前過(guò)期,``timed_out``參數(shù)將被設(shè)置為``True``。
    >>> from time import sleep
    >>> def generator():
    ...     yield 1
    ...     yield 2
    ...     sleep(0.2)
    ...     yield 3
    >>> iterable = time_limited(0.1, generator())
    >>> list(iterable)
    [1, 2]
    >>> iterable.timed_out
    True
請(qǐng)注意,在生成每個(gè)項(xiàng)目之前檢查時(shí)間,如果經(jīng)過(guò)的時(shí)間大于*limit_seconds*,則迭代停止。
如果你的時(shí)間限制是1秒,但是從iterable中生成第一個(gè)項(xiàng)目需要2秒,那么這個(gè)函數(shù)將運(yùn)行2秒而不產(chǎn)生任何結(jié)果。

??114 setuptools._vendor.more_itertools.more.UnequalIterablesError

UnequalIterablesError, setuptools._vendor.more_itertools.more.UnequalIterablesError, module=setuptools._vendor.more_itertools.more, line:1482 at site-packages\setuptools_vendor\more_itertools\more.py

??【ast】

ast, fullname=ast, file=ast.py

ast 模塊幫助Python應(yīng)用程序處理Python抽象語(yǔ)法的樹(shù)。

??【numbers】

numbers, fullname=numbers, file=numbers.py

抽象基類(abc)的數(shù)字,根據(jù)PEP 3141。

??【textwrap】

textwrap, fullname=textwrap, file=textwrap.py

文本換行和填充。

??【marshal】

marshal, fullname=marshal, file=

該模塊包含可以以二進(jìn)制格式讀取和寫(xiě)入Python值的函數(shù)。該格式是特定于Python的,但與機(jī)器架構(gòu)問(wèn)題無(wú)關(guān)。

??【setuptools._distutils.log】

log, fullname=setuptools._distutils.log, file=setuptools_distutils\log.py

一個(gè)類似于PEP 282的簡(jiǎn)單日志機(jī)制。

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
1 int 5
4 str 5
8 dict 1
9 module 1
10 class 1
11 function 2
13 residual 9
14 system 8
15 private 1
16 all 24

??常量

??int

1 DEBUG 1
2 INFO 2
3 WARN 3
4 ERROR 4
5 FATAL 5

??模塊

??6 sys

sys, fullname=sys, file=

??函數(shù)

??7 set_threshold(level)

set_threshold(level), module=setuptools._distutils.log, line:68 at site-packages\setuptools_distutils\log.py

??8 set_verbosity(v)

set_verbosity(v), module=setuptools._distutils.log, line:75 at site-packages\setuptools_distutils\log.py

??類

??9 setuptools._distutils.log.Log

Log, setuptools._distutils.log.Log, module=setuptools._distutils.log, line:15 at site-packages\setuptools_distutils\log.py

method
1 debug(self, msg, *args)

kind=method class=Log objtype=function line:43 at …\lib\site-packages\setuptools_distutils\log.py

2 error(self, msg, *args)

kind=method class=Log objtype=function line:52 at …\lib\site-packages\setuptools_distutils\log.py

3 fatal(self, msg, *args)

kind=method class=Log objtype=function line:55 at …\lib\site-packages\setuptools_distutils\log.py

4 info(self, msg, *args)

kind=method class=Log objtype=function line:46 at …\lib\site-packages\setuptools_distutils\log.py

5 log(self, level, msg, *args)

kind=method class=Log objtype=function line:40 at …\lib\site-packages\setuptools_distutils\log.py

6 warn(self, msg, *args)

kind=method class=Log objtype=function line:49 at …\lib\site-packages\setuptools_distutils\log.py

??私有或局部

10 _global_log <setuptools._distutils.log.Log object at 0x0000028306284308>

??剩余

11 loader <_frozen_importlib_external.SourceFileLoader object at 0x0000028306280FC8>
12 spec ModuleSpec(name=‘setuptools._distutils.log’, loader=<_frozen_importlib_external.SourceFileLoader object at 0x0000028306280FC8>, origin=‘…\lib\site-packages\setuptools\_distutils\log.py’)
13 _global_log <setuptools._distutils.log.Log object at 0x0000028306284308>
14 log <bound method Log.log of <setuptools._distutils.log.Log object at 0x0000028306284308>>
15 debug <bound method Log.debug of <setuptools._distutils.log.Log object at 0x0000028306284308>>
16 info <bound method Log.info of <setuptools._distutils.log.Log object at 0x0000028306284308>>
17 warn <bound method Log.warn of <setuptools._distutils.log.Log object at 0x0000028306284308>>
18 error <bound method Log.error of <setuptools._distutils.log.Log object at 0x0000028306284308>>
19 fatal <bound method Log.fatal of <setuptools._distutils.log.Log object at 0x0000028306284308>>

??【setuptools._vendor.packaging.about】

about, fullname=setuptools.vendor.packaging.about, file=setuptools_vendor\packaging_about.py

??統(tǒng)計(jì)

序號(hào) 類別 數(shù)量
4 str 12
6 list 1
8 dict 1
13 residual 3
14 system 17
16 all 17

??常量

??【functools】

functools, fullname=functools, file=functools.py

??【os】

os, fullname=os, file=os.py

??【re】

re, fullname=re, file=re.py

??【setuptools._distutils】

_distutils, fullname=setuptools.distutils, file=setuptools_distutils_init.py

??【_distutils_hack】

_distutils_hack, fullname=_distutils_hack, file=distutils_hack_init.py

??【setuptools._deprecation_warning】

_deprecation_warning, fullname=setuptools._deprecation_warning, file=setuptools_deprecation_warning.py

??【setuptools.version】

version, fullname=setuptools.version, file=setuptools\version.py

??【setuptools.monkey】

monkey, fullname=setuptools.monkey, file=setuptools\monkey.py

??【setuptools.extension】

extension, fullname=setuptools.extension, file=setuptools\extension.py

??【setuptools.extern】

extern, fullname=setuptools.extern, file=setuptools\extern_init_.py

??【setuptools._vendor】

_vendor, fullname=setuptools.vendor, file=setuptools_vendor_init.py

??【setuptools.command】

command, fullname=setuptools.command, file=setuptools\command_init_.py

??【setuptools.windows_support】

windows_support, fullname=setuptools.windows_support, file=setuptools\windows_support.py

??【setuptools.config】

config, fullname=setuptools.config, file=setuptools\config.py

??【setuptools.dist】

dist, fullname=setuptools.dist, file=setuptools\dist.py

??【setuptools.py34compat】

py34compat, fullname=setuptools.py34compat, file=setuptools\py34compat.py

??【setuptools._imp】

_imp, fullname=setuptools._imp, file=setuptools_imp.py

??【setuptools.depends】

depends, fullname=setuptools.depends, file=setuptools\depends.py

??【setuptools.logging】

logging, fullname=setuptools.logging, file=setuptools\logging.py

??【setuptools.msvc】

msvc, fullname=setuptools.msvc, file=setuptools\msvc.py

??【sys】

sys, fullname=sys, file=

??【importlib】

importlib, fullname=importlib, file=importlib_init_.py

??【distutils.dist】

dist, fullname=distutils.dist, file=distutils\dist.py

??【distutils.config】

config, fullname=distutils.config, file=distutils\config.py

??【distutils.extension】

extension, fullname=distutils.extension, file=distutils\extension.py

??【distutils.command】

command, fullname=distutils.command, file=distutils\command_init_.py

??【platform】

platform, fullname=platform, file=platform.py

??【types】

types, fullname=types, file=types.py

??【inspect】

inspect, fullname=inspect, file=inspect.py

??【ctypes】

ctypes, fullname=ctypes, file=ctypes_init_.py

??【io】

io, fullname=io, file=io.py

??【warnings】

warnings, fullname=warnings, file=warnings.py

??【contextlib】

contextlib, fullname=contextlib, file=contextlib.py

??【itertools】

itertools, fullname=itertools, file=

??【setuptools.extern.packaging.version】

version, fullname=setuptools.extern.packaging.version, file=setuptools_vendor\packaging\version.py

??【dis】

dis, fullname=dis, file=dis.py

將Python字節(jié)碼反匯編為助記符。

??【logging】

logging, fullname=logging, file=logging_init_.py

??【json】

json, fullname=json, file=json_init_.py

??【subprocess】

subprocess, fullname=subprocess, file=subprocess.py

??【winreg】

winreg, fullname=winreg, file=

??【zipfile】

zipfile, fullname=zipfile, file=zipfile.py

??【setuptools.extern.packaging._structures】

_structures, fullname=setuptools.extern.packaging._structures, file=setuptools_vendor\packaging_structures.py

??【setuptools._vendor.packaging._manylinux】

_manylinux, fullname=setuptools._vendor.packaging._manylinux, file=setuptools_vendor\packaging_manylinux.py

??【setuptools._vendor.packaging._musllinux】

_musllinux, fullname=setuptools._vendor.packaging._musllinux, file=setuptools_vendor\packaging_musllinux.py

??【setuptools.extern.packaging.tags】

tags, fullname=setuptools.extern.packaging.tags, file=setuptools_vendor\packaging\tags.py

??【setuptools.extern.packaging.utils】

utils, fullname=setuptools.extern.packaging.utils, file=setuptools_vendor\packaging\utils.py

??【setuptools.extern.packaging.specifiers】

specifiers, fullname=setuptools.extern.packaging.specifiers, file=setuptools_vendor\packaging\specifiers.py

??【setuptools._vendor.more_itertools.recipes】

recipes, fullname=setuptools._vendor.more_itertools.recipes, file=setuptools_vendor\more_itertools\recipes.py

??【setuptools._vendor.more_itertools.more】

more, fullname=setuptools._vendor.more_itertools.more, file=setuptools_vendor\more_itertools\more.py

??【collections】

collections, fullname=collections, file=collections_init_.py

??【struct】

struct, fullname=struct, file=struct.py

??【operator】

operator, fullname=operator, file=operator.py

??【sysconfig】

sysconfig, fullname=sysconfig, file=sysconfig.py

訪問(wèn)Python的配置信息。

??【abc】

abc, fullname=abc, file=abc.py

??【collections.abc】

abc, fullname=collections.abc, file=collections\abc.py文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-456655.html

到了這里,關(guān)于一圖看懂 setuptools 模塊:一個(gè)功能齊全、積極維護(hù)且穩(wěn)定的庫(kù),旨在方便打包Python項(xiàng)目,資料整理+筆記(大全)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一圖看懂 multidict 模塊:類似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn),資料整理+筆記(大全)

    一圖看懂 multidict 模塊:類似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn),資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹系統(tǒng)內(nèi)置 multidict 模塊(類似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn))、函數(shù)、類及類的方法和屬性。 它通過(guò)代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類工具書(shū)。它是系列集

    2024年02月04日
    瀏覽(27)
  • 一圖看懂6G應(yīng)用及用例研究

    一圖看懂6G應(yīng)用及用例研究

    關(guān)注公號(hào)回復(fù)“220622”下載 《Next G Alliance Report: 6G Applications and Use Cases》原文 下一代通信聯(lián)盟(Next G Alliance)是由美國(guó)電信行業(yè)解決方案聯(lián)盟ATIS(Alliance for Telecommunications Industry Solutions)牽頭于2020年10月成立的,由于其主要目的是研究6G所以也被稱為美國(guó)6G聯(lián)盟。聯(lián)盟成員包

    2024年01月19日
    瀏覽(50)
  • 【一圖看懂選擇排序】——選擇排序和堆排序

    【一圖看懂選擇排序】——選擇排序和堆排序

    前文知識(shí)清單: 直接選擇排序通過(guò)每一輪的比較,找到最大值和最小值,將最大值的節(jié)點(diǎn)跟右邊交換,最小值節(jié)點(diǎn)跟左邊交換,達(dá)到排升序的效果。 一圖看懂直接選擇排序: 每一輪比較都需要遍歷數(shù)組,查找最大最小值,第一輪遍歷N個(gè)數(shù)據(jù),第二輪是N-2個(gè)數(shù)據(jù),第三輪N-

    2023年04月15日
    瀏覽(17)
  • 數(shù)據(jù)中臺(tái)開(kāi)源技術(shù)棧:一圖看懂全面的數(shù)據(jù)管理與應(yīng)用架構(gòu)

    數(shù)據(jù)中臺(tái)開(kāi)源技術(shù)棧:一圖看懂全面的數(shù)據(jù)管理與應(yīng)用架構(gòu)

    ? ? ? 隨著數(shù)字化時(shí)代的到來(lái),數(shù)據(jù)管理和應(yīng)用架構(gòu)變得越來(lái)越重要。數(shù)據(jù)平臺(tái)作為一個(gè)集中管理和利用數(shù)據(jù)的架構(gòu),為組織提供了促進(jìn)數(shù)據(jù)驅(qū)動(dòng)決策和業(yè)務(wù)創(chuàng)新的能力。本文通過(guò)一幅圖表,將數(shù)據(jù)平臺(tái)技術(shù)棧的組成部分清晰呈現(xiàn),助您深入了解數(shù)據(jù)中臺(tái)的全面數(shù)據(jù)管理與應(yīng)

    2024年04月10日
    瀏覽(35)
  • 一圖看懂CodeArts Release三大特性,帶你玩轉(zhuǎn)發(fā)布管理服務(wù)

    一圖看懂CodeArts Release三大特性,帶你玩轉(zhuǎn)發(fā)布管理服務(wù)

    體驗(yàn)通道 : 發(fā)布管理 CodeArts Release-華為云

    2024年02月06日
    瀏覽(18)
  • 想要成為AIGC工程師, 卻不知從哪里開(kāi)始學(xué)習(xí)?近嶼全新推出一圖看懂!

    想要成為AIGC工程師, 卻不知從哪里開(kāi)始學(xué)習(xí)?近嶼全新推出一圖看懂!

    在這個(gè)AI技術(shù)飛速發(fā)展的時(shí)代,在人們常常警惕AI將取代自己的工作的時(shí)候,一個(gè)另類的說(shuō)法卻悄然流行:“AI不會(huì)取代你的工作,會(huì)取代你的是掌握了AI技能的人?!边@不僅僅是一個(gè)警示,更是一個(gè)機(jī)遇。隨著AI工具如ChatGPT、Midjourney、Stable Diffusion(SD)等的普及,掌握AIGC(人

    2024年04月27日
    瀏覽(24)
  • 通過(guò)幾張圖看懂chatGPT發(fā)展史

    通過(guò)幾張圖看懂chatGPT發(fā)展史

    ChatGPT 是由 OpenAl 團(tuán)隊(duì)研發(fā)創(chuàng)造,OpenAl 是由創(chuàng)業(yè)家埃隆-馬斯克、美國(guó)創(chuàng)業(yè)孵化器 Y Combinator 總裁阿爾特曼、全球在線支付平臺(tái) PayPal 聯(lián)合創(chuàng)始人彼得-蒂爾等人于 2015 年 在舊金山創(chuàng)立的一家非盈利的 AI 研究公司,擁有多位硅谷重量級(jí)人物的資金支持,啟動(dòng)資金 高達(dá) 10 億美金;

    2024年02月11日
    瀏覽(15)
  • 網(wǎng)絡(luò)安全——一張圖看懂HTTPS建立過(guò)程

    網(wǎng)絡(luò)安全——一張圖看懂HTTPS建立過(guò)程

    · 準(zhǔn)備工作(對(duì)應(yīng)圖中prepare1234) · 發(fā)起鏈接 · 最后 關(guān)于網(wǎng)絡(luò)安全加密的介紹可以看之前文章: (數(shù)據(jù)的加密與簽名) HTTPS建立過(guò)程相當(dāng)復(fù)雜,下圖為示意圖,可以有整體認(rèn)識(shí),一般我們編程知道這些已足夠。 如果你想仿照HTTPS實(shí)現(xiàn)類似加密,可以閱讀下具體過(guò)程,作為參

    2024年04月12日
    瀏覽(26)
  • 一張圖看懂 USDT三種類型地址 Omni、ERC20、TRC20的區(qū)別

    一張圖看懂 USDT三種類型地址 Omni、ERC20、TRC20的區(qū)別

    USDT 是當(dāng)前實(shí)用最廣泛,市值最高的穩(wěn)定幣,它是中心化的公司Tether發(fā)行的。在今年的4月17日之前,市場(chǎng)上存在著2種不同類型的USDT。4月17日又多了一種波場(chǎng)TRC20協(xié)議發(fā)行的USDT,它們各自有什么區(qū)別呢?哪個(gè)轉(zhuǎn)賬最快到賬?哪種最安全?手續(xù)費(fèi)最低? USDT三種鏈類型Omni、ERC20、

    2024年02月03日
    瀏覽(22)
  • iApp祁天社區(qū)UI成品源碼 功能齊全的社區(qū)應(yīng)用

    iApp祁天社區(qū)UI成品源碼 功能齊全的社區(qū)應(yīng)用

    iApp祁天社區(qū)UI成品源碼是一個(gè)非常實(shí)用的資源,提供了完整的源代碼,可以幫助您快速搭建一個(gè)功能齊全的社區(qū)應(yīng)用。 這個(gè)源碼具有豐富的UI設(shè)計(jì),經(jīng)過(guò)精心調(diào)整和優(yōu)化,確保用戶體驗(yàn)流暢而舒適。它不僅具備基本的社區(qū)功能,如用戶注冊(cè)、登錄、發(fā)布帖子等,還提供了一些

    2024年04月26日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包