10個Python技巧
阿新 • • 發佈:2020-09-15
pythonic
指的是具有python獨特風格,簡潔而又優雅的程式碼
- 變數交換(Swapping Variables)
# 通常的做法
a = 1
b = 2
tmp = a
a = b
b = tmp
# tmp是臨時變數
# 在Python中我們可以這樣做
a = 1
b = 2
a,b = b,a
- 字串格式化(String Formatting)
# 當字串較多時,通常拼接字串會很麻煩,如: name = "Ross" country = "China" age = "18" print("Hi,I'm" + name +"I'm form" + country + ",And I'm" + str(age) + ".") # 在Python中我們可以這樣做 # 1利用Python中的%語法來格式化字串 print("Hi,I'm %s. I'm from %s. And I'm %d."%(name,country,age)) # 這裡%s(string)會被替換成一個字串 %d(decimal)會被替換成一個十進位制數 # 2利用.format()方法和{}語法 print("Hi,I'm {}. I'm from {}. And I'm {}.".format(name,country,age)) # 另一個好處是可以使用引數的索引來重複替換 如: print("Hi,I'm {0}.Yes,I'm {0}.".format(name)) # 3最簡單的寫法Python3.6後支援的語法 f—string print(f"Hi,I'm {name}. I'm from {country}. And I'm {age}.") # 最大的好處是{}裡的內容支援表示式
- Yield語法(Yield Statemaent)
# 斐波那契數列 def fibonacci(n): a = 0 b = 1 nums = [] for _ in range(n): nums.append(a) a,b = b,a+b return nums for i in fibonacci(10): print(i) # 在Python中我們可以藉助yield語法替換append方法 def fibonacci(n): a = 0 b = 1 for _ in range(n): yield a a,b = b,a+b for i in fibonacci(10): print(i)、 # yield表示每當我們計算出一個元素 就立馬實時將這個元素送出去
- 列表解析式(List Comprehension)
# 這裡有一些水果名字,將它們都改成大寫
fruit = ["apple","pear","pineapple","arange","banana"]
# 在Python中我們可以這樣
fruit = [x.upper() for x in fruit]
# 也可以篩選列表中的元素
filtered_fruit = [x for x in fruit if x.startswitch("a")]
- Enumerate 函式(Enumerate Function)迴圈技巧
# 還是上面的例子
fruit = ["apple,"pear","pineapple","arange","banana"]
for i,x in emumerate(fruit):
print(i,x)
# 其中i代表索引值,x表示元素
6.1 反向遍歷(Looping Backwards)
# 我們可以先這樣實現
fruit = ["apple,"pear","pineapple","arange","banana"]
for i,x in emumerate(reverse(fruit)):
print(i,x)
6.2 按順序遍歷(Looping in Sorted Order)
# 如果我們希望輸出的元素是以字典順序
# 我們可以先這樣實現
fruit = ["apple,"pear","pineapple","arange","banana"]
for i,x in emumerate(sorted(fruit)):
print(i,x)
- 字典合併操作(Dictionary Merging)
# 下面是一般的字典合併
a = {"ross":"123456","xiaoming":"abc123"}
b = {"lilei":"111111","zhangsan":"12345678"}
c = {}
for k in a:
c[k] = a[k]
for k in b:
c[k] = b[k]
# 在python中我們可以
a = {"ross":"123456","xiaoming":"abc123"}
b = {"lilei":"111111","zhangsan":"12345678"}
c = {**a,**b}
# **叫做解包(Unpacking),將兩個字典直接填寫到這裡
- 三元運算子(Ternary Operator)
# 可以對if else語句簡化
if score > 60:
s = "pass"
else:
s = "fail"
# 在python中我們可以
s = "pass" if score > 60 else "fail"
- 序列解包(Sequence Unpacking)
# 提取姓和名
name = "San Zhang"
str_list = name.spilt()
first_name = str_list[0]
last_name = str_list[1]
# 在python中我們可以這樣
name = "San Zhang"
first_name , last_name = name.split()
- With語句(With Statement)
# with open("somefile.txt","r") as f"
s = read()