1. 程式人生 > 實用技巧 >python學習筆記 -01基礎

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 list1
View Code

7.刪除字典指定元素

 1 dic1 = {'name
':'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
View Code

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