目錄
- 1. 什么是 Python?使用 Python 有什么好處?
- 2. Python中常用的關鍵字有哪些?
- 3. Python 2.x和Python 3.x版本有哪些主要的區別?
- 4. Python 中有哪些常見的運算子?
- 5. 運算子 is 與 == 有什么區別?
- 6. Python 都有哪些自帶的資料型別? 可變型別和不可變型別分別包括哪些?
- 7. 串列、元組、集合、字典的區別有哪些?
- 8. 串列和元組的區別有哪些?
- 9. Python 中有哪些常見的資料型別轉換函式?
- 10. 串列、元組、集合及字典之間如何相互轉換?
- 11. 真題
1. 什么是 Python?使用 Python 有什么好處?
計算機編程語言的種類就如同世界上的語言一樣多,例如 Python、R、C、C++、C#、Java、JavaScript、Go、SHELL、PHP 和 MATLAB等,其中,Python 是一種解釋型、面向物件、動態資料型別的高級程式設計語言,Python 在撰寫時無須定義變數型別,在運行時變數型別強制固定,屬于強型別語言,Python 無須編譯,可以在解釋器環境直接運行,
Python 這門編程語言,由 Guido van Rossum 于1989年底發明,第一個公開發行版發布于 1991 年,Python 源代碼遵循 GPL(GNU General Public License) 協議,Python 有物件、模塊、執行緒、行程、例外處理和自動記憶體管理等,Python 語言簡潔、方便、易擴展,而且有許多自帶的模塊且開源,Python 可應用于多平臺,包括 Windows、Linux 和 Mac作業系統等,總體來說,Python 有如下幾個特點:
Python是一種解釋型語言,因此,Python代碼在運行之前不需要編譯,Python是動態型別語言,在宣告變數時,不需要指定變數的型別,Python適合面向物件的編程,因為它支持通過組合與繼承的方式定義類,- 撰寫
Python代碼比較容易,但是運行速度比編譯語言通常要慢, Python用途廣泛,常被用作膠水語言,可幫助其他語言和組件改善運行狀況,- 程式員使用
Python可以專注于演算法和資料結構的設計,而不用處理底層的細節,
2. Python中常用的關鍵字有哪些?
Python 關鍵字不能把它們用作任何識別符號名稱,關鍵字是區分大小寫的,Python 的標準庫提供了一個 keyword 模塊,可以輸出當前版本的所有關鍵字,如下所示:

3. Python 2.x和Python 3.x版本有哪些主要的區別?
Python 的3.x 版本相對于 Python 的早期版本,是一次較大的升級,為了不給系統帶入過多的負擔, Python 3.x 在設計時沒有考慮向下兼容,即 Python3.x 和 Python2.x 是不兼容的,許多針對早期 Python 版本設計的程式都無法在 Python 3.x 上正常執行,為了照顧現有的程式,Python 2.6 作為一個過渡版本, 基本使用了 Python 2.x 的語法和庫,同時也考慮了向 Python 3.x 的遷移,支持部分 Python3.x 的語法與函式,
目前最新的 Python 程式建議使用 Python 3.x 版本的語法,Python 3.x 的變化主要體現在以下幾個方面:
(1) print 函式
在 Python 3.x中,print 陳述句沒有了,取而代之的是 print 函式,在 Python 2.6 和 Python 2.7里,以下三種形式是等價的:


(2) Unicode
Python 2.x 默認使用 ASCII 編碼,所以 Python 2.x 默認是不支持中文的,且變數命名只能用英文,Python 3.x 默認使用 UTF-8 的編碼,所以 Python 3.x 默認是支持中文的,且變數命名能夠使用中文,如果在 Python 檔案中不指定頭資訊 # -*-coding:utf-8-*-.,那么在 Python 2.x 中默認使用 ASCII 編碼,在 Python 3.x中默認使用 UTF-8 編碼,由于 Python 3.x原始碼檔案默認使用 UTF-8 編碼,這就使得以下代碼是合法的:

Python 2.x:

Python 3.x:

(3) 除法運算
Python中的除法與其他語言相比顯得非常高端,它有一套很復雜的規則,Python 中的除法有兩個運算子:/和//,在Python 2.x中,對于/演算法,整數相除的結果是一個整數,它會把小數部分完全忽略掉,浮點數除法會保留小數點的部分,得到一個浮點數的結果,在Python 3.x中,/除法不再這么做了,整數相除的結果也會是浮點數,

而對于 // 除法,這種除法被稱為 floor 除法,它會對除法的結果自動進行一個 floor 操作,在 Python 2.x 和 Python 3.x 中是一致的,

需要注意的是,// 并不是舍棄小數部分,而是執行 floor 操作,如果要截取整數部分,那么需要使用 math 模塊的 trunc 函式,

(4) 八進制字面量表示
在 Python 3.x 中,表示八進制字面量的方式只有一種,那就是 0o1000,而 Python 2.x 中的 01000 形式已經不能使用了,

(5) 不等運算子
在 Python 2.x 中,不等于 可以有兩種寫法,分別是 != 和 <> 在 Python 3.x 中去掉了 <> 只有 != 一種寫法,
(6) 去掉了 repr 運算式 ``
在 Python 2.x 中反引號相當于 repr 函式 (回傳一個物件的 string 格式) 的作用,在 Python 3.x 中去掉了 ``這種寫法,只允許使用 repr 函式,這樣做的目的是為了使代碼看上去更清晰,

(7) 打開檔案
在 Python 2.x 中使用 file(…) 或者 open(…) ,而在 Python 3.x 中只能使用 open(…)
(8) 資料型別
Python 3.x 去除了 long 型別,現在只有一種整型 int,但它的行為與 2.x 版本的 long 相同,還新增了 bytes 型別,對應于 2.x 版本的八位串,定義一個 bytes 字面量的方法如下:

str 物件和 bytes 物件可以使用 .encode() 和 .decode() 方法相互轉化,

(9) input 和 raw_input 函式
在 Python 2.x 中,raw_input 會將所有輸入的資料當作字串看待,回傳值為字串型別,而 input 輸入時必須是一個合法的 Python 運算式,格式與 Python 中的代碼一樣,其回傳值與輸入的資料型別相同,如果是 Python 2.x 版本,那么 input 和 raw_input 都可以使用,如果是 Python 3.x 版本,那么只能使用 input,因此,建議都使用 input 函式,
(10) map、filter 和 reduce
在 Python2.x 的互動模式下輸入map和filter,可以看到它們兩者的型別是 built-in function(內置函式)

它們輸出的結果型別都是串列:

但是在 Python3.x 中發生了變化:

首先它們從函式變成了類,其次,它們的回傳結果也從串列變成了一個可迭代的物件,可以嘗試使用 next 函式來進行手工迭代:

對于比較高端的 reduce 函式,它在 Python3.x中已經不屬于 built-in function,而是被挪到了 functools 模塊當中,
(11) xrange函式
xrange 可以生成序列,在 Python3.x 中取消了 xrange 函式,而使用 range 完全代替了 xrange 函式,在 Python 3.x 中呼叫 xrange 函式會報錯,
在 Python2.x 中 xrange() 函式用法與 range() 函式完全相同,所不同的是生成的不是一個串列,而是一個生成器,

4. Python 中有哪些常見的運算子?
Python 語言支持的運算子包括算術運算子、比較(關系)運算子、賦值運算子、位運算子、邏輯運算子、成員運算子和身份運算子,
(1) Python 算術運算子
假設變數 a 為 10,變數 b 為21,各種算術運算子的功能如下表所示:

(2) Python 比較運算子
以下假設變數 a 為 10,變數 b 為20:
| 運算子 | 描述 | 實體 |
|---|---|---|
| == | 等于,比較物件是否相等 | (a==b)回傳False |
| != | 不等于,比較物件是否不相等 | (a!=b)回傳True |
| > | 大于,回傳 a 是否大于b | (a>b)回傳False |
| < | 小于,回傳 a 是否小于b, | (a<b)回傳True |
| >= | 大于等于,回傳 a 是否大于等于 b | (a>=b)回傳False |
| <= | 小于等于,回傳 a 是否小于等于 b | (a<=b)回傳True |
所有比較運算子回傳1表示真,回傳0表示假,這分別與特殊的變數 True 和 False 等價,注意:這些變數名的大寫與小寫含義不一樣,要區分,
(3) Python 賦值運算子
以下假設變數 a 為 10,變數 b 為 20:
| 運算子 | 描述 | 實體 |
|---|---|---|
| = | 簡單的賦值運算子 | c=a+b 將 a+b 的運算結果賦值為c |
| += | 加法賦值運算子 | c+=a 等效于 c=c+a |
| -= | 減法賦值運算子 | c-=a 等效于 c=c-a |
| *= | 乘法賦值運算子 | c*=a 等效于 c=c*a |
| /= | 除法賦值運算子 | c/=a 等效于 c=c/a |
| %= | 取模賦值運算子 | c%=a 等效于 c=c%a |
| **= | 冪賦值運算子 | c**=a 等效于 c=c**a |
| //= | 取整除賦值運算子 | c//=a 等效于 c=c//a |
(4) Python 位運算子
按位運算子是把數字看作二進制來進行計算的,Python 中的按位運演算法則如下:
下表中變數 a 為 60、b 為 13,二進制格式如下:
a = 0011 1100
b = 0000 1101
---------------------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011

(5) Python 邏輯運算子
Python 語言支持邏輯運算子,以下假設變數 a 為 10,b 為 20:

優先級: not>and>or
對于 a or b 來說,如果 a 為真,那么值為 a,否則為b;對于 a and b 來說,如果 a 為真,那么值為 b,否則為 a,例如:

(6) Python 成員運算子
除了以上的一些運算子之外,Python 還支持成員運算子 in 和 not in

(7) Python 身份運算子
身份運算子用于比較兩個物件的存盤單元,

5. 運算子 is 與 == 有什么區別?
Python 中的物件包含三要素:id、type、value,其中,id 用來唯一標識一個物件,type 標識物件的型別,value 是物件的值,
is 判斷 a 物件是否就是 b 物件,用于判斷兩個變數參考物件是否為同一個,是通過 id 來判斷的, == 判斷 a 物件的值是否和 b 物件的值相等,是通過 value 來判斷的,例如:

6. Python 都有哪些自帶的資料型別? 可變型別和不可變型別分別包括哪些?
Python 自帶的資料型別分為可變和不可變的型別,
可變資料型別 表示允許變數的值發生變化,如果改變了該資料型別的對應變數的值,那么不會重新分配記憶體空間,即如果對變數進行 append 或 += 等操作后,只是改變了變數的值,而不會新建一個物件,變數參考的物件的記憶體地址也不會變化,對于相同的值的不同物件,在記憶體中則會存在不同的物件,即每個物件都有自己的地址,相當于記憶體中對于相同值的物件保存了多份,這里不存在參考計數,是實實在在的物件,可變的資料型別包括:串列(list)、集合(set)和 字典(dic),
不可變資料型別 表示不允許變數的值發生變化,如果改變了該資料型別的對應變數的值,那么將重新分配記憶體空間,相當于是新建了一個物件,不可變資料型別包括:字串(str)、元組(tuple)和數值(number),
對于記憶體中相同的值的物件,在記憶體中則只有一個物件,內部會有一個參考計數來記錄有多少個變數參考這個物件,不可變資料型別對應變數的值更改后其記憶體地址會發生改變,可變資料型別對應變數的值更改后其記憶體地址不會發生改變,以下通過實驗演示可變和不可變資料型別,
(1) 整型

可以發現,當資料發生改變后,變數的內存地址發生了改變,那么整型就是不可變資料型別,
(2) 字串

可以發現,當資料發生改變后,變數的記憶體地址發生了改變,那么字串就是不可變資料型別,
(3) 元組
可以在元組的元素中存放一個串列,通過更改串列的值來查看元組是屬于可變還是不可變,

可以發現,雖然元組資料發生改變,但是記憶體地址沒有發生改變,但是不可以以此來判定元組就是可變資料型別,修改了元組中串列的值,但是因為串列是可變資料型別,所以雖然在串列中更改了值,但是串列的地址沒有改變,串列在元組中的地址的值沒有改變,所以也就意味著元組沒有發生變化,因此,可以認為元組是不可變資料型別,
(4) 集合
集合常用來進行去重和關系運算,集合是無序的,使用大括號或set()函式可以創建集合,需要注意的是,如果想要創建空集合,那么必須使用set()而不是{},后者用于創建空字典,大括號也不可以創建元素含有字典與串列的集合,

可以發現,雖然集合資料發生改變,但是記憶體地址沒有改變,由此可見集合是可變資料型別,
(5) 串列
串列是 Python 中的基礎資料型別之一,其他語言中也有類似于串列的資料型別,例如 js 中叫陣列,它是以[]括起來的,每個元素以逗號隔開,里面可以存放各種資料型別,

可以發現,雖然串列資料發生改變,但是記憶體地址沒有改變,由此可見串列也是可變資料型別,
(6) 字典
字典是 Python 中唯一的映射型別,采用鍵值對(key-value) 的形式存盤資料,Python 對 key 通過哈希函式運算,根據計算的結果決定 value 的存盤地址,所以字典是無序存盤的,但是在 Python3.6 版本后,字典開始是有序的,這是新的版本特征,字典的 key 值可以是整型、字串或元組等不可變物件,但不能是串列、集合、字典等可變物件,

可以發現,雖然字典資料發生改變,但是記憶體地址沒有改變,由此可見字典也是可變資料型別,
7. 串列、元組、集合、字典的區別有哪些?
串列 (list):是長度可變有序的資料存盤容器,可以通過下標索引取到相應的資料,
元組(tuple):固定長度不可變的順序容器,訪問效率高,適合存盤一些常量資料,可以作為字典的鍵使用,
集合(set):無序,元素只出現一次,可以自動去重,
字典(dict):長度可變的 hash 字典容器,存盤的方式為鍵值對,可以通過相應的鍵獲取相應的值,key 支持多種型別,key 必須是不可變型別且唯一,它們的詳細區別如下表所示:

8. 串列和元組的區別有哪些?
序列是 Python 中最基本的資料結構,序列中的每個元素都分配一個數字索引,第一個元素的索引是0,第二個元素的索引是1,依此類推,Python 有 6 個序列的內置型別,但最常見的是串列和元組,
陣列在 Python 中被叫作串列,串列和元組是 Python 中重要的內建的序列,串列和元組都具有索引、分片等操作,一般來說,串列是可以替代元組的,但是,為了限制某些元素,就會用元組,串列和元組主要有如下區別:
- 串列是可以修改的,而元組卻不能修改,如果要增添和洗掉元素,只能用串列,元組被稱為只讀串列,即資料可以被查詢,但不能被修改,若元組一旦被定義,則其長度和內容都是固定的,不能被修改,即不能對元組進行更新、增加和洗掉的操作,
- 串列用
[]表示,元組用()表示, - 串列不能作為字典的 key,而元組可以,
- 如果元組中僅有一個元素,那么需要在元素后加上逗號,
9. Python 中有哪些常見的資料型別轉換函式?
Python 提供了將變數或值從一種型別轉換成另一種型別的內置函式,內置函式封裝了各種轉換函式,可以使用目標型別關鍵字強制型別轉換,例如,int 函式能夠將符合數學格式數字型字串轉換成整數,常見的型別轉換函式如下所示:
| 函式 | 描述 |
|---|---|
| int(x[,base]) | 將 x 轉換為一個整數 |
| float(x) | 將 x 轉換到一個浮點數 |
| complex(real[,imag]) | 創建一個復數 |
| str(x) | 將物件 x 轉換為字串 |
| repr(x) | 將物件 x 轉換為運算式字串 |
| eval(str) | 用來計算在字串中的有效 Python 運算式,并回傳一個物件 |
| tuple(s) | 將序列 s 轉換為一個元組 |
| list(s) | 將序列 s 轉換為一個串列 |
| set(s) | 轉換為可變集合 |
| dict(d) | 創建一個字典,d 必須是一個序列(key,value) 元組 |
| frozenset(s) | 轉換為不可變集合 |
| chr(x) | 將一個整數轉換為一個字符 |
| ord(x) | 將一個字符轉換為它的整數值 |
| hex(x) | 將一個整數轉換為一個十六進制字串 |
| oct(x) | 將一個整數轉換為一個八進制字串 |
10. 串列、元組、集合及字典之間如何相互轉換?
# -*- coding: UTF-8 -*-
"""
@author:AmoXiang
@file:2.串列、元組、集合及字典之間如何相互轉換.py
@time:2020/11/10
"""
# 1.串列元組轉換為其他型別
# 串列轉集合(去重)
list1 = [6, 7, 7, 8, 8, 9]
print(set(list1)) # {8, 9, 6, 7}
# 兩個串列轉字典
list1 = ['key1', 'key2', 'key3']
list2 = ['1', '2', '3']
print(dict(zip(list1, list2))) # {'key1': '1', 'key2': '2', 'key3': '3'}
# 嵌套串列轉字典
list3 = [['key1', 'value1'], ['key2', 'value2'], ['key3', 'value3']]
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(dict(list3))
# 串列,元組轉字串
list2 = ['a', 'a', 'b']
print("".join(list2)) # aab
tuple1 = ('a', 'a', 'b')
print("".join(tuple1)) # aab
print("------------------------------------------------------------")
# 2.字典轉換為其他型別
# 字典轉換為其他型別
dic1 = {'a': 1, 'b': 2}
print(str(dic1)) # "{'a': 1, 'b': 2}"
print(type(str(dic1))) # <class 'str'>
# 字典 key和value互轉
dic2 = {'a': 1, 'b': 2, 'c': 3}
# {1: 'a', 2: 'b', 3: 'c'}
print({value: key for key, value in dic2.items()})
print("------------------------------------------------------------")
# 3.字串轉換為其他型別
# 字串轉串列
s = "aabbcc"
print(list(s)) # ['a', 'a', 'b', 'b', 'c', 'c']
# 字串轉元組
print(tuple(s)) # ('a', 'a', 'b', 'b', 'c', 'c')
# 字串轉集合
print(set(s)) # {'a', 'b', 'c'}
# 字串轉字典
dic2 = eval("{'name': 'Amo', 'age': 18}")
print(dic2) # {'name': 'Amo', 'age': 18}
print(type(dic2)) # <class 'dict'>
# 切分字串
a = "a b c"
print(a.split(' ')) # ['a', 'b', 'c']
11. 真題
-
1 or 2、1 and 2、1 < (2==2)、1 < 2 == 2 分別輸出什么?
-
以下代碼的運行結果是什么?
value = "B" and "A" or "C" print(value) -
用 4、9、2、7 四個數字,可以使用 +、-、*、和/,每個數字使用一次,使運算式的結果為 24,運算式是什么?
-
any() 和 all()方法有什么區別?
-
Python 中有什么元素為假?
-
在 Python 中是否有三元運算子 “?:” ?
-
如何宣告多個變數并賦值?
-
以下程式是否會報錯?
v1 = {} v2 = {3:5} v3 = {[11,23]:5} v4 = {(11,23):5} -
a = (1,),b = (1),c = (“1”) 分別是什么型別的資料?
-
使用 for 回圈分別遍歷串列、元組、字典和集合,
-
99 的八進制表示是多少?
-
請寫出十進制轉二進制、八進制、十六進制的程式,
歡迎大家在評論區打出真題的答案,也可以進行討論,答案下期揭曉,撰寫不易,請手留余香,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/214242.html
標籤:其他
