print('I'm ok.')
轉義字符\可以轉義很多字符戴卜,比如\n表示換行胶坠,\t表示制表符指么,字符\本身也要轉義,所以\表示的字符就是\
如果字符串里面有很多字符都需要轉義区端,就需要加很多\值漫,為了簡化,Python還允許用r''表示''內(nèi)部的字符串默認不轉義
print(r'\\t\') # \\t\
如果字符串內(nèi)部有很多換行珊燎,用\n寫在一行里不好閱讀惭嚣,為了簡化,Python允許用'''...'''的格式表示多行內(nèi)容
print('''line1
...line2
..line3...''')
line1
...line2
..line3...
布爾值:
True與False
*and為與 兩個判斷同為True或False時and才執(zhí)行
print(5 > 3 and 5 >4) #True
*or為或,一個判斷為True則返回True
*not非,把True變成False悔政,F(xiàn)alse變成True. print(not 1 > 2) #True
空值
空值是Python里一個特殊的值晚吞,用None表示。None不能理解為0谋国,因為0是有意義的槽地,而None是一個特殊的空值。
除法:/浮點型,//整除,%取余
ord()函數(shù)獲取字符的整數(shù)表示芦瘾,chr()函數(shù)把編碼轉換為對應的字符
純英文的str可以用ASCII編碼為bytes捌蚊,內(nèi)容是一樣的,含有中文的str可以用UTF-8編碼為bytes近弟。含有中文的str無法用ASCII編碼缅糟,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯祷愉。
在bytes中窗宦,無法顯示為ASCII字符的字節(jié),用\x##顯示二鳄。
(此處應注意,不能多或少空格,否則會報錯)
'ABC'.encode('ascii')
b'ABC'
'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
b'ABC'.decode('ascii')
'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
算str包含多少個字符赴涵,可以用len()函數(shù):>>> len('ABC')
3
len()函數(shù)計算的是str的字符數(shù),如果換成bytes订讼,len()函數(shù)就計算字節(jié)數(shù),一個中文字符經(jīng)過utf-8編碼時,通常會占用3個字節(jié),而一個英文字符只占用一個字符
len(b'ABC')
3
len(b'\xe4\xb8\xad\xe6\x96\x87')
6
len('中文'.encode('utf-8'))
6
注:python的源代碼也是一個文本文件,所以當源碼中包含中文的時候,在保存源碼時,就需要指定保存為UTF-8編碼, 需要在文件開頭加
!/usr/bin/env python3
-- coding: utf-8 --
%運算符是用來格式化字符串的
'Hi, %s, you have $%d.' % ('Michael', 10000)
'Hi, Michael, you have $10000.'
%d 整數(shù)
%f 浮點數(shù)
%s 字符串
%x 十六進制整數(shù)
當%作為一個字符存在時,用%%表示
'growth rate: %d %%' % 7
'growth rate: 7 %'
list 和 tuple
list就是oc中的數(shù)組
classmates = ['Michael', 'Bob','Lili']
classmates
['Michael', 'Bob', 'Lili']
//插入
classmates.insert(1, 'Jack')
classmates
['Michael', 'Jack', 'Bob', 'Lili']
// 刪除
pop,pop()默認刪除最后一個元素pop(1)刪除指定索引處
//替換
classmates[0] = 'Liu'
classmates
['Liu', 'Jack']
// 可以有不同的元素
L = ['Apple', 123, True]
L
['Apple', 123, True]
// 一個數(shù)組也可以包含其他數(shù)組
s = [L,classmates]
s
[['Apple', 123, True], ['Liu', 'Jack']]
tuple
有序列表,一旦初始化就不能修改,tuple和list的區(qū)別就是一個可變一個不可變,類似于nsarray與namutablearr
else和if語句沒有寫成功,這里標記一下...
for name in names:
print(name)
mic
bob
nancy
sum = 0
for x in [1,2,3,4,5,6,7]:
sum = sum + x
print(sum)
1
3
6
10
15
21
28
range()可以生成一個整數(shù)序列,從0開始
list(range(5))
[0, 1, 2, 3, 4]
sum = 0
for x in range(101):
sum = sum + x
print (sum)
// 5050
Dictionary
和list比較髓窜,dict有以下幾個特點:
查找和插入的速度極快,不會隨著key的增加而變慢欺殿;
需要占用大量的內(nèi)存寄纵,內(nèi)存浪費多。
而list相反:
查找和插入的時間隨著元素的增加而增加祈餐;
占用空間小擂啥,浪費內(nèi)存很少。
所以帆阳,dict是用空間來換取時間的一種方法哺壶。
set
set和dict類似,也是一組key的集合蜒谤,但不存儲value山宾。由于key不能重復,所以鳍徽,在set中资锰,沒有重復的key。
s = set([1,2,3])
s
{1, 2, 3}
注意阶祭,傳入的參數(shù)[1, 2, 3]是一個list绷杜,而顯示的{1, 2, 3}只是告訴你這個set內(nèi)部有1直秆,2,3這3個元素鞭盟,顯示的順序也不表示set是有序的圾结。。
// 重復參數(shù)會被過濾
s = set([1,2,3,11,34,2,3,3])
s
{1, 2, 3, 34, 11}
// 添加
s.add(4)
s
{1, 2, 3, 34, 4, 11}
// 刪除
s.remove(4)
s
{1, 2, 3, 34, 11}
set可以看成數(shù)學意義上的無序和無重復元素的集合,兩個set可以做數(shù)學意義上的交集,并集等操作
s1 = set([1,2,3])
s2 = set([2,3,4])
s1 & s2
{2, 3}
s1 | s2
{1, 2, 3, 4}
set和dic的區(qū)別為沒有存儲對應的value,共同點為同樣不可以放入可變對象,無法判斷兩個可變對象是否相等,也就無法保證set內(nèi)部“不會有重復元素”.
定義函數(shù)時齿诉,需要確定函數(shù)名和參數(shù)個數(shù)筝野;
如果有必要,可以先對參數(shù)的數(shù)據(jù)類型做檢查粤剧;
函數(shù)體內(nèi)部可以用return隨時返回函數(shù)結果歇竟;
函數(shù)執(zhí)行完畢也沒有return語句時,自動return None抵恋。
函數(shù)可以同時返回多個值焕议,但其實就是一個tuple。
def my_abs(x):
if not isinstance(x, (int, float)):
s
[['Apple', 123, True], ['Liu', 'Jack']]
#####tuple
有序列表,一旦初始化就不能修改,tuple和list的區(qū)別就是一個可變一個不可變,類似于nsarray與namutablearr
#####else和if語句沒有寫成功,這里標記一下...
>>> for name in names:
print(name)
mic
bob
nancy
>>> sum = 0
>>> for x in [1,2,3,4,5,6,7]:
sum = sum + x
print(sum)
1
3
6
10
15
21
28
range()可以生成一個整數(shù)序列,從0開始
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> sum = 0
>>> for x in range(101):
sum = sum + x
print (sum)
// 5050
#####Dictionary
和list比較馋记,dict有以下幾個特點:
查找和插入的速度極快号坡,不會隨著key的增加而變慢;
需要占用大量的內(nèi)存梯醒,內(nèi)存浪費多宽堆。
而list相反:
查找和插入的時間隨著元素的增加而增加;
占用空間小茸习,浪費內(nèi)存很少畜隶。
所以,dict是用空間來換取時間的一種方法号胚。
set
set和dict類似籽慢,也是一組key的集合,但不存儲value猫胁。由于key不能重復箱亿,所以,在set中弃秆,沒有重復的key届惋。
>>> s = set([1,2,3])
>>> s
{1, 2, 3}
注意,傳入的參數(shù)[1, 2, 3]是一個list菠赚,而顯示的{1, 2, 3}只是告訴你這個set內(nèi)部有1脑豹,2,3這3個元素衡查,顯示的順序也不表示set是有序的瘩欺。。
// 重復參數(shù)會被過濾
>>> s = set([1,2,3,11,34,2,3,3])
>>> s
{1, 2, 3, 34, 11}
// 添加
>>> s.add(4)
>>> s
{1, 2, 3, 34, 4, 11}
// 刪除
>>> s.remove(4)
>>> s
{1, 2, 3, 34, 11}
set可以看成數(shù)學意義上的無序和無重復元素的集合,兩個set可以做數(shù)學意義上的交集,并集等操作
>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
set和dic的區(qū)別為沒有存儲對應的value,共同點為同樣不可以放入可變對象,無法判斷兩個可變對象是否相等,也就無法保證set內(nèi)部“不會有重復元素”.
定義函數(shù)時,需要確定函數(shù)名和參數(shù)個數(shù)俱饿;
如果有必要歌粥,可以先對參數(shù)的數(shù)據(jù)類型做檢查;
函數(shù)體內(nèi)部可以用return隨時返回函數(shù)結果拍埠;
函數(shù)執(zhí)行完畢也沒有return語句時阁吝,自動return None。
函數(shù)可以同時返回多個值械拍,但其實就是一個tuple。
>>> def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
my_abs('C')
Traceback (most recent call last):
for name in names:
print(name)
mic
bob
nancy
>>> sum = 0
>>> for x in [1,2,3,4,5,6,7]:
sum = sum + x
print(sum)
1
3
6
10
15
21
28
range()可以生成一個整數(shù)序列,從0開始
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> sum = 0
>>> for x in range(101):
sum = sum + x
print (sum)
// 5050
#####Dictionary
和list比較装盯,dict有以下幾個特點:
查找和插入的速度極快坷虑,不會隨著key的增加而變慢;
需要占用大量的內(nèi)存埂奈,內(nèi)存浪費多迄损。
而list相反:
查找和插入的時間隨著元素的增加而增加;
占用空間小账磺,浪費內(nèi)存很少芹敌。
所以,dict是用空間來換取時間的一種方法垮抗。
set
set和dict類似氏捞,也是一組key的集合,但不存儲value冒版。由于key不能重復液茎,所以,在set中辞嗡,沒有重復的key捆等。
>>> s = set([1,2,3])
>>> s
{1, 2, 3}
注意,傳入的參數(shù)[1, 2, 3]是一個list续室,而顯示的{1, 2, 3}只是告訴你這個set內(nèi)部有1栋烤,2,3這3個元素挺狰,顯示的順序也不表示set是有序的明郭。。
// 重復參數(shù)會被過濾
>>> s = set([1,2,3,11,34,2,3,3])
>>> s
{1, 2, 3, 34, 11}
// 添加
>>> s.add(4)
>>> s
{1, 2, 3, 34, 4, 11}
// 刪除
>>> s.remove(4)
>>> s
{1, 2, 3, 34, 11}
set可以看成數(shù)學意義上的無序和無重復元素的集合,兩個set可以做數(shù)學意義上的交集,并集等操作
>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
set和dic的區(qū)別為沒有存儲對應的value,共同點為同樣不可以放入可變對象,無法判斷兩個可變對象是否相等,也就無法保證set內(nèi)部“不會有重復元素”.
定義函數(shù)時她渴,需要確定函數(shù)名和參數(shù)個數(shù)达址;
如果有必要,可以先對參數(shù)的數(shù)據(jù)類型做檢查趁耗;
函數(shù)體內(nèi)部可以用return隨時返回函數(shù)結果沉唠;
函數(shù)執(zhí)行完畢也沒有return語句時,自動return None苛败。
函數(shù)可以同時返回多個值满葛,但其實就是一個tuple径簿。
>>> def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
>>> my_abs('C')
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
my_abs('C')
File "<pyshell#37>", line 3, in my_abs
raise TypeError('bad operand type')
TypeError: bad operand type
my_abs(1)
1
計算x2的函數(shù):
def power(x):
return x * x
power (5)
25
n次方
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
power(5,2)
25
設置默認值
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
power (5)
25
power (5, 3)
125
定義默認參數(shù):
def add_end(L=[ ]):
L.append('END')
return L
add_end([1,2,3])
[1, 2, 3, 'END']
add_end()
['END']
add_end()
['END', 'END']
所以,定義默認參數(shù)要牢記一點:默認參數(shù)必須指向不變對象嘀韧!我們可以用None這個不變對象來實現(xiàn):
def add_end(L=None):
if L is None:
L = []
L.append('End')
return L
add_end()
['End']
add_end()
['End']
因為不變對象一旦創(chuàng)建篇亭,對象內(nèi)部的數(shù)據(jù)就不能修改,這樣就減少了由于修改數(shù)據(jù)導致的錯誤锄贷。此外译蒂,由于對象不變,多任務環(huán)境下同時讀取對象不需要加鎖谊却,同時讀一點問題都沒有柔昼。我們在編寫程序時,如果可以設計一個不變對象炎辨,那就盡量設計成不變對象捕透。