python 等号报错_Python学习----Python基础
Python基礎
一、數據類型和變量
1.在Python中,等號=是賦值語句,可以把任意數據類型賦值給變量,同一個變量可以反復賦值,而且可以是不同類型的變量。
例如:
a =520# a是整數print(a)
a ='LOVE'# a變為字符串print(a)
這種變量本身類型不固定的語言稱之為動態語言,與之對應的是靜態語言。靜態語言在定義變量時必須指定變量類型,如果賦值的時候類型不匹配,就會報錯。例如Java是靜態語言,賦值語句如下(// 表示注釋):
inta =520;// a是整數類型變量a ="LOVE";// 錯誤:不能把字符串賦給整型變量
和靜態語言相比,動態語言更靈活,就是這個原因。
2.理解變量在計算機內存中的表示也非常重要。
當我們寫:
a = 'ABC'
時,Python解釋器干了兩件事情:
在內存中創建了一個'ABC'的字符串;
在內存中創建了一個名為a的變量,并把它指向'ABC'。
3.最后解釋一下整數的除法為什么也是精確的。
在Python中,有兩種除法,一種除法是/:
>>>10 / 3
3.3333333333333335
/除法計算結果是浮點數,即使是兩個整數恰好整除,結果也是浮點數:
>>>9 / 3
3.0
還有一種除法是//,稱為地板除,兩個整數的除法仍然是整數:
>>> 10 // 3
3
你沒有看錯,整數的地板除//永遠是整數,即使除不盡。要做精確的除法,使用/就可以。
因為//除法只取結果的整數部分,所以Python還提供一個余數運算,可以得到兩個整數相除的余數:
>>>10 % 3
1
無論整數做//除法還是取余數,結果永遠是整數,所以,整數運算結果永遠是精確的。
二、字符串和變量
1.Python的字符串
在最新的Python 3版本中,字符串是以Unicode編碼的,也就是說,Python的字符串支持多語言,例如:
>>>print('可以顯示中文的str')
可以顯示中文的str
對于單個字符的編碼,Python提供了ord()函數獲取字符的整數表示,chr()函數把編碼轉換為對應的字符:
>>>ord('B')66>>> chr(32654)'美'>>>ord('美')32654
由于Python的字符串類型是str,在內存中以Unicode表示,一個字符對應若干個字節。如果要在網絡上傳輸,或者保存到磁盤上,就需要把str變為以字節為單位的bytes。
Python對bytes類型的數據用帶b前綴的單引號或雙引號表示:
x = b'ABC'
要注意區分'ABC'和b'ABC',前者是str,后者雖然內容顯示得和前者一樣,但bytes的每個字符都只占用一個字節。
以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 "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
純英文的str可以用ASCII編碼為bytes,內容是一樣的,含有中文的str可以用UTF-8編碼為bytes。含有中文的str無法用ASCII編碼,因為中文編碼的范圍超過了ASCII編碼的范圍,Python會報錯。
在bytes中,無法顯示為ASCII字符的字節,用\x##顯示。
反過來,如果我們從網絡或磁盤上讀取了字節流,那么讀到的數據就是bytes。要把bytes變為str,就需要用decode()方法:
>>>b'ABC'.decode('ascii')
'ABC'
>>>b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
要計算str包含多少個字符,可以用len()函數:
>>>len('ABC')
3
>>>len('中文')
2
len()函數計算的是str的字符數,如果換成bytes,len()函數就計算字節數:
>>>len(b'ABC')
3
>>>len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>>len('中文'.encode('utf-8'))
6
可見,1個中文字符經過UTF-8編碼后通常會占用3個字節,而1個英文字符只占用1個字節。
在操作字符串時,我們經常遇到str和bytes的互相轉換。為了避免亂碼問題,應當始終堅持使用UTF-8編碼對str和bytes進行轉換。
由于Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注釋是為了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個注釋;
第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。
2.格式化
在Python中,采用的格式化方式和C語言是一致的,用%實現,舉例如下:
>>>'Hello, %s' % 'Python'
'Hello, Python'
>>>'Hi, %s, you have $%d.' % ('hadas', 2000000)
'Hi, hadas, you have $2000000.'
你可能猜到了,%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,有幾個%?占位符,后面就跟幾個變量或者值,順序要對應好。如果只有一個%?,括號可以省略。
常見的占位符有:
%d
整數
%f
浮點數
%s
字符串
%x
十六進制整數
其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:
>>>'%2d-%02d'% (3,8)' 3-08'>>>'%.5f'%3.1415926'3.14159'
如果你不太確定應該用什么,%s永遠起作用,它會把任何數據類型轉換為字符串:
>>>'Age: %s. Gender: %s'% (24,False)'Age: 25. Gender: False'
有些時候,字符串里面的%是一個普通字符怎么辦?這個時候就需要轉義,用%%來表示一個%:
>>>'growth rate: %d %%'%200'growth rate: 200 %'
三、使用list和tuple
1.列表list
Python內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。
當索引超出了范圍時,Python會報一個IndexError錯誤,所以,要確保索引不要越界,記得最后一個元素的索引是len(classmates) - 1。
如果要取最后一個元素,除了計算索引位置外,還可以用-1做索引,直接獲取最后一個元素:
>>>classmates = ['hadas', 'Bob', 'Tracy']
>>>classmates
['hsdas', 'Bob', 'Tracy']
>>>classmates[-1]
'Tracy'
其中,"-"號后面跟的是幾就是倒數第幾個元素。
2.元組tuple
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改。因為tuple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。
最后來看一個“可變的”tuple:
>>>t = ('w', 'e', ['W', 'E'])
>>>t[2][0] = 'X'
>>>t[2][1] = 'Y'
>>>t
('w', 'e', ['X', 'Y'])
表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list并沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向
'a'
,就不能改成指向
'b'
,指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!
3.條件判斷
這是因為input()返回的數據類型是str,str不能直接和整數比較,必須先把str轉換成整數。Python提供了int()函數來完成這件事情:
s = input('input a integer: ')
age = int(s)
if age >=18:
print('adult')
else:
print('teenager')
4.循環
Python提供一個range()函數,可以生成一個整數序列,再通過list()函數可以轉換為list。比如range(5)生成的序列是從0開始小于5的整數:
>>> list(range(6))
[0, 1, 2, 3, 4, 5]
range(101)就可以生成0-100的整數序列,計算如下:
sum =0forxinrange(101): //這里也可以寫為:for x inlist(range(101))sum = sum + x
print(sum)
5.使用dict和set
dict
通過dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value,但這個key和指定的value不會出現在dict中:
>>>d.get('James')>>>d.get('James', 100)100
>>>d['James']
Traceback (most recent call last):
File "", line 1, in KeyError: 'James'
注意,dict內部存放的順序和key放入的順序是沒有關系的。
和list比較,dict有以下幾個特點:
查找和插入的速度極快,不會隨著key的增加而增加;
需要占用大量的內存,內存浪費多。
而list相反:
查找和插入的時間隨著元素的增加而增加;
占用空間小,浪費內存很少。
所以,dict是用空間來換取時間的一種方法。
dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。
這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。
要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:
>>> key = ['A', 'B', 'C']
>>> d[key]
Traceback (most recent call last):
File "", line 1, in TypeError: unhashable type: 'list'
set
對于不可變對象,比如str,對str進行操作:
>>>a = 'love'
>>>b = a.replace('l', 'L')
>>>b
'Love'
>>>a
'love'
雖然
字符串有個
replace()
方法,也確實變出了
'Abc'
,但變量
a
最后仍是'abc',要始終牢記的是,a是變量,而'abc'才是字符串對象!對象a的內容是'abc',但其實是指,a本身是一個變量,它指向的對象的內容才是'abc'。
當我們調用a.replace('a', 'A')時,實際上調用方法replace是作用在字符串對象'abc'上的,而這個方法雖然名字叫replace,但卻沒有改變字符串'abc'的內容。相反,replace方法創建了一個新字符串'Abc'并返回,如果我們用變量b指向該新字符串,就容易理解了,變量a仍指向原有的字符串'abc',但變量b卻指向新字符串'Abc'了。
所以,對于不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會創建新的對象并返回,這樣,就保證了不可變對象本身永遠是不可變的。
總結
以上是生活随笔為你收集整理的python 等号报错_Python学习----Python基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.5成4.米推拉帐篷多少钱
- 下一篇: 礼仪说课包括哪些方面