5.垃圾回收機制、互動、運算子、流程控制if判斷
阿新 • • 發佈:2020-10-28
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、算數運算子相關
用示例演示
取模運算
增量運算
交叉賦值
鏈式賦值
解壓賦值