Python是世界上最流行的编程语言(2022年4月的TIOBE指数)。它易于使用且用途广泛。除了用于构建神经网络外,还可以用来创建网页应用、桌面应用、游戏和运维脚本等各种程序。Python语言语法简洁易用,但是当你深入学习时,你会发现Python有很多高级用法,可以大大提高代码的可读性和运行效率。01索引和切片Python列表索引和切片是非常强大的功能,它们允许您在Python中获取列表中的任何元素。Python除了支持常见的正向索引外,还支持负向索引和切片。正索引a_list=[100,200,300,400,500,600]print(a_list[0])#output100.print(a_list[1])#output200.print(a_list[2])#output300.负索引a_list=[100,200,300,400,500,600]print(a_list[-1])#Output600.print(a_list[-3])#Output400.Slicing以下是列表切片的一些示例: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]02字符串对齐字符串格式化在命令行工具开发中非常重要,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)这个例子的输出是:##求助!###new_str='750'.rjust(6,'0')print(new_str)这个例子的输出是:00075003listcomprehension&dictionarycomprehensionPython2.0该版本引入的最重要的特性之一是列表理解。它提供了一种紧凑的语法,用于从列表中生成一系列值。它还可以应用于字典、集合和其他类型的集合。假设您要创建一个新列表,其中包含a_list中每个元素的平方。一种可能的实现方式如下:b_list=[]foriina_list:b_list.append(i*i)如果a_list包含元素[1,2,3],则结果这些语句是创建一个包含[1,4,9]的新列表并将此列表分配给变量b_list。在这种情况下,对应的列表推导如下:b_list=[i*iforiina_list]假设要将元组列表转换为字典,元组列表如下:vals_list=[('pi',3.14),('phi',1.618)]字典可以用下面的代码生成:my_dict={i[0]:i[1]foriinvals_list}注意在键值表达式中(i[0]:i[1])中使用冒号(:)。04可变长度参数列表Python最通用的特性之一是能够访问可变长度参数列表。使用此功能,您的函数可以处理任意数量的参数,就像内置打印函数一样。变长参数的特性也可以扩展到命名参数。deffunc_name([ordinary_args,]*args):statements这里的方括号表示*args前面可以有任意多个普通参数,这里表示为ordinary_args。这些参数是可选的。下面是示例代码:defmy_var_func(*args):print('Thenumberofargsis',len(args))foriteminargs:print(items)这个函数my_var_func可以接受任意长度的参数列表。>>>my_var_func(10,20,30,40)args个数为410203040变长参数列表也支持关键字参数,如下:defpr_named_vals(**kwargs):forkinkwargs:print(k,':',kwargs[k])以上函数遍历kwargs表示的字典参数,打印出key传入的参数(对应参数名)和对应的值。例如:>>>pr_named_vals(a=10,b=20,c=30)a:10b:20c:30args和kwargs可以组合使用,下面是一个例子。defpr_vals_2(*args,**kwargs):foriinargs:print(i)forkinkwargs:print(k,':',kwargs[k])pr_vals_2(1,2,3,-4,a=100,b=200)运行时,这个程序会打印如下:123-4a:100b:20005Linearalgebrawithnumpy线性代数在深度学习中很重要,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]例子:importnumpyasnpA=np.ones(5)B=np.arange(5)打印(A,B)[1.1.1.1.1.][01234]np.点(A,A)5.0np。dot(A,B)10.0np.dot(B,B)30二维矩阵之间的点积比较复杂。与数组之间的普通乘法一样,两个数组的形状必须兼容,但这只需要在一个维度上相等即可。\\下面是描述点积应用于二维数组的一般模式:(A,B)*(B,C)=>(A,C)考虑下面的2×3数组,然后组合一个3×2数组,它的点积是一个2x2数组。A=np.arange(6).reshape(2,3)B=np.arange(6).reshape(3,2)C=np.dot(A,B)打印(A,B,sep='\n\n')print('\n点积:\n',C)[[012][345]][[01][23][45]]点积:[[1013][2840]]
