python中對%、~含義的解釋

%有哪幾種含義?

查找手冊

翻看《The Python Libary Reference》python庫指南中附錄index部分(P1899):

% (percent):
datetime format, 198, 594, 596
environment variables expansion (Windows), 377, 1798
interpolation in configuration files, 493
operator, 31
printf-style formatting, 51, 65

根據index中用法索引逐項來看:

  • datetime format:表示日期格式
  • environment variables expansion 環境變量擴展
  • interpolation in configureation files 插入設置文件
  • operator:取餘
  • printf-style formatting:輸出格式化

環境變量擴展:

Expands environment variable placeholders %NAME% in strings like REG_EXPAND_SZ:
    ExpandEnvironmentStrings('%windir%')
    'C:\\Windows'

插入設置文件

  • home_dir: /Users
  • my_dir: %(home_dir)s/lumberjack
  • my_pictures: %(my_dir)s/Pictures

實例:

cls_info = ['%s\n(%d %s)'% (estimator_conf['name'],
                            estimator_conf['complexity_computer'](estimator_conf['instance']),
                            estimator_conf['complexity_label']) 
                            for estimator_conf in configuration['estimators']]

~含義是什麼?

查手冊:

~ (tilde)
home directory expansion, 377
operator, 32

除瞭表示傢目錄外,表示操作符按位取反(the bits of inverted)

~5=-6
~-11=10

可以理解為取0為第一個正數,取坐標軸對稱點。

解析見下 ↓↓↓↓↓↓↓

按位取反運算符

按位取反運算符~很少用到,今天看《byte of Python》書中舉例,這裡學習一下,再復習一下計算機的基礎知識。

按位取反運算符,用來對一個二進制數按位取反,即將0變1,將1變0,按理說十進制的5(0000 0101)按位取反應該為(1111 1010)十進制250,但是在Python中運算結果並非如此,結果如下:

>>> ~-6
5

計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同。在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。

  • 正整數的補碼是其二進制表示,與原碼相同 。
  • 負整數的補碼,將其對應正數二進制表示所有位取反(包括符號位,0變1,1變0)後加1。

Python按位取反運算:

>>> ~-6
5

運算分析:

-6的補碼是+6(0000 0110)取反後再+1,為(1111 1001)+(0000 0001)=(1111 1010),也就是計算機中-6是用(1111 1010)來存儲的,(1111 1010) 按位取反得到(0000 0101)這就是答案5

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: