勇闖新世界︰ W!o《卡夫卡村》變形祭︰圓局定向‧二

就讓我們從

python-wifi 0.6.0

Python WiFi is a Python module that provides read and write access to a wireless network card’s capabilities using the Linux Wireless Extensions.

Python WiFi is a Python module that provides read and write access to a wireless network card’s capabilities using the Linux Wireless Extensions. It was initially developed by Roman Joost with advice from Guido Goldstein of Infrae. It is currently maintained by Sean Robinson.……

 

的安裝開始,

wget http://git.tuxfamily.org/pythonwifi/pythonwifi.git/snapshot/pythonwifi-0.6.0.tar.gz
tar zxvf pythonwifi-0.6.0.tar.gz
cd pythonwifi-0.6.0/
sudo python setup.py install

※ 註記︰因為萬國碼的相容性問題,目前 pythonwifi 只能用於派生二,不能用於派生三。

進入

Python WiFi

A new api is being organized for Python WiFi beyond v0.6.0. Your feedback will make Python WiFi better, so please participate. Join the mailing list and join the discussion.

Python WiFi is intended for developers that wish to use their WiFi card from within a Python program. If you are looking for a GNU/Linux program to scan for, and connect with, WiFi networks, you may want to try WiFi Radar, Wicd, or NetworkManager.

Python WiFi is a Python module that provides read and write access to a wireless network card’s capabilities using the Linux Wireless Extensions. This module was initially created by Róman Joost and is currently maintained by Sean Robinson <robinson@tuxfamily.org>. The latest version is 0.6.0.

Documentation

Matrices of features to try to match: Wireless Extensions, iwconfig.py, and iwlist.py.

Source Code

Browse the Source

Download

A Python source package is available at the Python Package Index.

“Python” and the Python logos are trademarks or registered trademarks of the Python Software Foundation, used with permission.

Last Update: March 23, 2015

 

派生 WiFi 程式之域。然而這個程式庫的說明文件僅有兩個範例,將要如何學習的呢?固然閱讀原始碼是一種方法,通常耗時得慢活,一般乃必要才為之之事。幸好大部份『派生程式庫』的作者喜歡『吉多』 Guido 大教主倡導的『 Code Style 』編碼風格,於是我們可以嘗試『help □○』,

pi@raspberrypi ~ 
*** QuickLaTeX cannot compile formula:
python
Python 2.7.3 (default, Mar 18 2014, 05:13:23) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pythonwifi.iwlibs import Wireless
>>> wifi = Wireless('eth1')
>>> help(wifi)
</pre>
<span style="color: #808000;">結果得到</span>

<span style="color: #808080;">Help on Wireless in module <span style="color: #ff9900;">pythonwifi.iwlibs</span> object:</span>

<span style="color: #808080;">class <span style="color: #ff9900;">Wireless</span>(__builtin__.object)</span>
<span style="color: #808080;"> | Provides high-level access to wireless interfaces.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | This class uses <span style="color: #ff9900;">WirelessInfo</span> for most access.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | Methods defined here:</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | __init__(self, ifname)</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | commit(self)</span>
<span style="color: #808080;"> | Commit pending changes.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getAPaddr</span>(self)</span>
<span style="color: #808080;"> | Returns the access point MAC address.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless, getNICnames</span>
<span style="color: #808080;"> | >>> ifnames = getNICnames()</span>
<span style="color: #808080;"> | >>> ifnames</span>
<span style="color: #808080;"> | ['eth1', 'wifi0']</span>
<span style="color: #808080;"> | >>> wifi = Wireless(ifnames[0])</span>
<span style="color: #808080;"> | >>> wifi.getAPaddr()</span>
<span style="color: #808080;"> | '00:0D:88:8E:4E:93'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | Test with non-wifi card:</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth0')</span>
<span style="color: #808080;"> | >>> wifi.getAPaddr()</span>
<span style="color: #808080;"> | (95, 'Operation not supported')</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | Test with non-existant card:</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth2')</span>
<span style="color: #808080;"> | >>> wifi.getAPaddr()</span>
<span style="color: #808080;"> | (19, 'No such device')</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getBitrate</span>(self)</span>
<span style="color: #808080;"> | Returns the device's currently set bit rate in Mbit.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getBitrate()</span>
<span style="color: #808080;"> | '11 Mb/s'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> |<span style="color: #ff9900;"> getBitrates</span>(self)</span>
<span style="color: #808080;"> | Returns the number of bitrates available for the device.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> num, rates = wifi.getBitrates()</span>
<span style="color: #808080;"> | >>> num == len(rates)</span>
<span style="color: #808080;"> | True</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getChannelInfo</span>(self)</span>
<span style="color: #808080;"> | Returns the number of channels and available frequencies for</span>
<span style="color: #808080;"> | the device.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> num, rates = wifi.getChannelInfo()</span>
<span style="color: #808080;"> | >>> num == len(rates)</span>
<span style="color: #808080;"> | True</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getEncryption</span>(self)</span>
<span style="color: #808080;"> | Get the association mode, which is probably a string of '*',</span>
<span style="color: #808080;"> | 'open', 'private', 'off'.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | As a normal user, you will get an 'Operation not permitted'</span>
<span style="color: #808080;"> | error:</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getEncryption()</span>
<span style="color: #808080;"> | (1, 'Operation not permitted')</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> |<span style="color: #ff9900;"> getEssid</span>(self)</span>
<span style="color: #808080;"> | Returns the current ESSID information.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getEssid()</span>
<span style="color: #808080;"> | 'romanofski'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getFragmentation</span>(self)</span>
<span style="color: #808080;"> | Returns the fragmentation threshold.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | It depends on what the driver says. If you have fragmentation</span>
<span style="color: #808080;"> | threshold turned on, you'll get an int. If it's turned off</span>
<span style="color: #808080;"> | you'll get a string: 'off'.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getFragmentation()</span>
<span style="color: #808080;"> | 'off'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getFrequency</span>(self)</span>
<span style="color: #808080;"> | Returns currently set frequency of the card.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getFrequency()</span>
<span style="color: #808080;"> | '2.417 GHz'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getKey</span>(self, key=0, formatted=True)</span>
<span style="color: #808080;"> | Get an encryption key.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | key 0 is current key, otherwise, retrieve specific key (1-4)</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | As a normal user, you will get an 'Operation not permitted'</span>
<span style="color: #808080;"> | error:</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getKey()</span>
<span style="color: #808080;"> | ABCD-9512-34</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getKeys</span>(self)</span>
<span style="color: #808080;"> | Get all encryption keys.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | Returns a list of tuples.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | As a normal user, you will get a 'Operation not permitted'</span>
<span style="color: #808080;"> | error:</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getKeys()</span>
<span style="color: #808080;"> | [(1, '1234-5678-91'), (2, None), (3, 'ABCD-EFAB-CD'), (4, None)]</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getMode</span>(self)</span>
<span style="color: #808080;"> | Returns currently set operation mode.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getMode()</span>
<span style="color: #808080;"> | 'Managed'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getPowermanagement</span>(self)</span>
<span style="color: #808080;"> | Returns the power management settings.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | #>>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | #>>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | #>>> wifi.getPowermanagement()</span>
<span style="color: #808080;"> | #'off'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getQualityAvg</span>(self)</span>
<span style="color: #808080;"> | Returns an Iwquality object with average quality information.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> aq = wifi.getQualityAvg()</span>
<span style="color: #808080;"> | >>> print "quality:", aq.quality, "signal:", aq.siglevel, "noise:", aq.nlevel</span>
<span style="color: #808080;"> | quality: 38 signal: 13 noise: 0</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getQualityMax</span>(self)</span>
<span style="color: #808080;"> | Returns an Iwquality object with maximum quality information.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> mq = wifi.getQualityMax()</span>
<span style="color: #808080;"> | >>> print "quality:", mq.quality, "signal:", mq.siglevel, "noise:", mq.nlevel</span>
<span style="color: #808080;"> | quality: 38 signal: 13 noise: 0</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getRTS</span>(self)</span>
<span style="color: #808080;"> | Returns the RTS threshold, likely to be int, 'auto',</span>
<span style="color: #808080;"> | 'fixed', 'off'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | man iwconfig:</span>
<span style="color: #808080;"> | "RTS/CTS adds a handshake before each packet transmission to</span>
<span style="color: #808080;"> | make sure that the channel is clear. This adds overhead, but</span>
<span style="color: #808080;"> | increases performance in case of hidden nodes or a large</span>
<span style="color: #808080;"> | number of active nodes. This parameter sets the size of the</span>
<span style="color: #808080;"> | smallest packet for which the node sends RTS; a value equal</span>
<span style="color: #808080;"> | to the maximum packet size disable the mechanism."</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getRTS()</span>
<span style="color: #808080;"> | 'off'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getRetrylimit</span>(self)</span>
<span style="color: #808080;"> | Returns the retry/lifetime limit.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | man iwconfig:</span>
<span style="color: #808080;"> | "Most cards have MAC retransmissions, and some allow to set</span>
<span style="color: #808080;"> | the behaviour of the retry mechanism."</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getRetrylimit()</span>
<span style="color: #808080;"> | 16</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getSensitivity</span>(self)</span>
<span style="color: #808080;"> | Returns sensitivity information.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | man iwconfig:</span>
<span style="color: #808080;"> | "This is the lowest signal level for which the hardware</span>
<span style="color: #808080;"> | attempt packet reception, signals weaker than this are</span>
<span style="color: #808080;"> | ignored. This is used to avoid receiving background noise,</span>
<span style="color: #808080;"> | so you should set it according to the average noise</span>
<span style="color: #808080;"> | level. Positive values are assumed to be the raw value used</span>
<span style="color: #808080;"> | by the hardware or a percentage, negative values are</span>
<span style="color: #808080;"> | assumed to be dBm."</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getSensitivity()</span>
<span style="color: #808080;"> | 'off'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getStatistics</span>(self)</span>
<span style="color: #808080;"> | Returns statistics information which can also be found in</span>
<span style="color: #808080;"> | /proc/net/wireless.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getTXPower</span>(self)</span>
<span style="color: #808080;"> | Returns the transmit power in dBm.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getTXPower()</span>
<span style="color: #808080;"> | '17 dBm'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">getWirelessName</span>(self)</span>
<span style="color: #808080;"> | Returns the wireless name.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getWirelessName()</span>
<span style="color: #808080;"> | 'IEEE 802.11-DS'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">scan</span>(self)</span>
<span style="color: #808080;"> | Returns Iwscanresult objects, after a successful scan.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">setAPaddr</span>(self, addr)</span>
<span style="color: #808080;"> | Sets the access point MAC address.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | translated from iwconfig.c</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | FIXME: This needs to check address type before acting.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">setEncryption</span>(self, mode)</span>
<span style="color: #808080;"> | Set the association mode.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | As a normal user, you will get an 'Operation not permitted'</span>
<span style="color: #808080;"> | error:</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.setEncryption()</span>
<span style="color: #808080;"> | (1, 'Operation not permitted')</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">setEssid</span>(self, essid)</span>
<span style="color: #808080;"> | Sets the ESSID.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.getEssid()</span>
<span style="color: #808080;"> | 'romanofski'</span>
<span style="color: #808080;"> | >>> wifi.setEssid('Joost')</span>
<span style="color: #808080;"> | >>> wifi.getEssid()</span>
<span style="color: #808080;"> | 'Joost'</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">setFrequency</span>(self, freq)</span>
<span style="color: #808080;"> | Sets the frequency on the card.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | translated from iwconfig.c</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">setKey</span>(self, key, index=1)</span>
<span style="color: #808080;"> | Set an encryption key.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | As a normal user, you will get an 'Operation not permitted'</span>
<span style="color: #808080;"> | error:</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | >>> from iwlibs import Wireless</span>
<span style="color: #808080;"> | >>> wifi = Wireless('eth1')</span>
<span style="color: #808080;"> | >>> wifi.setKey()</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | <span style="color: #ff9900;">setMode</span>(self, mode)</span>
<span style="color: #808080;"> | Sets the operation mode.</span>
<span style="color: #808080;"> |</span>
<span style="color: #808080;"> | ----------------------------------------------------------------------</span>

 

<span style="color: #808000;">再輔之以派生『內省』之『 <span style="color: #ff9900;"><a style="color: #ff9900;" href="https://docs.python.org/3/library/inspect.html">inspect</a></span> 』視察之法,如是就能試行,</span>
<pre class="lang:sh decode:true">pi@raspberrypi ~

*** Error message:
You can't use `macro parameter character #' in math mode.
leading text: <span style="color: #
Unicode character 結 (U+7D50)
leading text: <span style="color: #808000;">結
Unicode character 果 (U+679C)
leading text: <span style="color: #808000;">結果
Unicode character 得 (U+5F97)
leading text: <span style="color: #808000;">結果得
Unicode character 到 (U+5230)
leading text: <span style="color: #808000;">結果得到
Missing $ inserted.
You can't use `macro parameter character #' in horizontal mode.
leading text: <span style="color: #
You can't use `macro parameter character #' in horizontal mode.
leading text: ...n Wireless in module <span style="color: #
You can't use `macro parameter character #' in horizontal mode.
leading text: <span style="color: #

python
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pythonwifi.iwlibs import Wireless
>>> wifi = Wireless('wlan0')
>>> dir(wifi)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_formatBitrate', '_formatFrequency', 'commit', 'getAPaddr', 'getBitrate', 'getBitrates', 'getChannelInfo', 'getEncryption', 'getEssid', 'getFragmentation', 'getFrequency', 'getKey', 'getKeys', 'getMode', 'getPowermanagement', 'getQualityAvg', 'getQualityMax', 'getRTS', 'getRetrylimit', 'getSensitivity', 'getStatistics', 'getTXPower', 'getWirelessName', 'ifname', 'iwstruct', 'scan', 'setAPaddr', 'setEncryption', 'setEssid', 'setFrequency', 'setKey', 'setMode', 'sockfd', 'wireless_info']
>>> wifi.getQualityAvg()
<pythonwifi.iwlibs.Iwquality object at 0x767fd110>
>>> dir(wifi.getQualityAvg())
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fmt', 'getNoiselevel', 'getSignallevel', 'nlevel', 'noiselevel', 'parse', 'quality', 'setNoiselevel', 'setSignallevel', 'setValues', 'siglevel', 'signallevel', 'updated']
>>> wifi.getQualityAvg().getSignallevel()
178
>>> wifi.getQualityAvg().getNoiselevel()
0

 

這就是 Python 之『非同的禪!!』,『派生大道』 Pythonic Way 的中心主旨也。