python學習筆記 -01基礎
數字、字串 小資料池
數字範圍: -5~256 在此範圍內記憶體地址相同,超出範圍則不同(a=2,b=2此時a和b指向的記憶體地址相同,a=300,b=300,a和b的記憶體地址不同)
字串:1.不能有特殊字元
2.s*20還是同一個地址,s*21是兩個不同的地址
2.編碼
ascii 一個位元組,只能表示數字、字母、特殊字元,不支援中文
unicode:所有的都是用4個位元組表示(浪費空間)
utf-8:字母、數字使用一個位元組表示,中文用3個位元組
gbk:字母用一個位元組,中文用兩個位元組
備註:
1)各個編碼之間的二進位制不能相互識別,會產生亂碼
2)檔案的儲存、傳輸,不能是unicode的編碼方式(只能是utf-8,utf-16,gbk,gb2312,ascii等)
3.python3
str在記憶體中是使用unicode編碼的
bytes型別
對於英文
str: 表現形式 s = 'alex'
編碼方式: unicode
bytes:
表現形式:s=b'alex'
編碼方式:utf-8 gbk...
對於中文
str:表現形式 s='中國'
編碼方式:unicode
byttes:表現形式:s=b'x\e91\e9\e01\e21\e31\e32'
編碼方式:utf-8 gbk
4.集合:可變的資料型別,他裡面的資料元素必須是不可變的資料型別,無序,不重複
set1 =set({1,2,3})
set2 = {1,2,3}
增:
set1. add
5.列表去重
1 list1 = [1,2,3,2,3,5] 2 list1 = list(set(list1))
6.刪除列表中指定元素
1 #移除列表中大於10的元素 2 list1 = [1,20,1,30,45,3] 3 from copy import deepcopy 4 list2 = deepcopy(list1) 5 for i in list2: 6 if i >10: 7 list1.remove(i) 8 print list1View Code
7.刪除字典指定元素
1 dic1 = {'nameView Code':'zhangsan','age':18,'sex':'meal'} 2 #刪除字典中key中含字元a的鍵值對 3 #方法一: 4 dic_new = { } 5 for k,value in dic1.iteritems(): 6 if 'a' not in k: 7 dic_new.setdefault(k,value) 8 dic1 = dic_new 9 print dic1 10 #方法二 11 list1 = [ ] 12 for k in dic1: 13 if 'a' in k: 14 list1.append(k) 15 for i in list1: 16 del dic1[i] 17 print dic1
8.檔案操作
只寫
1 #w 若檔案不存在則先建立再寫入,若檔案存在則先清除檔案的內容再寫入 2 f = open('test',mode='w',encoding='utf-8') 3 print(type(f))#<class '_io.TextIOWrapper'> 4 f.write('hello,kugou!你好') 5 f.close() 6 #wb 7 f = open('test',mode='wb') 8 print(type(f))#<class '_io.BufferedWriter'> 9 f.write('how are you?小明'.encode('utf-8')) 10 f.close()View Code
1 # 讀寫r+:游標是從檔案頭開始的,先讀後寫正常,先寫後讀會把檔案對應長度的內容覆蓋掉, 2 # 讀到的內容是游標後的內容,若全被抹掉則讀的內容為空 3 f = open('test',mode='r+',encoding='utf-8') 4 print(f.read()) 5 f.write('zhangsan,lisi') 6 f.close() 7 # 寫讀w+: 8 f = open('test',mode='w+',encoding='utf-8') 9 f.write('wangwu,lisi') 10 f.seek(0) 11 print(f.read()) 12 #a:追加 13 f = open('test',mode='a',encoding='utf-8') 14 f.write('wangwu,lisi') 15 #a+:追加(可寫可讀) 16 f = open('test',mode='a+',encoding='utf-8') 17 f.write('wangwu,lisi') 18 f.seek(0) 19 print(f.read())View Code
備註:mode的值沒有+號則只能進行單一操作,有+號則可讀可寫
1 f = open('test',mode='r+',encoding='utf-8') 2 content = f.read(3)#讀出來的都是字元 3 f.seek(2) #是按照位元組定游標位置,即這裡2是位元組數,如遇中文則會報錯,因為中文一個字元用3個位元組表示 4 location = f.tell() 5 f.seek(location + 2)#'-'向前移,'+'向後移 6 contents = f.read() 7 print(contents) 8 line = f.readline()#一行一行的讀 9 lines = f.readlines()#每行當成一個元素新增到list 10 print (lines) 11 f.close() 12 #with open 可同時開啟多個檔案 13 with open('test',mode='r+',encoding='utf-8') as file1,\ 14 open('test2',mode='w',encoding='utf-8') as file2: 15 line = file1.readline() 16 print (line) 17 file2.write(line)View Code
9.動態引數
1 #動態引數:可以接收多個引數 2 # 1.*args:接收按位置傳來的引數組織成一個元組,且*args需定義在預設引數之前 3 def sum(*args,age = 23): 4 print (args) 5 n = 0 6 for i in args: 7 n += i 8 return n + age 9 10 print(sum(1,2,3)) 11 #2.**kwargs:接收按照關鍵字傳參的值,組織成一個字典 12 def show(**kwargs): 13 print (kwargs)#{'a': 1, 'b': 2} 14 show(a = 1,b =2) 15 #*args和**kwargs結合使用 16 def fun(*args,**kwargs): 17 print(args,kwargs)#(1, 23) {'b': 3, 'n': 4} 18 fun(1,23,b=3,n=4)
#引數的順序:位置引數、*args,預設引數、**kwargs
動態引數的的另一種方式:
def fun(*args)#站在形形參的角度,給變數加上*,就是組合傳來的值
print(args)
l = [1,2,3,6,8]
fun(*l)#站在實參的角度,給一個序列加上*,就是將這個序列按照順序打散
同理適用於**kwargs
def fun(**kwargs)
print(kwargs)
d = {'a':1,'b':2}
fun(**d)
#動態引數注意事項:
如果預設引數的值是一個可變資料型別,每次呼叫函式的時候如果不傳值則共用這個引數的值
def f(l=[]):
l.append(1)
print l
f()#[1]
f()#[1,1]
f()#[1,1,1]
def f2(k,d={}):
d[k] = 'v'
print d
f2('name')#{'name':'v'}
f2('age')#{'naem':'v','age':'v}
f2('sex')#{'name':'v','age':'v','sex':'v'}
10.名稱空間和作用域
#名稱空間 有3種 #內建名稱空間 --python直譯器 #就是python直譯器一起動就可以使用的名字就是內建名稱空間(如print()、input()等) #內建名稱空間在啟動直譯器的時候就被載入進記憶體 #全域性名稱空間 ---我們寫的程式碼但不是函式中的程式碼 #在程式從上到下被執行的過程中依次載入進記憶體的 #放置了我們設定的所有變數名和函式名 #區域性名稱空間 --函式 #就是函式內部定義的名字 #當函式呼叫的時候才會產生這個名字,隨著函式的執行結束,這個名字也隨著消失 #在區域性:可以使用全域性、內建名稱空間 #在全域性:可以使用內建的名稱空間,不能使用區域性名稱空間 #在內建:不能使用全域性、區域性名稱空間 #作用域 #全域性作用 ---作用在全域性 ---內建和全域性名字空間的名字屬於全域性作用 --globals() #區域性作用 ---作用的區域性 ---函式(區域性名字空間中的名字屬於區域性作用)--locals() # def func(): # x = 'a' # y = 'b' # print (locals())#{'x': 'a', 'y': 'b'} # a = 1 # b = 2 # # func() # print(globals()) #globals 永遠列印全域性的名字 #locals 在哪裡就列印哪裡的名字 # def func(): # print (a) # a = 2 # func()View Code