python允许无止境的循环吗_Python第一天 - 思想永无止境的个人页面 - OSCHINA - 中文开源技术交流社区...
下載安裝python以及相關軟件。
python
直接到python官網下windows-msi文件,版本根據需要下2.7或3.0。
pydev
自己網上搜,pydev官網的反而不行(eclipse上安裝失敗)。
java
oracle官網
eclipse
eclipse官網
配置pydev
新建一個Python Interpreter,選擇python安裝目錄的Python.exe
python基礎
數據類型
整數
Python可以處理任意大小的整數,當然包括負整數,在程序中的表示方法和數學上的寫法一模一樣,例如:1,100,-8080,0,等等。
計算機由于使用二進制,所以,有時候用十六進制表示整數比較方便,十六進制用0x前綴和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
浮點數
浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,一個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是相等的。浮點數可以用數學寫法,如1.23,3.14,-9.01,等等。但是對于很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。
整數和浮點數在計算機內部存儲的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四舍五入的誤差。
字符串
字符串是以’‘或”“括起來的任意文本,比如’abc’,”xyz”等等。請注意,’‘或”“本身只是一種表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c這3個字符。如果’本身也是一個字符,那就可以用”“括起來,比如”I’m OK”包含的字符是I,’,m,空格,O,K這6個字符。
如果字符串內部既包含’又包含”怎么辦?可以用轉義字符來標識,比如:
‘I’m “OK”!’ 表示的字符串內容是:
I’m “OK”!
轉義字符可以轉義很多字符,比如n表示換行,t表示制表符,字符本身也要轉義,所以\表示的字符就是。
>>> print 'I\'m ok.'
I'm ok.
>>> print 'I\'m learning\nPython.'
I'm learning
Python.
>>> print '\\\n\\'
\\
如果字符串里面有很多字符都需要轉義,就需要加很多,為了簡化,Python還允許用r’‘表示’‘內部的字符串默認不轉義。
>>>print '\\\t\\'
\ \
>>>print r'\\\t\\'
\\\t\\
布爾值
布爾值和布爾代數的表示完全一致,一個布爾值只有True、False兩種值,要么是True,要么是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運算計算出來。
布爾值可以用and、or和not運算。
and運算是與運算,只有所有都為True,and運算結果才是True。
or運算是或運算,只要其中有一個為True,or運算結果就是True。
not運算是非運算,它是一個單目運算符,把True變成False,False變成True。
空值
空值是Python里一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。
此外,Python還提供了列表、字典等多種數據類型,還允許創建自定義數據類型。
變量
沒啥可講的,和所有語言都一樣。
常量
所謂常量就是不能變的變量,比如常用的數學常數π就是一個常量。在Python中,通常用全部大寫的變量名表示常量:
PI = 3.14159265359 但事實上PI仍然是一個變量,Python根本沒有任何機制保證PI不會被改變,所以,用全部大寫的變量名表示常量只是一個習慣上的用法。
不可變的類型都是常量, 整數,小數,字符串等。
字符編碼
編碼有很多種,ASCII,utf8,gbk,等等。
Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
但unicode占用空間較多。
字符串
因為Python的誕生比Unicode標準發布的時間還要早,所以最早的Python只支持ASCII編碼,普通的字符串’ABC’在Python內部都是ASCII編碼的。Python提供了ord()和chr()函數,可以把字母和對應的數字相互轉換:
>>>ord('A')
65
>>>chr(65)
'A'
Python在后來添加了對Unicode的支持,以Unicode表示的字符串用u’…’表示,比如:
>>>print u'中文'
中文
>>>u'中'
u'\u4e2d'
寫u’中’和u’u4e2d’是一樣的,u后面是十六進制的Unicode碼。因此,u’A’和u’u0041’也是一樣的。
兩種字符串如何相互轉換?字符串’xxx’雖然是ASCII編碼,但也可以看成是UTF-8編碼,而u’xxx’則只能是Unicode編碼。
把u’xxx’轉換為UTF-8編碼的’xxx’用encode(‘utf-8’)方法:
>>>u'ABC'.encode('utf-8')
'ABC'
>>>u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
英文字符轉換后表示的UTF-8的值和Unicode值相等(但占用的存儲空間不同),而中文字符轉換后1個Unicode字符將變為3個UTF-8字符,你看到的xe4就是其中一個字節,因為它的值是228,沒有對應的字母可以顯示,所以以十六進制顯示字節的數值。len()函數可以返回字符串的長度:
>>>len(u'ABC')
3
>>>len('ABC')
3
>>>len(u'中文')
2
>>>len('\xe4\xb8\xad\xe6\x96\x87')
6
反過來,把UTF-8編碼表示的字符串’xxx’轉換為Unicode字符串u’xxx’用decode(‘utf-8’)方法:
>>>'abc'.decode('utf-8')
u'abc'
>>>'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
u'\u4e2d\u6587'
>>>print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
中文
由于Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行::
#!/usr/bin/env python
# -*- coding: utf-8 -*-
格式化
在Python中,采用的格式化方式和C語言是一致的,用%實現,舉例如下:
>>>'Hello, %s' % 'world'
'Hello, world'
>>>'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,有幾個%?占位符,后面就跟幾個變量或者值,順序要對應好。如果只有一個%?,括號可以省略。
常見的占位符有:
%d 整數 %f 浮點數 %s 字符串 %x 十六進制整數 其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
>>>'%2d-%02d' % (3, 1)
' 3-01'
>>>'%.2f' % 3.1415926
'3.14'
如果你不太確定應該用什么,%s永遠起作用,它會把任何數據類型轉換為字符串:
>>>'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
對于Unicode字符串,用法完全一樣,但最好確保替換的字符串也是Unicode字符串:
>>>u'Hi, %s' % u'Michael'
u'Hi, Michael'
有些時候,字符串里面的%是一個普通字符怎么辦?這個時候就需要轉義,用%%來表示一個%:
>>>'growth rate: %d %%' % 7
'growth rate: 7 %'
list
list 是Python內置的一種數據類型是列表。list是一種有序的集合(有序的意思就是你可以給它排序),可以隨時添加和刪除其中的元素。
比如,列出班里所有同學的名字,就可以用一個list表示:
>>>classmates = ['Michael', 'Bob', 'Tracy']
>>>classmates
['Michael', 'Bob', 'Tracy']
用len()函數可以獲得list元素的個數。
當索引超出了范圍時,Python會報一個IndexError錯誤,所以,要確保索引不要越界,記得最后一個元素的索引是len(classmates) - 1。
如果要取最后一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最后一個元素:
>>>classmates[-1]
'Tracy'
以此類推,可以獲取倒數第2個、倒數第3個。
使用append(數據)方法往list中追加元素到末尾。
使用insert(索引,數據)方法插入數據到指定的位置。
使用pop()刪除末尾元素。
使用pop(索引)方法,刪除指定位置的元素。
list里面的元素的數據類型也可以不同,比如:
>>>l = ['Apple', 123, True]
list元素也可以是另一個list,比如:
>>>s = ['python', 'java', ['asp', 'php'], 'scheme']
tuple
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:
>>>classmates = ('Michael', 'Bob', 'Tracy')
也可以稱tuple為一個特殊的list,只是list中的值不能修改。
tuple中的元素本身是可以改變的:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
dict
Python內置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。
為什么dict查找速度這么快?因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往后翻,直到找到我們想要的字為止,這種方法就是在list中查找元素的方法,list越大,查找越慢。
第二種方法是先在字典的索引表里(比如部首表)查這個字對應的頁碼,然后直接翻到該頁,找到這個字,無論找哪個字,這種查找速度都非???#xff0c;不會隨著字典大小的增加而變慢。
dict就是第二種實現方式,給定一個名字,比如’Michael’,dict在內部就可以直接計算出Michael對應的存放成績的“頁碼”,也就是95這個數字存放的內存地址,直接取出來,所以速度非???。
你可以猜到,這種key-value存儲方式,在放進去的時候,必須根據key算出value的存放位置,這樣,取的時候才能根據key直接拿到value。
把數據放入dict的方法,除了初始化時指定外,還可以通過key放入:
>>>d['Adam'] = 67
>>>d['Adam']
67
由于一個key只能對應一個value,所以,多次對一個key放入value,后面的值會把前面的值覆蓋掉。
如果key不存在,dict就會報錯,要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:
>>>'Thomas' in d
False
二是通過dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
注意:返回None的時候Python的交互式命令行不顯示結果。
要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除
和list比較,dict有以下幾個特點:
查找和插入的速度極快,不會隨著key的增加而增加; 需要占用大量的內存,內存浪費多。 而list相反:
查找和插入的時間隨著元素的增加而增加; 占用空間小,浪費內存很少。 所以,dict是用空間來換取時間的一種方法。
dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。
這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。
要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:
>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
這點和Java很不相同。
set
set和dict類似,也是一組key的集合,但不存儲value,和Java的HashSet一樣。由于key不能重復,所以,在set中,沒有重復的key。
要創建一個set,需要提供一個list作為輸入集合:
>>> 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])
通過add(key)方法可以添加元素到set中,可以重復添加,但不會有效果:
>>>s.add(4)
>>>s
set([1, 2, 3, 4])
>>>s.add(4)
>>>s
set([1, 2, 3, 4])
通過remove(key)方法可以刪除元素。
set可以看成數學意義上的無序和無重復元素的集合,因此,兩個set可以做數學意義上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])
set和dict的唯一區別僅在于沒有存儲對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變對象,因為無法判斷兩個可變對象是否相等,也就無法保證set內部“不會有重復元素”。試試把list放入set,看看是否會報錯。
條件判斷
和所有語言一樣
只需注意以下幾點:
else if可以簡寫成elif
判斷條件可以是非布爾類型,只要是非零數值、非空字符串、非空list等,就判斷為True,否則為False,這點和PHP一樣。
循環
Python的循環有兩種,一種是for…in循環,依次把list、tuple、dict中的每個元素迭代出來,看例子::
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print name
for循環可以同時使用兩個甚至多個變量,比如dict的iteritems()可以同時迭代key和value:
>>>d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>>for k, v in d.iteritems():
print k, '=', v
y = B
x = A
z = C
Python提供一個range()函數,可以生成一個整數序列,比如range(5)生成的序列是從0開始小于5的整數。
第二種循環是while循環,只要條件滿足,就不斷循環,條件不滿足時退出循環。比如我們要計算100以內所有奇數之和,可以用while循環實現::
i= 0
while i
print names[i]
i++
切片
取一個list或tuple的部分元素是非常常見的操作。比如,一個list如下:
>>>L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>>L[0:3]
['Michael', 'Sarah', 'Tracy']
L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。
如果第一個索引是0,還可以省略:
>>> L[:3]
同樣支持倒數切片:
>>>L[-2:]
['Bob', 'Jack']
>>>L[-2:-1]
['Bob']
前10個數,每兩個取一個:
>>>L = range(100)
>>>L[:10:2]
[0, 2, 4, 6, 8]
所有數,每5個取一個:
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
甚至什么都不寫,只寫[:]就可以原樣復制一個list:
>>> L[:]
[0, 1, 2, 3, ..., 99]
字符串’xxx’或Unicode字符串u’xxx’也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串:
>>>'ABCDEFG'[:3]
'ABC'
>>>'ABCDEFG'[::2]
'ACEG'
在很多編程語言中,針對字符串提供了很多各種截取函數,其實目的就是對字符串切片。Python沒有針對字符串的截取函數,只需要切片一個操作就可以完成,非常簡單。
列表生成式
列表生成式是Python內置的非常簡單卻強大的可以用來創建list的生成式。
舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?
>>>[x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫列表生成式時,把要生成的元素x * x放到前面,后面跟for循環,就可以把list創建出來,十分有用,多寫幾次,很快就可以熟悉這種語法。
for循環后面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
>>>[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']
運用列表生成式,可以寫出非常簡潔的代碼。例如,列出當前目錄下的所有文件和目錄名,可以通過一行代碼實現:
>>>import os # 導入os模塊
>>>[d for d in os.listdir('.')] # os.listdir可以列出文件和目錄
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']
列表生成式也可以使用兩個變量來生成list:
>>>d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>>[k + '=' + v for k, v in d.iteritems()]
['y=B', 'x=A', 'z=C']
最后把一個list中所有的字符串變成小寫:
>>>L = ['Hello', 'World', 'IBM', 'Apple']
>>>[s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python允许无止境的循环吗_Python第一天 - 思想永无止境的个人页面 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伊川农商银行最新情况,伊川农商银行现状怎
- 下一篇: 民营银行是正规银行吗?民营银行是不是虚拟