python中的最最最基本語法(1)


注意:對於我這個以前用c/c++的同學來說,可能一開始學習pyhon時有點不適應的,為什么呢?因為吧,python中,沒有這玩意:{},也不用每句話才用分號分開的。python中通過縮進來分塊的,一行占個句話就可以啦。下面的學習基於python2.7

from __future__import division

開始啦,邊學習邊作筆記

參考http://www.liaoxuefeng.com/另外,還有其它的一些資料。

基本輸入輸出語句print和raw_input():

#輸入語句:
>>> print'100+100=%d' %(100+100)
100+100=200

#輸出語句
>>> name = raw_input('input your name:')
input your name:yinheyi
>>> print('hello,%s' %name)
hello,yinheyi

注意:raw_input()語句接收以后,默認保存為str格式哦,如果要比較大小的話,記得轉為int類型。

>>> number = raw_input('input a number:')
input a number:12
>>> type(number)
<type 'str'>
>>> number = int(raw_input('input a number:'))
input a number:12
>>> type(number)
<type 'int'>

 

判斷與循環語句:

判斷語句:if…elif…else

>>> if a>= 50:
...     print 'the number is big'
... elif a < 50:
...     print'the number is small'
... else:
...     print "i don't know"
... 
the number is big

循環語句: for…in

>>> sum = 0
>>> for number in range(101):
...     sum = sum + number
... 
>>> print sum
5050

循環語句: while

>>> sum = 0
>>> n = 1
>>> while n < 101:
...     sum = sum + n
...     n = n + 1
... 
>>> print sum
5050

 

數據類型:列表、元組、字典、set

list: Python內置的一種數據類型是列表。lists是一個有序的集合,可以添加與刪除元素。

生成它是用  []  就可以啦;

調用它時,用下標調用就可以啦(從0開始);如第一個元素,list[0];倒數第一個,list[-1];

可以用len()函數獲得list元素的個數;

在尾部添加用append(), 中間插入用insert();尾部刪除用pop();指定位置刪除為pop(i);

#定義一個friends的列表
>>> friends = ['xiaoming','ergou','sanmao']
>>> friends
['xiaoming', 'ergou', 'sanmao']
>>> friends[0]
'xiaoming'
>>> friends[-1]
'sanmao'

#添加與刪除
>>> friends.append('dapeng')
>>> friends
['xiaoming', 'ergou', 'sanmao', 'dapeng']
>>> friends.insert(0,'diyi')
>>> friends
['diyi', 'xiaoming', 'ergou', 'sanmao', 'dapeng']

>>> friends.pop()
'dapeng'
>>> friends
['diyi', 'xiaoming', 'ergou', 'sanmao']
>>> friends.pop(2)
'ergou'
>>> friends
['diyi', 'xiaoming', 'sanmao']

#替換
>>> friends[0] = 'wangbadan'
>>> friends
['wangbadan', 'xiaoming', 'sanmao']

元組(tuple):tuple和list非常類似,但是tuple一旦初始化就不能修改。只要記住它不能修改就可以啦。很安全。

用 () 定義啊。

用下標調用,即tuple[1];

注意:它定義一個元素的tuple時,一定要這樣寫,如:name = (‘yin’,), 千萬別寫成 name = (‘yin’);

name = ('zhai','yin')
>>> name
('zhai', 'yin')
>>> name[0]
'zhai'
>>> name[-1]
'yin'

 

字典(dictionary):它就是鍵-值對。如在C++語言中為map的容器。它的特點就是可以快速查找,需要占用大量的內存,內存浪費多。通過key計算位置的算法稱為哈希算法(Hash)。

用 {} 定義dictionary哦;

隨着dictionary的增加,查找時間不會增加的。

多次對一個key放入value,后面的值會把前面的值沖掉:

可以用  ‘key’in dic 或 dic.get(‘key’)的方法來查看key是否存在。注意:dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value,返回None的時候Python的交互式命令行不顯示結果。

刪除用: pop(key)。添加時,直接用key值的索引添加就可以的。

注意:ict內部存放的順序和key放入的順序是沒有關系的。

#定義一個dictionary;
score = {'xiaoming':85,'xiaohong':62}
>>> score
{'xiaoming': 85, 'xiaohong': 62}

#添加一個元素;
>>> score['wangdan'] = 85
>>> score
{'xiaoming': 85, 'xiaohong': 62, 'wangdan': 85}

#刪除一個元素;
>>> score.pop('xiaohong')
62
>>> score
{'xiaoming': 85, 'wangdan': 85}

#查看key是否存在;
>>> 'xiaoming' in score
True

#查看一個key對應的值;
>>> score.get('wangdan')
不存在時,返回一個自定義的值;
85>>> score.get('hehehe',-1)
-1

 

set:set和dict類似,也是一組key的集合,但不存儲value。由於key不能重復,所以,在set中,沒有重復的key。set和dict的唯一區別僅在於沒有存儲對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變對象。

要創建一個set,需要提供一個list作為輸入集合:

通過add(key)與remove(key)添加與刪除元素;

 

>>> s = set([1, 2, 3])
>>> s
set([1, 2, 3])

注意,傳入的參數[1, 2, 3]是一個list,而顯示的set([1, 2, 3])只是告訴你這個set內部有1,2,3這3個元素,顯示的[]不表示這是一個list。

重復元素在set中自動被過濾:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
set([1, 2, 3])

添加與刪除

>>> s = set([1,2,3])
>>> s
set([1, 2, 3])
>>> s.add('xiaoming')
>>> s
set([1, 2, 3, 'xiaoming'])
>>> s.add(0)
>>> s
set([0, 1, 2, 3, 'xiaoming'])
>>> s.remove(2)
>>> s
set([0, 1, 3, 'xiaoming'])

 

 

一些高級操作:

對於list與tuple的切片操作:

如list[:5]或list[0:5]表示第0,1,2,3,4個索引值;當然也可以為負的如,list[-2:0]等於list[-2:]即倒數第2、倒數第1個數;也可以跳着來哦:list[1:10:2],表示步長為2的。

list=range(100)
#正着切片
>>> list[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#負索引切片
 list[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
#倒着切片
>>> list[10:0:-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> list[-1:-10:-1]
[99, 98, 97, 96, 95, 94, 93, 92, 91]
#跳着切片
>>> list[::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

 

#tuple的切片
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
#字符串的切片
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'

 

它的迭代:

對於list、tuple還有字符串都可以用 for…in 進行迭代哦;

而對於dictionary的話,也可以哦,只不過默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.itervalues(),如果要同時迭代key和value,可以用for k, v in d.iteritems()

那么,如何判斷一個對象是可迭代對象呢?方法是通過collections模塊的Iterable類型判斷:

另外:Python內置的enumerate函數可以把一個list、tuple、字符串本身變成索引-元素對,這樣就可以在for循環中同時迭代索引和元素本身:

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數是否可迭代
False

 

列表生成式:很牛逼很方便的;它是用來創建list的生成式;我們舉例子看看哈:

生成1-10的list:

>>> range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

生成 12、22、……102的list:

>>> list = [x*x for x in range(1,11)]
>>> list
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

還可以再選擇一下哦:

>>> [x * x for x in range(1, 11)if x % 2 == 0]
[4, 16, 36, 64, 100]

還可以兩層循環的:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

 

生成器:

通過列表生成式,我們可以直接創建一個列表。但是,受到內存限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那后面絕大多數元素占用的空間都白白浪費了。

所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出后續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱為生成器(Generator)。

創建方法1:第一種方法很簡單,只要把一個列表生成式的[]改成(),就創建了一個generator:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>

可以通過generator的.next()方法打印出來數據,另外也可以通過迭代哦,基本上我們都選擇for…in迭代方法。

 

創建方法2:通過特殊函數創建:如果一個函數定義中包含yield關鍵字,那么這個函數就不再是一個普通函數,而是一個generator。

#這是函數,輸出斐波那契數列
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print b
        a, b = b, a + b
        n = n + 1

#這是generator,也是生成斐波那契數列;
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1

 

注意:這里,最難理解的就是generator和函數的執行流程不一樣。函數是順序執行,遇到return語句或者最后一行函數語句就返回。而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

>>> def odd():
...     print 'step 1'
...     yield 1
...     print 'step 2'
...     yield 3
...     print 'step 3'
...     yield 5
...
>>> o = odd()
>>> o.next()
step 1
1
>>> o.next()
step 2
3
>>> o.next()
step 3
5
>>> o.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

 

最后,如果你覺得以上內容對你有幫助,作為回報,那就可以打賞一下我這個窮學生吧,以資助我買幾本書。

錢也不用太多,您可以選擇:2毛,5毛、1元。

如果對你沒有幫助,那就算了。

 

未標題-2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM