1. 程式人生 > >python學習入門4輸出語句與賦值語句 2018.8.17

python學習入門4輸出語句與賦值語句 2018.8.17

參照:python程式設計第三版
python programming:an introduction to computer science

第二章:編寫簡單程式

首先理解什麼是“”元語言“”
元語言:電腦科學家開發的複雜的符號表示法(類似於模板)
我們依靠這種模板符號來表示語句的語法

print語句

print(<expr>,<expr>,...,sep=' ',end='\n',file=sys.stdout)

expr == expression 表示式
sep == separation 間隔符
end 文字結束標記符
\n 換行符
file 輸出位置
sys == system
stdout == standard output 標準輸出

可以顯式地覆蓋預設值來改變引數

>>>print (1,1,11 1 1
>>>print(1,1,1,sep = '+',end = '.')
1+1+1.

例如可以讓print不列印到控制檯,而是文字檔案

filr=
但不可以這麼用,要先開啟檔案(關於這個的機制以後講,簡單說就是要先開啟檔案將其內容讀取到RAM,然後對RAM中的內容操作)

這裡寫圖片描述
這樣就行

要知道:print()函式實質呼叫了sys.stdout.write()並在結束時附了一個'\n'換行符

想要使用print()輸出到檔案中,還可以對sys.stdout賦值為一個檔案物件

f = open ('test.txt','w')
sys.stdout = f
print ('test')#會輸出到test.txt

但是要明確的是,我們有理由去了解這些用法來拓寬視野,至於是否應該在程式中使用,我目前認為是多數時候都是不應該的(目前準大一0基礎)

當不帶任何引數時:
print()將產生空行
這裡寫圖片描述

另外注意,在程式語言中,列印是一種跟隨游標的行為。
游標在哪,就在哪開始列印

print('1 + 1 =',end ='')
print(' 2')
#將在一行輸出
1 + 1 = 2

賦值語句

1.基本賦值語句:<variable> = <expr>


variable是識別符號,expr是表示式

賦值語句的語義是:右側的表示式被求值,然後產生的值與左側命名的變數相關聯
(關於求值,見於另一篇部落格:識別符號與表示式)

!!!注意,在python中 變數是於物件相關聯的,而不是與記憶體位置相關聯的。
值可以存放在記憶體中的任何位置,變數只是用於引用它們。
這有別於“”變數盒子的模型“”,當變數更改時,舊值被刪除,新值被寫入
記憶體地址屬於變數(在宣告中分配)這是C的特點
在python中一切皆物件,變數只負責引用,所以當變數更改時,變數指向新值,舊值會在程式空閒時被垃圾回收

2.賦值輸入

<variable> = input(<ptompt>)

prompt == 提示詞 接受一個字串表示式
input()返回字串
要得到數字可用eval(),該函式只接受字串輸入

<variable> = eval(input(<ptompt>))

eval == evaluate 求值
其作用類似於去掉引號

eval'ss'#這會顯示ss未定義,因為去掉了引號
eval'11'#返回數字11

但是注意貿然使用eval()是有很大風險的:
eval
我在input輸入中鍵入print(‘ss’),將會控制程式輸出ss,這稱為程式碼注入攻擊

為什麼直接用eval(‘print(‘ss’)’)不行呢,我也想知道

同時賦值

<var1>,<var2>,... = <expr1>,<expr2>,...

因為是同時賦值,所以不用管該語句執行過程中各變數值的變化,只需取執行前一刻的變數值賦值即可
好處是可以輕而易舉地完成變數間值的交換
而其他語言將必須引入第三變數

x,y = y,x
#等效於
z = x
x = y
y = z
這是python的優雅

你可以用類似程式碼在一次輸入中對兩個變數同時賦值:

score1,score2 = eval(input('Enter the scores separated by a comma: ')

賦字串值是可以這樣:

score1,score2 = input('Enter the scores separated by a comma: ').split(',')

對eval()的替換方法是直接指明要轉換到的資料型別,而不是直接去除引號