# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
- 自然語言在不同的語境下有不同的理解,而計(jì)算機(jī)要根據(jù)編程語言執(zhí)行任務(wù)萤彩,就必須保證編程語言寫出的程序決不能有歧義
-
#
是注釋粪滤,其他每一行都是一個(gè)語句,當(dāng)語句以冒號“:”結(jié)尾時(shí)雀扶,縮進(jìn)的語句視為代碼塊额衙。 - Python程序是大小寫敏感的
- 縮進(jìn)的壞處就是“復(fù)制-粘貼”功能失效了,這是最坑爹的地方怕吴。
數(shù)據(jù)類型和變量
- 字符串可以用單引號
'
或雙引號"
- 字符串內(nèi)部既包含
'
又包含"
用轉(zhuǎn)義字符\來標(biāo)識
'I\'m \"OK\"!'
- 用
r''
表示''
內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義
>>> print '\\\t\\'
\ \
>>> print r'\\\t\\'
\\\t\\
- 多行字符串
'''...'''
print('''line1
line2
line3''')
布爾值:
True
False
布爾值可以用and
窍侧、or
和not
運(yùn)算空值
None
Python沒有常量, 只是習(xí)慣上用全部大寫的變量名來表示“常量”
/
除法計(jì)算結(jié)果是浮點(diǎn)數(shù)转绷,即使是兩個(gè)整數(shù)恰好整除
>>> 9 / 3
3.0
-
//
稱為地板除伟件,兩個(gè)整數(shù)的除法仍然是整數(shù)(去掉小數(shù)部分)
>>> 10 // 3
3
字符編碼
ASCII : 127個(gè)字符
Unicode把所有語言都統(tǒng)一到一套編碼里,這樣就不會再有亂碼問題了
UTF-8編碼把Unicode編碼轉(zhuǎn)化為“可變長編碼”的议经。
UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié)斧账,常用的英文字母被編碼成1個(gè)字節(jié),漢字通常是3個(gè)字節(jié)煞肾,只有很生僻的字符才會被編碼成4-6個(gè)字節(jié)咧织。-
在計(jì)算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼籍救,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r(shí)候习绢,就轉(zhuǎn)換為UTF-8編碼。
用記事本編輯的時(shí)候蝙昙,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里闪萄,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:
瀏覽網(wǎng)頁的時(shí)候奇颠,服務(wù)器會把動態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:
Python的字符串
Python 3版本中败去,字符串是以Unicode編碼的。
ord()
函數(shù)獲取字符的整數(shù)表示烈拒,chr()
函數(shù)把編碼轉(zhuǎn)換為對應(yīng)的字符:
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
- 十六進(jìn)制的字符串
>>> '\u4e2d\u6587'
'中文'
-
由于Python的字符串類型是
str
圆裕,在內(nèi)存中以Unicode表示,一個(gè)字符對應(yīng)若干個(gè)字節(jié)荆几。如果要在網(wǎng)絡(luò)上傳輸吓妆,或者保存到磁盤上,就需要把str變?yōu)橐宰止?jié)為單位的bytes
伴郁。bytes類型的數(shù)據(jù)表示:
x = b'ABC'
以Unicode表示的
str
通過encode()
方法可以編碼為指定的bytes
:
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
純英文的str可以用ASCII編碼為bytes耿战,內(nèi)容是一樣的,含有中文的str可以用UTF-8編碼為bytes焊傅。含有中文的str無法用ASCII編碼剂陡,因?yàn)橹形木幋a的范圍超過了ASCII編碼的范圍狈涮,Python會報(bào)錯(cuò)。
在
bytes
中鸭栖,無法顯示為ASCII字符的字節(jié)歌馍,用\x##
顯示。把bytes變?yōu)閟tr晕鹊,就需要用decode()方法:
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
-
len()
函數(shù)計(jì)算的是str
的字符數(shù)松却,如果換成bytes
,len()
函數(shù)就計(jì)算字節(jié)數(shù):
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
為了避免亂碼問題溅话,應(yīng)當(dāng)始終堅(jiān)持使用UTF-8編碼對str和bytes進(jìn)行轉(zhuǎn)換晓锻。
由于Python源代碼也是一個(gè)文本文件,所以飞几,當(dāng)你的源代碼中包含中文的時(shí)候砚哆,在保存源代碼時(shí),就需要務(wù)必指定保存為UTF-8編碼屑墨。
# -*- coding: utf-8 -*-
- 格式化
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
如果你不太確定應(yīng)該用什么躁锁,%s
永遠(yuǎn)起作用,它會把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串卵史。
使用list和tuple
- list是一種有序的集合战转,里面的元素的數(shù)據(jù)類型可以不同
classmates = ['Michael', 'Bob', 'Tracy']
classmates[-1]
classmates.append('Adam')
classmates.insert(1, 'Jack')
classmates.pop() # 刪除list末尾的元素
classmates.pop(1) # 刪除指定位置的元素
classmates[1] = 'Sarah'
len(classmates)
- tuple和list非常類似,但是tuple一旦初始化就不能修改
>>> classmates = ('Michael', 'Bob', 'Tracy')
- 能用tuple代替list就盡量用tuple
- 只有1個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號,以躯,來消除歧義
t = (2)
- 在tuple中放入list槐秧,這樣看上去就能修改tuple
tt = ("a", "b", [4,5,9])
條件判斷
if age >= 18:
print('your age is', age)
print('adult')
else:
print('your age is', age)
print('teenager')
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
循環(huán)
-
for x in ...
: 把每個(gè)元素代入變量x,然后執(zhí)行縮進(jìn)塊的語句寸潦。 range()
sum = 0
for x in range(101):
sum = sum + x
print(sum)
while
break
-
continue
語句色鸳,跳過當(dāng)前的這次循環(huán),直接開始下一次循環(huán)见转。
使用dict和set
- dict
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d['Michael']
d.get('Thomas') # None
d.get('Thomas', -1) # -1
d.pop('Bob')
-
和list比較,dict有以下幾個(gè)特點(diǎn):
- 查找和插入的速度極快蒜哀,不會隨著key的增加而增加斩箫;
- 需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多撵儿。
dict的key必須是不可變對象乘客。
dict的key不存在時(shí)會包
KeyError
錯(cuò)誤,可通過in
或get()
方法來判斷淀歇。
>>> 'Thomas' in d
False
- dict要刪除一個(gè)key易核,用pop(key)方法,對應(yīng)的value也會從dict中刪除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
- set(數(shù)學(xué)意義上的無序和無重復(fù)元素的集合)和dict類似浪默,也是一組key的集合牡直,但不存儲value缀匕。由于key不能重復(fù),所以碰逸,在set中乡小,沒有重復(fù)的key。
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.remove(4)
>>> s
{1, 2, 3}
set是無序的
對于不變對象來說饵史,調(diào)用對象自身的任意方法满钟,也不會改變該對象自身的內(nèi)容。相反胳喷,這些方法會創(chuàng)建新的對象并返回湃番,這樣,就保證了不可變對象本身永遠(yuǎn)是不可變的吭露。
參考:《Python教程》