Python是世界上最流行的編程語言(TIOBE Index for April 2022),它易于上手且多才多藝,除了用于神經網絡的構建外, 還能用來創建Web應用、桌面應用、遊戲和運維腳本等多種多樣的程序。
Python語言語法簡潔,易于上手, 但當你深入研究時, 會發現Python有很多高級用法,這些高級用法可以大幅度提高代碼的可讀性和運行效率。
1.索引和切片Python列表的索引和切片是非常強大的功能, 它們可以讓你在Python中獲取列表中的任意元素。除了支持常見的正索引外, Python還支持負索引和切片。
正索引
a_list = [100, 200, 300, 400, 500, 600]
print(a_list[0]) # 輸出 100.
print(a_list[1]) # 輸出 200.
print(a_list[2]) # 輸出 300.
負索引
a_list = [100, 200, 300, 400, 500, 600]
print(a_list[-1]) # 輸出 600.
print(a_list[-3]) # 輸出 400.
切片
以下是列表切片的一些示例:
a_list = [1, 2, 5, 10, 20, 30]
b_list = a_list[1:3] # 生成 [2, 5]
c_list = a_list[4:] # 生成 [20, 30]
d_list = a_list[-4:-1] # 生成 [5, 10, 20]
e_list = a_list[-1:] # 生成 [30]
字符串格式化在命令行工具開發中非常重要, str類包含基礎的,用于文本對齊的方法:左對齊,右對齊或居中對齊。
str.ljust(width [, fillchar]) # 左對齊
str.rjust(width [, fillchar]) # 右對齊
str.center(width [, fillchar]) # 中間對齊
digit_str.zfill(width) # 用“0”填充
下面是一些例子:
new_str = 'Help!'.center(10, '#')
print(new_str)
該例的輸出為:
##Help!###
new_str = '750'.rjust(6, '0')
print(new_str)
此例的輸出為:
000750
Python 2.0版本引入的最重要的功能之一就是列表推導式。它提供了一種從列表中生成一系列值的緊湊語法。它也可以應用于字典,集合(set)和其他類型的集合。
假設你要創建一個包含a_list中每個元素的平方的新列表,一種可能的實現方式如下:
b_list = [ ]
for i in a_list:
b_list.append(i * i)
如果a_list包含元素[1,2,3],則這些語句的結果是創建一個包含[1,4,9]的新列表,并将此列表分配給變量b_list。在這種情況下,相應的列表推導式如下所示:
b_list = [i * i for i in a_list]
假設想講一個元組列表轉換為字典,元組列表如下:
vals_list = [ ('pi', 3.14), ('phi', 1.618) ]
字典可以用下面的代碼生成:
my_dict = { i[0]: i[1] for i in vals_list }
注意在鍵值表達式(i[0]:i[1])中冒号(:)的使用。
4.可變長參數列表Python最通用的功能之一就是能夠訪問可變長度參數的列表。借助此功能,你的函數可以處理任意數量的參數,就像内置的print函數一樣。可變長參數的特性也可以擴展到命名參數。
def func_name([ordinary_args,] *args):
statements
這裡的中括号表示*args前面可以有任意數量的普通參數,在此表示為ordinary_args。此類參數是可選的。下面是示例代碼:
def my_var_func(*args):
print('The number of args is', len(args))
for item in args:
print(items)
此函數my_var_func可接受任意長度的參數列表。
>>> my_var_func(10, 20, 30, 40)
The number of args is 4
10
20
30
40
可變長參數列表還支持關鍵字參數,如下所示:
def pr_named_vals(**kwargs):
for k in kwargs:
print(k, ':', kwargs[k])
上面的函數遍曆了kwargs表示的字典參數,打印出傳入參數的鍵(對應于參數名稱)和對應的值。
For example:
>>> pr_named_vals(a=10, b=20, c=30)
a : 10
b : 20
c : 30
args 和 kwargs可以組合使用,下面是一個例子。
def pr_vals_2(*args, **kwargs):
for i in args:
print(i)
for k in kwargs:
print(k, ':', kwargs[k])
pr_vals_2(1, 2, 3, -4, a=100, b=200)
運行時,此程序将打印以下内容:
1
2
3
-4
a : 100
b : 200
線性代數運算在深度學習中非常重要,numpy庫為Python提供了高效的線性代數運算模塊。
numpy的線性代數模塊非常完備,以計算點積為例進行介紹。
使用numpy時,可以使用點積函數dot計算點積。
numpy.dot(A, B, out=None)
A和B是要進行點積運算的兩個數組;out參數(如果已指定)是用于存儲結果的正确形狀的數組,“正确形狀”取決于A和B的形狀。
兩個一維數組的點積很簡單。數組的長度必須相同。點積計算是将A中的每個元素與其B中的對應元素相乘,然後對這些乘積求和,得出一個标量值。
D. P. = A[0]*B[0] A[1]*B[1] ... A[N-1] * B[N-1]例子:
import numpy as np
A = np.ones(5)
B = np.arange(5)
print(A, B)
[1. 1. 1. 1. 1.] [0 1 2 3 4]
np.dot(A, A)
5.0
np.dot(A, B)
10.0
np.dot(B, B)
30
二維矩陣之間的點積比較複雜。與數組之間的普通乘法一樣,兩個數組的形狀必須兼容,但這隻需要在其中一個維度上相等即可。下面是描述點積應用到二維數組通用模式:
(A, B) * (B, C) => (A, C)
思考下面的2×3數組,再結合一個3×2數組,其點積是2×2數組。
A = np.arange(6).reshape(2,3)
B = np.arange(6).reshape(3,2)
C = np.dot(A, B)
print(A, B, sep='\n\n')
print('\nDot product:\n', C)
[[0 1 2]
[3 4 5]]
[[0 1]
[2 3]
[4 5]]
Dot product:
[[10 13]
[28 40]]
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!