Python 编辑注意点
?
?
文本編輯 Python:
絕對不能用Word和Windows自帶的記事本。
(1)Word保存的不是純文本文件
(2)記事本會自作聰明地在文件開始的地方加上幾個特殊字符(UTF-8 BOM),結果會導致程序運行出現莫名其妙的錯誤。
?
像.exe文件,直接運行 ?.py文件:
(1)在Windows下不能直接運行。 在MAC、Linux下可直接運行
(2)方法:
? ? ? step1:在.py文件的第一行加上一個特殊的注釋: ?#!/usr/bin/env python3
? ? ? step2:通過命令給hello.py以執行權限: ??$ chmod a+x hello.py
?
?
# ? ? ? ?: ? ?以#開頭的語句是注釋,注釋是給人看的,可以是任意內容,解釋器會忽略掉注釋。
:冒號: ?當語句以冒號:結尾時,縮進的語句視為代碼塊 ?。約定俗成:使用4個空格的縮進
Python程序是大小寫敏感的,如果寫錯了大小寫,程序會報錯
?
如果字符串內部既包含'又包含" 。則可以用?轉義字符\來標識(放置在 ' 或 ” ?之前)比如: ?'I\'m \"OK\"!' ??表示的字符串內容是 ?I'm "OK"! ?。
?
輸入多行內容時,可以?'''...'''的格式表示多行內容。 如在cmd窗口中輸入 print('''a 回車 ?則會出現... 示意繼續輸入。結束時,以輸入''' 結束。
?
python 是動態語言,變量本身類型不固定,可以反復賦值
?
在Python中,有兩種除法:
(1)一種除法是/ ?。/除法計算結果是浮點數,即使是兩個整數恰好整除,結果也是浮點數:?9 / 3 》3.0
(2)一種除法是//,稱為地板除,兩個整數的除法仍然是整數 :10 /?3 》3
?
Python 余數運算。 % 。可以得到兩個整數相除的余數:10 % 3 ?》1
?
字符串與編碼
len() :計算str包含多少個字符,可以用len()函數: ? ??len(b'ABC')?》 3
?
?
由于Python源代碼也是一個文本文件,所以,當你的源代碼中包含中文的時候,在保存源代碼時,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3 告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個注釋; # -*- coding: utf-8 -*- 告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。申明了UTF-8編碼并不意味著你的.py文件就是UTF-8編碼的,必須并且要確保文本編輯器正在使用UTF-8 without BOM編碼:(1)% 運算符: 是用來格式化字符串的 (2)常見占位符:
%d ? ?整數 ? ?: ??
? ? ? ? ? ??%d?普通的整數輸出;
? ? ? ? ? ? ?%2d整數輸出,整數的寬度是2位,若不足兩位,左邊補空格;
? ? ? ? ? ? ?%02d整數輸出,整數的寬度是2位,若不足兩位,左邊補0;
? ? ? ? ? ? ?%.2d?整數輸出,整數的有效數字是2位。
>>> '%2d-%02d' % (3, 1) ' 3-01'
%f ? ? 浮點數
%s ? 字符串
%x ? 十六進制整數
(3)字符串里面的%是一個普通字符怎么辦?這個時候就需要轉義,用%%來表示一個%:?'growth rate: %d %%' % 7 ? ? >>> ?'growth rate: 7 %'
?
?
函數
for x in ...循環:是把每個元素代入變量x,然后執行縮進塊的語句。?for a ?in list:
range()函數:range(5)生成的序列是從0開始小于5的整數
?
列表list (有序的集合) 可變
創建數組 ? ? ??classmates = ['Michael', 'Bob', 'Tracy']
len()函數可以獲得list元素的個數(如果一個list中一個元素也沒有,就是一個空的list,它的長度為0) ? ? ??>>> len(classmates)?
用索引來訪問list中每一個位置的元素,記得索引是從0開始的 ? ? ?>>> classmates[0]?'Michael'
用?-1做索引,直接獲取最后一個元素 ? ? ??>>> classmates[-1]
往list中追加元素到末尾 ??>>> classmates.append('Adam')
把元素插入到指定的位置,比如索引 號為1的位置: ??>>>?classmates.insert(1, 'Jack')
刪除list末尾的元素 ? ?>>> classmates.pop()
要刪除指定位置的元素,用pop(i)方法,其中i是索引位置 ? ?>>> classmates.pop(1)
要把某個元素替換成別的元素,可以直接賦值給對應的索引位置: ??>>> classmates[1] = 'Sarah'
list元素也可以是另一個list, ? ? ? ?>>> s = ['python', 'java', ['asp', 'php'], 'scheme'] ?。s[2]又是一個list。要拿到'php'可以寫p[1]或者s[2][1]
?
元組tuple ?(有序列表) ?不可變
?
tuple一旦初始化就不能修改
用括號()可以表示tuple ? ? ? ? ?>>> classmates = ('Michael', 'Bob', 'Tracy')
如果要定義一個空的tuple ? ??>>> t = ()
如果要定義一個空的tuple ? ??>>> t = (1) ? ? ? ?>>> t = (1,)
tuple元素,指向永遠不變 。但元素中如果有list, 則該list 的值是可變的。
?
例:打印數組信息
#!/user/bin/env python3 # -*- coding: utf-8 -*-L = [['Apple', 'Google', 'Microsoft'],['Java', 'Python', 'Ruby', 'PHP'],['Adam', 'Bart', 'Lisa'] ] print('輸出1:%s, 輸出2: %s ,輸出3: %s' %(L[0][0],L[1][1],L[2][2]))
?
條件判斷
if 條件:do else: do
if ?else的判斷是很粗略的,完全可以用elif做更細致的判斷。
elif是else if的縮寫,完全可以有多個elif,所以if語句的完整形式就是:
if <條件判斷1>:<執行1> elif <條件判斷2>:<執行2> elif <條件判斷3>:<執行3> else:<執行4>
if語句執行有個特點,它是從上往下判斷,如果在某個判斷上是True,把該判斷對應的語句執行后,就忽略掉剩下的elif和else。即若第一個條件判斷成功,就不會判斷剩下的條件。
?
if判斷條件還可以簡寫,比如寫:
if x:print('True')只要x是非零數值、非空字符串、非空list等,就判斷為True,輸出print。 ?否則為False。
?
循環(for .in . ?\ ?while)
for x in ...循環:把每個元素代入變量x,然后執行縮進塊的語句
while循環:只要條件滿足,就不斷循環,條件不滿足時退出循環。
?
?
break? :作用是在循環過程中直接退出循環。 提前結束循環。
continue:?在循環過程中,也可以通過continue語句,跳過本輪循環,直接開始下一次循環。
ps:如果程序陷入“死循環”,可以Ctrl+C退出程序,或者強制結束Python進程。
?
字典 dict (全稱:dictionary/map)
把數據放入dict的方法:
(1)初始化時指定: ex: d={'aa': 11, 'bb': 22, 'cb': 33}
(2)通過key放入: d['dd']=44
?
?
要避免key不存在的錯誤:
(1)通過in判斷key是否存在:'dd' in d >>存在則輸出true ,否則false
(2)通過dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value
d.get('ddddd') #key不存在,則不輸出結果 。key存在,則輸出value值。
d.get('dddd',-1) # 同上
?
一個key只能對應一個value.多次對一個key放入value,后面的值會把前面的值沖掉
刪除key:用pop(key)方法刪除key,對應的value也會從dict中刪除 d.pop('dd')
key必須是不可變對象。因為dict根據key來計算value的存儲位置。這種算法稱為哈希算法(Hash)。
?
set集合
set 是一組key的集合,但不存儲value。(set的key不能重復。)
s=set([1,2,3]) 創建set(提供list作為輸入集合)
s.add(dd) 可以添加元素
s.remove(dd) 可以刪除元素
?
set中重復的元素會被自動過濾。
set可以看成數學意義上的無序和無重復元素的集合,兩個set可以做數交集(s1 & s2)、并集(s1 | s2)等操作
set和dict的唯一區別僅在于沒有存儲對應的value
?
函數
定義函數: ?使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用return語句返回。
?
def my_abs(x):if not isinstance(x, (int, float)):raise TypeError('bad operand type') #如果傳入錯誤的參數類型,函數就可以拋出一個錯誤:bad operand typeif x >= 0:return xelse:return -x?
?
?
?
?
位置參數
對于power(x,n)函數,參數x、n都是位置參數。調用函數時,傳入的兩個值按照位置順序依次賦給參數x和n
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
?
(2)默認參數
默認參數可以簡化函數的調用。降低調用函數的難度:
a.必選參數在前,默認參數在后,否則Python的解釋器會報錯
b.函數有多個參數時,把變化大的參數放前面,變化小的參數放后面。變化小的參數就可以作為默認參數 (注:當值與默認參數不符時,再進行指定)
c.默認參數一定要用不可變對象,如果是可變對象,程序運行時會有邏輯錯誤!
?
(3)可變參數 *args
可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝為一個tuple。
定義可變參數有2種方案:
方案一: ? ?將參數作為一個list 或者 tuple傳進來 。定義如下,與普通函數無差別,但是調用的時候,需要組裝lst
方案二: ? ?在參數前面加了一個*號。則調用時,可以傳入任意個參數。 ex: calc(1, 2) >>> 5
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum?
(4)關鍵字參數 **kw
關鍵字參數允許你傳入0個或任意個含參數名的參數,這些參數在函數內部自動組裝為一個dict。 可以擴展函數的功能。
定義: def person(name, age, **kw):print('name:', name, 'age:', age, 'other:', kw)?
調用: >>> person('Michael', 30) #只傳必選參數 name: Michael age: 30 other: {}>>> person('Bob', 35, city='Beijing') #傳入1個關鍵字參數 name: Bob age: 35 other: {'city': 'Beijing'} >>> person('Adam', 45, gender='M', job='Engineer') #傳入2個關鍵字參數 name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
(5)命名關鍵字參數
限制調用者可以傳入的參數名,同時可以提供默認值。
和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符*,*后面的參數被視為命名關鍵字參數 ?(若沒有* ,則定義的是位置參數)
def person(name, age, *, city, job):print(name, age, city, job)(99)參數組合
參數組合使用時,參數的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。
def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)?
?
遞歸函數
所有的遞歸函數都可以寫成循環的方式。但循環的邏輯不如遞歸清晰。
遞歸函數 ?fact(n) = n! =?1 *?2 *?3 *?... * (n-1) * n = (n-1)! * n = fact(n-1) * n
# fact(n)用遞歸的方式寫出來 def fact(n):if n==1:return 1return n * fact(n - 1)?
?
漢諾塔?的移動也可以看做是遞歸函數。思路:
對柱子編號為a, b, c,將所有圓盤從a移到c可以描述為:?
- 如果a只有一個圓盤,可以直接移動到c;?
- 如果a有N個圓盤,可以看成a有1個圓盤(底盤) + (N-1)個圓盤,首先需要把 (N-1) 個圓盤移動到 b,然后,將 a的最后一個圓盤移動到c,再將b的(N-1)個圓盤移動到c。 #編寫一個函數,給定輸入 n, a, b, c,打印出移動的步驟 def move(n, a, b, c):if n ==1:print a, '-->', celse:move(n-1, a, c, b)move(1, a, b, c) # 或 print a, '-->', cmove(n-1, b, a, c)# 調用時,輸入如 move(2,'A','B','C')。可參看結果
?
轉載于:https://www.cnblogs.com/ericazy/p/7229536.html
總結
以上是生活随笔為你收集整理的Python 编辑注意点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Unity中坐标系的种类
- 下一篇: python模块详解 time与date