超詳細的Python入門基礎整理分享

2022-11-15 18:00:52
本篇文章給大家帶來了關於Python的相關知識,其中主要整理了Python入門基礎的相關內容,包括了識別符號、變數、條件語句等等內容,下面一起來看一下,希望對大家有幫助。

程式設計師必備介面測試偵錯工具:

【相關推薦:Python3視訊教學

識別符號

在 Python 中,所有識別符號可以包括英文(區分大小寫的)、數位以及下劃線(_),但不能以數位開頭。

單下劃線開頭 _foo 的代表不能直接存取的類屬性,需通過類提供的介面進行存取,不能用 from xxx import * 而匯入。

雙下劃線開頭的 __foo 代表類的私有成員

雙下劃線開頭和結尾的 __ foo__ 代表 Python 裡特殊方法專用的標識,如 __init__() 代表類別建構函式。

語句

Python 的程式碼塊中必須使用相同數目的行首縮排空格數

python中單行註釋採用 # 開頭。

python 中多行註釋使用三個單引號(‘’')或三個雙引號(「」")。

# Python語句中一般以新行作為語句的結束符。但是我們可以使用【斜槓( \)】將一行的語句分為多行顯示,
# 語句中包含 [], {} 或 () 括號就不需要使用多行連線符。
# Python可以在同一行中使用多條語句,語句之間使用【分號(;)】分割
total = item_one + \
        item_two + \
        item_three
days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']

# Python可以在同一行中使用多條語句,語句之間使用【分號(;)】分割。
import sys; x = 'runoob'; sys.stdout.write(x + '\n')

# Python 可以使用【引號( ' )、雙引號( " )、三引號( ''' 或 """ ) 】來表示字串
word = 'word'
sentence = "這是一個句子。"
paragraph = """這是一個段落。
包含了多個語句"""

# print 預設輸出是換行的,如果要實現【不換行需要在變數末尾加上逗號】 。
print x,y
登入後複製

變數

Python3 中有六個標準的資料型別:

  • Number(數位)

  • String(字串)

  • List(列表)

  • Tuple(元組)

  • Set(集合)

  • Dictionary(字典)

Python3 的六個標準資料型別中:

不可變資料(3 個):Number(數位)、String(字串)、Tuple(元組);

可變資料(3 個):List(列表)、Dictionary(字典)、Set(集合)。

Number(數位)

int、float、bool、complex(複數)

內部函數中,strings, tuples, 和 numbers 是不可更改的物件,全域性變數必須為init變數或者在函數中用self定義;而 list,dict 等則是可以修改的物件,內部函數可以直接使用函數中的區域性變數。

counter = 100 # 賦值整型變數
miles = 1000.0 # 浮點型
name = "John" # 字串

二進位制轉換:
int('10',2) 
> 2
bin(10)
> '0b1010'
bin(10)[2:]

ord(c) # c為字元
# 返回值:對應的十進位制整數(ASCll數值)
int(c) # c為字元,轉化為對應的數位

float('-inf') # 最小值
-inf

a = b = c = 1
a, b, c = 1, 2, "john"

all() # 函數用於判斷給定的可迭代引數 iterable 中的所有元素是否都為 TRUE,如果是返回 True,否則返回 False。

# 從左到右索引預設【0開始的】,最大範圍是字串【長度少1】
# 從右到左索引預設【-1開始的】,最大範圍是【字串開頭】
# 第三個引數,引數作用是【擷取的步長】
s = "a1a2···an"   # n>=0

向上取整:math.ceil()
向下取整:math.floor()、整除"//"
四捨五入:round()——奇數向遠離0取整,偶數去尾取整;或言之:奇數進位,偶數去尾
向0取整:int()
登入後複製

List(列表)

tinylist = [123, 'john']
print list[0]            # 輸出列表的第一個元素
print list[1:3]          # 輸出第二個至第三個元素 
print list[2:]           # 輸出從第三個開始至列表末尾的所有元素

# 二維陣列
num_list = [ [0] * 5 for i in range(2)]
dp = [[1]*n] + [[1]+[0] * (n-1) for _ in range(m-1)]

clone_node.neighbors = [self.cloneGraph(n) for n in node.neighbors] 

# 加號 + 是列表連線運運算元,星號 * 是重複操作
print tinylist * 2       # 輸出列表兩次
print list + tinylist    # 列印組合的列表

list.append('Google')   # 使用 append() 新增元素
del list[2]			# 可以使用 del 語句來刪除列表的元素
list.pop(3)			# 指定pop引數,將會刪除該位置的元素;無引數時預設刪除最後一個元素

list.append(sublist) # 參照傳遞
list.append([]+sublist) # 值傳遞
list.append(list(path))

len([1, 2, 3])	3	#長度
[1, 2, 3] + [4, 5, 6]	[1, 2, 3, 4, 5, 6]	#組合
['Hi!'] * 4	['Hi!', 'Hi!', 'Hi!', 'Hi!']	#重複
3 in [1, 2, 3]	True	#元素是否存在於列表中
for x in [1, 2, 3]: print x,	1 2 3	#迭代

[::-1] # 陣列反轉

max(list) # 求list的最大值

sum(sp[i] for i in range(n)) #求和
sum(s in jewelsSet for s in stones)

nums.sort() # 排序
score.sort(reverse=True)
list有一個sort方法,list.sort()將list進行排序,返回None
sort(*,key = None,reverse = False)
key是一個函數,這個函數的作用是從list的每個元素中提取用於當作排序依據的屬性
預設是從小到大,即reserve為False的時候,如果reserve為True,排列順序就是從大到小
def f(item):
    return item[1]
list.sort(key = f)
list.sort(key = lambda item:item[0])

sorted(iterable,*,key=None,reverse=False) # 預設正序排列
sorted(dict.items(),key=lambda item:item[0])
res = sorted(hash,key = lambda word:(-hash[word],word)) # 第一個引數 -hash[word] 即單詞出現次數的相反數
# 當詞頻相同時,用第二個引數 word 進行排序,即字母正序排列

列表解析 List Comprehensions
表示式:[expression for iter_val in iterable if cond_expr]
[expression]:最後執行的結果
[for iter_val in iterable]:這個可以是一個多層迴圈
[if cond_expr]:兩個for間是不能有判斷語句的,判斷語句只能在最後;順序不定,預設是左到右。

print[(x,y)for x in [1,2]for y in [3,4]]

for (k1, v1), (k2, v2) in zip(dict_one, dict_two): # 遍歷兩個list或者dict

for item in product([1,2],[10,20]): # 對矩陣做笛卡爾積
    print(item)
for i, j in product(range(m), range(n)):


neighbors = [(1,0), (1,-1), (0,-1), (-1,-1), (-1,0), (-1,1), (0,1), (1,1)]
for neighbor in neighbors:
	r = (row + neighbor[0])
	c = (col + neighbor[1])
for u,v in neighbors:
	
s = [1, 2, 3, 4, 5]
# 從指定索引1開始
for index, value in enumerate(s, 1):

list(str(n)) # int轉化為字串,轉化為list

next(word for word,f in freq.items() if f==maxFreq) # next()取list第一個值

map(max, grid) # 求每行的最大值
map(max, zip(*grid)) # 求每列的最大值
strs = map(str,nums) # 轉換為list(str)
r1,m1 = map(int, num1[:-1].split('+')) # list(str)轉化為list(int)
list(map(list,numSet))

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 返回一個物件
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped)  # list() 轉換為列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c))              # 元素個數與最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b))          # 與 zip 相反,zip(*) 可理解為解壓,返回二維矩陣式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
登入後複製

tuple(元組)

# 元組用 () 標識。內部元素用逗號隔開。但是元組不能二次賦值,相當於唯讀列表。
tinytuple = (123, 'john')
登入後複製

Dict(字典)

# 字典用"{ }"標識。字典由索引(key)和它對應的值value組成。
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"

# 值可以取任何資料型別,但鍵必須是不可變的,如字串,數位或 元組 。 用列表就不行
dict[tuple(count)]

# 以列表返回字典中的所有值
dict.values()
list(dict.values())

for key in dict:
    print (key)

tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'}
print dict['one']          # 輸出鍵為'one' 的值
print dict[2]              # 輸出鍵為 2 的值

print tinydict             # 輸出完整的字典
print tinydict.keys()      # 輸出所有鍵
print tinydict.values()    # 輸出所有值
maxFreq = max(freq.values()) # 求value的最大值

tinydict['Age'] = 8 # 更新
tinydict['School'] = "RUNOOB" # 新增

del tinydict['Name']  # 刪除鍵是'Name'的條目
tinydict.clear()      # 清空字典所有條目
del tinydict          # 刪除字典

defaultdict(list)   defaultdict(int) # defaultdict類的初始化函數接受一個型別作為引數,當所存取的鍵不存在的時候,可以範例化一個值作為預設值:

count.get(c, 0) # 預設值為0

items():返回所有(key,value)元組的陣列,類似於‘列表’
[s for s, c in cnt.items() if c == maxCnt] # 遍歷dict

dict排序
sorted(dict.items(),key=lambda item:item[0])

items = [(-val, key) for key, val in count.items()] # 變更為tuple
for val, key in sorted(items): # 遍歷排序後的tuple
登入後複製

set(集合)

parame = {value01,value02,...}
或者
set(value)

s.add( x )

s.update( x ) # 引數可以是列表,元組,字典等

s.remove( x )

s.discard( x )

len(s)

s.clear()

x in s

for key in set:
    print (key)
登入後複製

運運算元

/ 除 - x除以y
% 取模 - 返回除法的餘數
** 冪 - 返回x的y次冪
// 取整除 - 返回商的整數部分(向下取整)

and x and y 布林"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。
or x or y 布林"或" - 如果 x 是非 0,它返回 x 的計算值,否則它返回 y 的計算值。
not not x 布林"非" - 如果 x 為 True,返回 False 。

is is 是判斷兩個識別符號是不是參照自一個物件
is not is not 是判斷兩個識別符號是不是參照自不同物件
is 與 == 區別
is 用於判斷兩個變數參照物件是否為同一個(同一塊記憶體空間), == 用於判斷參照變數的值是否相等。

條件語句

if num == 3:            # 判斷num的值
    print 'boss'        elif num == 2:
    print 'user'elif num == 1:
    print 'worker'elif num < 0:           # 值小於零時輸出
    print 'error'else:
    print 'roadman'     # 條件均不成立時輸出
登入後複製

迴圈語句

i = 1
while i < 10:   
    i += 1
    if i%2 > 0:     # 非雙數時跳過輸出
        continue
    print i         # 輸出雙數2、4、6、8、10
    
i = 1
while 1:            # 迴圈條件為1必定成立
    print i         # 輸出1~10
    i += 1
    if i > 10:     # 當i大於10時跳出迴圈
        break

flag = 1
while (flag): print 'Given flag is really true!'

fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二個範例
   print ('當前水果: %s'% fruit)

fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print ('當前水果 : %s' % fruits[index])

for i in reversed(range(length - 1)): # 逆序

for letter in 'Python':     # 第一個範例
   if letter == 'h':
      break
   print '當前字母 :', letter

for i, ch in enumerate(s):
	if frequency[ch] == 1:
		return i

diff = [(a,b) for a,b in zip(s,goal) if a!=b]
登入後複製

字串

+	字串連線	
>>>a + b
'HelloPython'

*	重複輸出字串	
>>>a * 2
'HelloHello'

[]	通過索引獲取字串中字元	
>>>a[1]
'e'

[ : ]	擷取字串中的一部分	
>>>a[1:4]
'ell'

in	成員運運算元 - 如果字串中包含給定的字元返回 True	
>>>"H" in a
True
not in	成員運運算元 - 如果字串中不包含給定的字元返回 True	
>>>"M" not in a
True

r/R	原始字串 - 原始字串:所有的字串都是直接按照字面的意思來使用,沒有跳脫特殊或不能列印的字元。 原始字串除在字串的第一個引號前加上字母"r"(可以大小寫)以外,與普通字串有著幾乎完全相同的語法。	
>>>print r'\n'
\n
>>> print R'\n'
\n

strs = 'abcd'
for ch in strs:
    print(ch)

strs = 'abcd'
for index in range(len(strs)):
    print(strs[index], end=' ')

res += 'a'*3 # 'aaa'

s.split(" ") # 將字串分割成單詞列表

" ".join(list) # 將單詞列表轉換為字串,以空格分隔

f'{bulls}A{cows}B' # {}計算格式化

a = list(str(n)) # int轉成list
a[i-1] = str(int(a[i-1]) - 1) # 操作字元
int("".join(a)) # list轉化為int

isdigit # 函數判斷是否數位
isalpha # 判斷是否字母
登入後複製

字串格式化

print "My name is %s and weight is %d kg!" % ('Zara', 21) 
%s	 格式化字串
%d	 格式化整數
%f	 格式化浮點數位,可指定小數點後的精度
登入後複製

三引號

允許一個字串跨多行,字串中可以包含換行符、製表符以及其他特殊字元
 >>> hi = '''hi 
there'''
>>> hi   # repr()
'hi\nthere'
>>> print hi  # str()
hi 
there
登入後複製

函數

string.count(str, beg=0, end=len(string))
# 返回 str 在 string 裡面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數

string.endswith(obj, beg=0, end=len(string))
# 檢查字串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False.

string.find(str, beg=0, end=len(string))
# 檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1

string.format()
# 格式化字串

string.index(str, beg=0, end=len(string))
# 跟find()方法一樣,只不過如果str不在 string中會報一個異常.

string.join(seq)
# 以 string 作為分隔符,將 seq 中所有的元素(的字串表示)合併為一個新的字串

string.replace(str1, str2,  num=string.count(str1))
# 把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.

string.split(str="", num=string.count(str))
# 以 str 為分隔符切片 string,如果 num 有指定值,則僅分隔 num+1 個子字串
登入後複製

函數

在 python 中,strings, tuples, 和 numbers 是不可更改的物件,而 list,dict 等則是可以修改的物件。

不可變型別:變數賦值 a=5 後再賦值 a=10,這裡實際是新生成一個 int 值物件 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當於新生成了a。
可變型別:變數賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。

在Python中,數位、字元或者元組等不可變物件型別都屬於值傳遞,而字典dict或者列表list等可變物件型別屬於參照傳遞
如果要想修改新賦值後原物件不變,則需要用到python的copy模組,即物件拷貝。
copy.copy屬於淺拷貝,拷貝的是第一層list,而copy.deepcopy屬於深拷貝,對list所有子元素都進行深拷貝。

#可寫函數說明
def printinfo( name, age = 35 ):
   "列印任何傳入的字串"
   print "Name: ", name
   print "Age ", age
   return
#呼叫printinfo函數
printinfo( age=50, name="miki" )
printinfo( name="miki" )


# 可寫函數說明
def printinfo( arg1, *vartuple ):
   "列印任何傳入的引數"
   print "輸出: "
   print arg1
   for var in vartuple:
      print var
   return
# 呼叫printinfo 函數
printinfo( 10 )
printinfo( 70, 60, 50 )

import copy
l1 = [[1, 2], 3]
l2 = copy.copy(l1)
l3 = copy.deepcopy(l1)
l2.append(4)
l2[0].append(5)
l3[0].append(6)
l1 = [[1, 2, 5], 3]
l2 = [[1, 2, 5], 3, 4]
l3 = [[1, 2, 6], 3]
登入後複製

匿名函數

# 可寫函數說明
sum = lambda arg1, arg2: arg1 + arg2
# 呼叫sum函數
print "相加後的值為 : ", sum( 10, 20 )
print "相加後的值為 : ", sum( 20, 20 )
登入後複製

模組

import support

from fib import fibonacci

from math import *
登入後複製

搜尋路徑
1、當前目錄
2、如果不在當前目錄,Python 則搜尋在 shell 變數 PYTHONPATH 下的每個目錄。
3、如果都找不到,Python會察看預設路徑。UNIX下,預設路徑一般為/usr/local/lib/python/。
模組搜尋路徑儲存在 system 模組的 sys.path 變數中。變數裡包含當前目錄,PYTHONPATH和由安裝過程決定的預設目錄。

Python中的包
包是一個分層次的檔案目錄結構,它定義了一個由模組及子包,和子包下的子包等組成的 Python 的應用環境。

簡單來說,包就是資料夾,但該資料夾下必須存在 __init__.py 檔案, 該檔案的內容可以為空。 __init__.py 用於標識當前資料夾是一個包。

考慮一個在 package_runoob 目錄下的 runoob1.py、runoob2.py、 __init__.py 檔案,test.py 為測試呼叫包的程式碼,目錄結構如下:
test.py
package_runoob
|-- __init__.py
|-- runoob1.py
|-- runoob2.py

# 匯入 Phone 包from package_runoob.runoob1 import runoob1from package_runoob.runoob2 import runoob2
 
runoob1()runoob2()
登入後複製

檔案

str = input("請輸入:")
print "你輸入的內容是: ", str

fo = open("foo.txt", "w")
print "檔名: ", fo.name
print "是否已關閉 : ", fo.closed
print "存取模式 : ", fo.mode
print "末尾是否強制加空格 : ", fo.softspace

# 開啟一個檔案
fo = open("foo.txt", "w")
str = fo.read(10)
fo.write( "www.runoob.com!\nVery good site!\n")
# 關閉開啟的檔案
fo.close()
登入後複製

檔案和資料夾

import os
os.rename( "test1.txt", "test2.txt" )
os.remove("test2.txt")

os.mkdir("test")
# 將當前目錄改為"/home/newdir"
os.chdir("/home/newdir")
# 給出當前的目錄
print os.getcwd()
# 刪除」/tmp/test」目錄
os.rmdir( "/tmp/test"  )
登入後複製

異常

try:
    正常的操作
   ......................
except:
    發生異常,執行這塊程式碼
   ......................
else:
    如果沒有異常執行這塊程式碼

try:
    fh = open("testfile", "w")
    fh.write("這是一個測試檔案,用於測試異常!!")
except IOError:
    print "Error: 沒有找到檔案或讀取檔案失敗"
else:
    print "內容寫入檔案成功"
    fh.close()

try-finally 語句無論是否發生異常都將執行最後的程式碼。
try:
<語句>
finally:
<語句>    #退出try時總會執行
raise

try:
    fh = open("testfile", "w")
    try:
        fh.write("這是一個測試檔案,用於測試異常!!")
    finally:
        print "關閉檔案"
        fh.close()
except IOError:
    print "Error: 沒有找到檔案或讀取檔案失敗"
登入後複製

物件導向

class Employee:
   '所有員工的基礎類別'
   empCount = 0
 
   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount
 
   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary
 
"建立 Employee 類的第一個物件"
emp1 = Employee("Zara", 2000)
"建立 Employee 類的第二個物件"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
登入後複製

empCount 變數是一個類變數,它的值將在這個類的所有範例之間共用。你可以在內部類或外部類使用 Employee.empCount 存取。

第一種方法__init__()方法是一種特殊的方法,被稱為類的建構函式或初始化方法,當建立了這個類的範例時就會呼叫該方法

self 代表類的範例,self 在定義類的方法時是必須有的,雖然在呼叫時不必傳入相應的引數。

繼承

class A:        # 定義類 A
.....

class B:         # 定義類 B
.....

class C(A, B):   # 繼承類 A 和 B
.....
登入後複製

重寫

class Parent:        # 定義父類別
   def myMethod(self):
      print '呼叫父類別方法'
 
class Child(Parent): # 定義子類
   def myMethod(self):
      print '呼叫子類方法'
登入後複製
登入後複製

運運算元過載

class Parent:        # 定義父類別
   def myMethod(self):
      print '呼叫父類別方法'
 
class Child(Parent): # 定義子類
   def myMethod(self):
      print '呼叫子類方法'
登入後複製
登入後複製

類屬性和方法

類的私有屬性
__private_attrs:兩個下劃線開頭,宣告該屬性為私有,不能在類的外部被使用或直接存取。在類內部的方法中使用時 self.__private_attrs。

類的方法
在類的內部,使用 def 關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含引數 self,且為第一個引數

類的私有方法
__private_method:兩個下劃線開頭,宣告該方法為私有方法,不能在類的外部呼叫。在類的內部呼叫 self.__private_methods

單下劃線、雙下劃線、頭尾雙下劃線說明:
__foo__: 定義的是特殊方法,一般是系統定義名字 ,類似 __init__() 之類的。

_foo: 以單下劃線開頭的表示的是 protected 型別的變數,即保護型別只能允許其本身與子類進行存取,不能用於 from module import *

__foo: 雙下劃線的表示的是私有型別(private)的變數, 只能是允許這個類本身進行存取了。

【相關推薦:Python3視訊教學

以上就是超詳細的Python入門基礎整理分享的詳細內容,更多請關注TW511.COM其它相關文章!