1. 程式人生 > 實用技巧 >5.垃圾回收機制、互動、運算子、流程控制if判斷

5.垃圾回收機制、互動、運算子、流程控制if判斷

1.垃圾回收機制詳解(瞭解)

  • 棧區與堆區

    • 棧區:變數名與值記憶體地址的關聯關係存放於棧區
    • 堆區:變數值存放於堆區,記憶體管理回收的是堆區的內容
  • 引用計數

    x = 10	#直接引用:指的是從棧區出發直接引用到記憶體的地址
    print(id(x))
    
    l = ['a',x]	#間接引用:指的是從棧區出發引用到堆區後,再通過進一步引用才能到達的記憶體地址,一般指容器型資料
    print(id(l[1]))
    
  • 標記清除:解決引用計數迴圈引用問題

  • 分帶回收:提升回收效率

2.與使用者互動

  • 接收使用者輸入

    在python3中:input會將使用者輸入的所有內容都存成字串型別

    age = input("請輸入你的年齡: ")
    print(age,type(age))
    age = int(age)	#int只能將純數字的字串轉化成整形
    

    在python2中:

    raw_input():用法與python3的input一模一樣

    input():要求使用者必須輸入一個明確的資料型別,輸入的是什麼型別,輸出的就是什麼型別

  • 字串的格式化輸出

    • %,值按照位置與%s一一對應,少一個不行,多一個也不行;

      %s實際上可傳入任意資料型別,%d只能接受int

      %%替代%符號

      ①按照位置傳值

      res = 'my name is %s my age is %s' %('egon','18')
      res = 'my name is %s my age is %s' %('18','egon')
      res = 'my name is %s' %'egon'
      print(res)
      

      ②以字典形式,打破位置的限制

      res = '我的名字是 %(name)s 我的年齡是 %(age)s' %{'age':'18','name':'egon'}
      print(res)
      
    • str.format:相容性好

      ①按照位置傳值

      res = '我的名字是{} 我的年齡是{}'.format('egon',18)
      print(res)
      
      res = '我的名字是{0}{0}{0} 我的年齡是{1}{1}'.format('egon',18)
      print(res)
      

      ②打破位置限制,按照key=value傳值

      res = '我的名字是{name}我的年齡是{age}'.format(age=18,name='egon')
      print(res)
      

      ③填充特殊數量字元

      print('{x}=========='.format(x='開始執行'))
      print('{x:=<10}'.format(x='開始執行')) # 字串左對齊,不足10個的用=填充
      print('{x:=>10}'.format(x='開始執行')) # 字串右對齊,不足10個的用=填充
      print('{x:=^10}'.format(x='開始執行')) # 字串居中對齊,不足10個的用=填充
      

      ④精度與進位制(四捨五入)

      print('{salary:.3f}.format(sarlary=1235.12345)') #精確到小數點後三位
      
    • f:python3.5以後才推出

      ①直接輸出,{{}}代表輸出{}符號,類似%

      x = input('your name: ')
      y = input('your age: ')
      res = f'我的名字是{x},我的年齡是{y}'
      print(res)
      

      ②{}內的字串可以被當做表示式執行

      res = f'{10+3}'
      print(res)
      
      f'{print('aaa')}'
      

3.基本運算子

3.1算數運算子

print(10 + 3.1)
print(10 + 3)
print(10 / 3)  # 結果帶小數
print(10 // 3)  # 只保留整數部分
print(10 % 3)  # 只保留餘數
print(10 ** 3)  # 冪

3.2賦值運算子

3.2.1

=:變數的賦值

3.2.2增量賦值:

age = 18
age += 1 # age = age + 1
print(age)

age *= 3
age /= 3
age %= 3
age **= 3

3.2.3鏈式賦值

x = 10
y = x
z = y
z = y = x = 10
print(x, y, z)
print(id(x), id(y), id(z))

3.2.4交叉賦值

m = 10
n = 20
print(m, n)
# 交換值
# temp = m
# m = n
# n = temp
# print(m,n)

m, n = n, m
print(m, n)

3.2.5解壓賦值

salaries = [111,222,333,444,555]
把五個月的工資取出來分誒賦值給不同的變數名
mom0=salaries[0]
mom1=salaries[1]
mom2=salaries[2]
mom3=salaries[3]
mom4=salaries[4]

print(mom0)
print(mom1)
print(mom2)
print(mom3)
print(mom4)
mom0,mom1,mom2,mom3,mom4=salaries #對應的變數名少一個不行

引入*,可以幫助我們取兩頭的值,預設不用來取中間的值
取前三個值
x,y,z,*_=salaries=[111,222,333,444,555]
*會將沒有對應關係的值存成列表然後賦值給緊跟其後的那個變數名,此處變數名為為_

取後三個值
*_,x,y,z=salaries=[111,222,333,444,555]

解壓字典預設解壓出來的是key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z)

知識點:

1.簡單描述定義一個變數x=10,在記憶體中的棧區堆區的存放情況

2.簡述什麼是直接飲用、什麼是間接引用

3、簡單描述python直譯器垃圾回收機制的引用計數、標記清除、分代回收

4、寫一段程式

​ 接收使用者輸入的使用者名稱、年齡、性別,然後選取最優格式化字串的方式,按照如下格式輸出

​ 我的名字是:xxx

​ 我的年齡是:xxx

​ 我的性別是:xxx

5、算數運算子相關

​ 用示例演示

​ 取模運算

​ 增量運算

​ 交叉賦值

​ 鏈式賦值

​ 解壓賦值