python基礎---(變量、數據類型、在pycharm中查看源碼)


***如何在pycharm中查看源碼:

  

 

      選中方法,Ctrl 加鼠標左鍵,即可打開方法的源碼。

一、變量

  1. 定義:把程序運行的中間結果臨時的存在內存里,以便后續的代碼調用。
  2. 定義變量的原則:
    1. 只能由數字、字母、下划線組成,數字不能開頭(不能有特殊字符);
    2. 不能是python環境內的關鍵字
    3. 變量的定義要具有可描述性。
    4. 變量不能是中文。
    5. 不可太長

  3.Python中查看關鍵字的方法:1.import keyword  2.keyword.kwlist(獲取所有關鍵字)

    使用keyword模塊查看python關鍵字;使用keyword.iskeyword(),來查看某一個是否

位關鍵字 

常量 

《:在Python中沒有一個專門的語法代表常量,程序員約定俗成用變量名全部大寫代表常量

AGE_OF_OLDBOY = 56》

        定義方式:下划線(age_of_oldboy = 56);和駝峰法(AgeOfOldboy = 56)

二、數據類型轉換

  1.  int和bool數據類型轉換:

    int---->bool  非0即True

    bool---->int  True是1;Flase是0

  2.  int和str類型轉換:

    所有的int都能轉換成str    123;’123’  123=str('123')

    只有純數字組成的str,才能轉化成int       s=’123’   int(s)

  3.  str和bool類型的轉換:  #空list ,tuple ,dict的bool值都是False

    str---->bool  s = bool('')空字符串是False  ;  s = bool('qwe')是Ture。

    bool---->str  i = str(True/False)  print(i,type(i)) ;  都是字符串。

  4.  字符串的split方法,可以將str----->list

     join(適用於str、列表、字典等可迭代對象)方法,可以將list等---->str

     用字符串做一個連接符,鏈接可迭代對象中的每一個元素(每一個元素都必須是str:li = [1,'qwe']就會出錯),形成一個新的字符串。

     

    5.str與bytes類型的轉換

    str---->bytes  encode方法;s.encode('utf-8')或('gbk')

    bytes---->str  decode方法;s.decode('utf-8')或('gbk')

    6.元組與列表的轉換

    tuple--->list  list(tuple)

    list--->tuple  tuple(list)

    7.集合與列表的轉換

    set--->list  list(set)

    list--->set  set(list)

三、數據類型

   基礎數據類型引言:

   數據類型的分類:

      可變數據型(不可hash):list,dict.set 

      不可變數據(可hash):int,bool,str,tuple

   容器類型:

      容器類(承載各種數據類型):list,tuple,dict

   (一)int 運算。+ - * / ** % ...

    #bit_lenth 方法

    i = 4

    print(i.bit_lenth())

    # 轉化成二進制的最小位數。

    (二)bool:判斷,真假,作為條件

    (三)str(字符串) 存儲少量的數據。  操作簡單,便於傳輸。

    1、str的索引與切片

    (索引出來的數據,之前是什么類型,索引出來還是原來的類型;

      切片形成的數據,對誰(list,str,tuple)進行切片,之后還是

      原先(list,str,tuple)的數據類型)

     a.字符串的拼接

      字符串可以進行相加和相乘

     b.字符串在內存中的存儲

      n="oldboy"  如果是漢字,編碼不同,則占用的字節不同。

      一個字母會占用一個字節,最后加一個'\o';即n一共占用8個字節。()

     c.字符中的下標,索引

      n="oldboyOLDBOY"  下標是用0開始;n[0]的輸出是"o";n[-1]的輸出是"Y"

     d.字符串的切片、逆序

      [索引初值:索引終值:步長] (默認的步長是1)(原則就是顧頭不顧尾)

      n[1:4] 的輸出是“ldbo”

      n[2:]第一個:后面什么都不寫,會取到最后一個字符;輸出的是:“dboyOLDBOY”

      n[2:-1:2]步長=2,跳一個,取一個;輸出的是:“doODO”

      n[::-1]表示逆序,起始值什么不寫,可能是第一個也可能是倒數第一個;如果步長是-1就表示逆序。輸出的是:“YOBDLOyobdlo”。

    2字符串(str)的使用方法  (通過查看源碼,學習其他方法)

 1.captalize(首字母大寫);title(每個單詞首字母大寫)
 2 ps:
 3     s = 'laonahai'         
 4     print(s.captalize())
 5     
 6     s = 'lao nan,hai7is' (以空格數字特殊符號非字母認為是分開的單詞)   
 7     print(s.title())
 8 
 9 2.upper(全部大寫);lower(全部小寫)
10     s = 'laonahai'         
11     print(s.upper())
12 
13     s = 'laonahai'         
14     print(s.lower())
15 
16 3.swapcase(大小寫翻轉)
17     s = 'laOnaHai'                
18     print(s.swapcase())
19 
20 4.center(20,"$")內容居中,總長度,空白處填充
21     s = 'laonahai'         
22     print(s.center(25,"*"))
23 
24 5.startswith(判斷以什么開頭);endswith(判斷以什么結尾)
25      s = 'laonahailaonahai'         
26      print(s.startswith('l')   
27      ()內的參數必須是一個整體,不能調隔;可以傳切片(start和end)參數。
28 
29 6.strip(去除首尾的空格,/n ,/t)   lstrip(去除左邊的) rstrip(去除左邊的)
30     s = ' \n laonahai \t '         
31     print(s.strip())
32 
33 7. find(通過元素查找索引);找不到時會返回一個"-1"
34     index(通過元素查找t(s.startswith('l') 
35      s = 'laonahailaonahai'         
36      print(s. find('l',1,9)      可以傳切片(start和end)參數。
37 8.count(尋找元素出現的個數,可切片)
38      s = 'laonahailaonahai'         
39      print(s.count('l',3,12) 
40 9.replace(替換)
41     s = 'laonahailaonahai'         
42      print(s.count('l','m') 
43 10. split 分割  str ---> list
44      s = 'alex wusir taibai'
45     print(s.split())
46     s1 = 'alex,wusir,taibai'
47     print(s1.split(','))
48     s2 = 'alexawusirataibai'
49     print(s2.split('a'))(會把a干掉)
50     s3 = 'alexawusirataibai'
51     print(s3.split('a',1))  # 分割次數
52 
53 11.format(格式化輸出)
54     三種用法
55     第一種用法:
56     s = '我叫{},今年{},愛好{}'.format('MT',18,'母牛')
57     print(s)    **{}中間不能有空格,否則報錯
58     第二種用法
59     s = '我叫{0},今年{1},愛好{2},我依然叫{0},今年還是{1}'\
60     .format('MT',18,'母牛')    **{}內的數字依據format()內的個數來填寫;在這里不能超過2,填3就會報錯。
61     print(s)
62     第三種 鍵值對
63     s = '我叫{name},今年{age},愛好{hobby}'.format(age=18, name='MT', hobby='悶兒')
64  
65 12.isalnum,isalpha,isdigit
66     name='123a'
67     print(name.isalnum()) #字符串由字母或數字組成
68     print(name.isalpha()) #字符串只由字母組成
69     print(name.isdigit()) #字符串只由數字組成
70     if name.isdigit():
71         name = int(name)
72         print(name,type(name))
73     else:
74         print('您輸入的由非數字元素')
View Code
rsplit  從右側開始分割
isalnum:判斷str是否由字符和數字,混合組成;    設置密碼必須有數字,字母,特殊字符,如何判斷srt中是否含有特殊字符??  答(用re)
isspace:判斷str是否是空格
strip(),可以傳參數:指定的一個元素,把這個元素過濾掉

   strip()的注意點

 

  (四)list  列表 存放大量的數據,大量的數據放在列表中便於操作。而且列表有序,有索引值,可切片,方便取值

    A.列表定義:

    方法一:names =  [1,2,"qwe",{"name":"老男孩"},[3.14,55,66]]

    方法二:names =  list('qwer')  迭代的添加方法;會生成這樣一個列表 ['q', 'w', 'e', 'r']

    方法三:names = list(['qwer',8,9,7])

    B.增刪改查:

 1 復制代碼
 2 增:
 3 1.append:一次只能添加一個,追加到最后一個元素。
 4 2.insert:指定索引位置添加,一次只能添加一個元素。
 5 3.extend:迭代的添加,到列表最后。
 6 刪:
 7 pop:按照索引值刪除,一次只能刪除一個,
 8 remove:按照元素刪除,一次只能刪除一個。
 9 clear:清空列表
10 del list:刪除列表    /del list[索引值]可切片。
11 改:
12 1.[索引值] = new,通過索引賦新值。
13 2.[切片] = new,通過切片的改回迭代的條件到列表中。
14 查:
15 1.[]索引或切片查
16 2.循環查
17 
18 補充:
19 in    not in 判斷列表中是否存在該元素。
20 復制代碼
list增刪改查
刪的pop和remove一側只能刪除一個;切片刪除用 del list[:]

    C.列表的方法:

      可以索引值,切片,步長,

    其他操作方法:

    1,sort 從小到大, 正向排序

      l1 = [1, 2, 1, 7, 5, 4, 9, 8, 3]

      l1.sort()

    2,從大到小,反向排序

      l1.sort(reverse=True)

    3.翻轉  #str或int類型都可以

      l1.reverse()

    4.len 長度  len(l1)

    5.index  通過元素找索引  ;(列表只有index方法;沒有find方法。)

     D.列表的嵌套:列表再有列表

     li = [1,2,'alex',['100','wusir',99,[44]],22]  

     
li = [1,2,'alex',['100','wusir',99],22]
li[2] = li[2].capitalize()
#print(li)
li[3][1]=li[3][1].upper()
print(li)
li [3][2] = 99+1
print(li)

列表嵌套查詢的方法:li.[索引值][索引值]
列表嵌套示例

    E.在循環一個列表是,最好不要進行刪除操作,(一旦刪除,索引會隨之改變,容易出錯)

    eg:li = [11,22,33,44,55]將索引為奇數的元素刪除。

    方法1:用切片刪除

      del li[1::2]

    方法2:定義一個空列表,for循環出每一個奇數元素,添加到空列表中,再賦值給原先的列表。  li = [11,22,33,44,55]

     l2 = []

     for i in range(len(li)):

      if i%2==0:

        l2.append(li[i])

      li = l2

    方法3:倒序刪除

      for i in range(len(li)-1,-1,-1):

        if i %2 == 1:

          del li[I]

  備注:列表中不使用多行注釋

    (五)tuple 元組   只讀列表。(1,2,{"name":"老男孩"})數據可以被查詢,不能被修改。所以,字符串的切片同樣適用於元組。

    A.創建:ages = ()

        ages = tuple(())

     兒子不能改,孫子可以改:如果元組中有列表、字典等,可以修改的元素,那么列表等可以進行修改。

    B.常用操作:

    索引,切片,循環,長度,包含(in  not in)

    C.對於元組:如果只有一個元素,並且沒有逗號  ;t = (2)  <==>t = 2

     此元素是什么數據類型,該表達式就是什么數據類型。 t = (2,) 則是一個元組                                   

    (六)dic 字典  存儲關系型的數據,查詢速度非常快,二分查詢。

   A.字典的定義:python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,所以字典是無須存儲,(3.5之前;3.6以后的版本,字典在創建的時候,按照一定的順序插入的數值,看起來是有序的。)

   B.列表是有序的對象集合,字典是無須的對象集合,兩只之間的區別在於:

    字典當值的元素是通過鍵來存儲,而不是通過偏移存儲。

     創建:info = {key1:value1,key2:value2}

      1.鍵與值用“:”冒號分開

      2.項與項用“,”號分開

     創建方法:1.person = {'name':'les','age',18}

          2.person = dict(name='les','age'=19)

          3.preson = dict({'name':'les','age',18})

          4.dic = dict([("k1", "v1"), ("k2", "v2")])  有序字典:OrderedDict([("k1", "v1"), ("k2", "v2")])

     特性:

      1.key-value結構

      2.key必須可hash,且必須為不可變類型,必須唯一

      3.可存放任意多個值,可修改,可以不唯一。

      4,無序。(3.5之前;3.6以后的版本,字典在創建的時候,按照一定的順序插入的數值,看起來是有序的。)

     info= {"name":"班長","addr":"山東","age":18}

      print("%s %d %s"%(info["name"],info["addr"],info["age"]))

    注意:

      

 

   c.增刪改查:

 1 增:
 2 
 3     第一種:給key賦value(有則覆蓋,無責添加)
 4 
 5       dic['key'] = 'value'
 6 
 7      第二種:.setdeafult(有則不變,無責添加)
 8 
 9        dic.setdefault()
10 
11     刪:
12 
13     第一種:.pop()   有返回值的
14 
15       dic.pop('key')  根據key刪除鍵值對,並返回對應的值,如果沒有key則返回默認返回值。eg:print(dic.pop('na','沒有此鍵'))  如果dic中沒有'na'這個值,后面可以再自己定義一個參數,提示出,沒有'na'這個key值對。
16 
17 
18      第二種:.popitem()  隨機刪除,有返回值。
19      dic.popitem()
20     第三種:.clear 清空
21      dic.clear
22     第四種:del  刪除字典;也可以帶入key,刪除鍵值對
23       del dic
24       del dic['key']
25    改:
26     第一種:給key賦value(有則覆蓋,無責添加)
27     dic['name'] = '太黑'
28     第二種:.update方法  兩個字典的改,
29     dic = {"name":"jin","age":18,"sex":"male"}
30 
31     dic2 = {"name":"alex","weight":75}
32 
33     dic2.update(dic)  # 將dic所有的鍵值對覆蓋添加(相同的覆蓋,沒有的添加)到dic2中
34      查:
35 
36     第一種:print(dic['name'])  通過key來查看,value
37 
38      第二種:.get方法
39 
40      print(dic.get('name1')) # 默認返回None
41 
42      print(dic.get('name1','咩有此鍵值對')) # 默認返回None
View Code
dict的鍵值對增加方式,有則覆蓋:添加key,value時,字典中有相同的key;則會把原key對應的value值覆蓋。
popitem,刪除,返回的元組形式的鍵值對。
pop('key',"沒有此鍵")  當key不存在時,不加參數,則報錯;設置參數,則返回設置的參數;(可以設置一個“沒有此鍵”的參數)

   D.其他方法:

    1.keys()  values()  items()

      print(dic.keys())

      #for i in dic.keys:  #<==>for i in dic:

        print(i)#  循環key

      keys = dic.keys()

      print(keys,type(keys)) 

      dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>特殊的字典類列表。

      print(dic.vaules())

      ......

      dic.items()  key.value都打印出來

    2.典的  fromkeys(*args, **kwargs)方法:  *args必須是一個可迭代對象。

    dic = dict.formkeys('abc','alex')  #會把abc迭代的添加到字典中,對應的每一個值都是'alex'

    dic = dic.formkeys([1,2,3],[])  #先生成{'1':[],'2':[],'3':[]}

    dic[1].append('老男孩')    #再分別把'老男孩'添加到每一個字典的值中。

    dic[1] = 777  #則改變的只有dic[1]的值是777;其他都是'老男孩'

v = dict.fromkeys(['k1','k2'],[])
   v[‘k1’].append(666)
   print(v){'k1': [666], 'k2': [666]}
   v[‘k1’] = 777 # 單獨對k1進行賦值
   print(v){'k1': 777, 'k2': [666]}

      循環鍵值對

      1.for i in dic.items:  2.for k,v in dic.items():   3. for i in dic:

         print(i)      print(k,v)          print(i,dic[i])  

      2.長度:len(dict) 

    E.字典的嵌套

      dic = {"name_list":['張三','lisi','隔壁王叔叔'],'dic2':{'name':'太白','age':12}}

      1 ,給列表追加一個元素:'旺旺'

        dic['name_list'].append('旺旺')

      2,給列表lisi全部大寫

        dic['name_list'][1] = dic['name_list'][1].upper()

      3,給dic2 對應的字典添加一個鍵值對:hobby:girl

        dic['dic2']['hobby'] = 'girl'

        dic['dic2'].setdefault('hobby','girl')

    F.在循環字典中,不能增加或刪除此字典的鍵值對。(字典中不能有重復的key,循環添加會被覆蓋)

    eg:dic = {'k1':'value1','k2':'value2','name':'wusir'}

    將字典中含有k元素的鍵,對應的鍵值對刪除。

    解決方法:把包含K元素的鍵,添加到列表中;再循環列表時,刪除鍵值。

li = []
for i in dic:
    if 'k' in i:
        li.append(i)
for i in li:
    del dic[i]
print(dic)
代碼1
for i in list(dic):
    if 'k' in i:
        del dic[i]
print(dic)
代碼2

    set 集合  交集,並集,補集...

  集合是無序的,不重復的數據集合,它里面的元素是可哈希的(不可變類型),但是集合本身是不可哈希(所以集合做不了字典的鍵)

   但是:frozenset不可變集合,讓集合變成不可變類型。也就可以做字典的key了。frozenset轉換之后,里面的還是無序的({'a', 'y', 'b', 'r'})

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

     集合的兩個重要應用:

    1.去重,把一個列表變成集合,會自動去除列表的重復元素;

    2.關系測試,測試兩組數據之間的交集,差集,並集等關系。

1.集合的創建、形式

  創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。 

  有元素集合set 1= {1,2,3}  

2.集合的增

set1.add()

set1 = {'alex','wusir','ritian','egon','barry'}
set1.add('景女神')
print(set1)

set1.update()

set1.update('abc')
# set1.update([1,2,3])
# print(set1)

3.集合的刪

set1 = {'alex','wusir','ritian','egon','barry'}

set1.remove('alex')  # 刪除一個元素
print(set1)

set1.pop()  # 隨機刪除一個元素
print(set1)

set1.clear()  # 清空集合
print(set1)

del set1  # 刪除集合
print(set1)

set1.discard('alex')  <==> remove

4.集合的其他操作

4.1 交集。(&  或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}

  4.2 並集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}

print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7}

  4.3 差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}

   4.4反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

  4.5子集與超集

復制代碼
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

print(set1 < set2)
print(set1.issubset(set2))  # 這兩個相同,都是說明set1是set2子集。

print(set2 > set1)
print(set2.issuperset(set1))  # 這兩個相同,都是說明set2是set1超集。
復制代碼

集合set的查詢:集合是無許的,只能通過循環的方式查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM