Python中的省略号Python省略号是自然语言中常用的三点序列。但你可能不知道的是,这在Python中也是一个有效的对象:1.>>>...2.Ellipsis在NumPy中主要用于矩阵切片操作。但是,您可以在尚未实现的函数中使用它来代替占位符,而不是通常的方式:1.defmy_awesome_func():2....ThisisvalidPythoncode2.Datacategorysinceversion3.7,Python自带数据类。与常规类或其他替代方案相比,它们具有一些优势:返回多个值或字典;数据类需要最少的代码;比较数据类别的能力;能够使用__repr__打印数据类以进行调试;减少由于类型提示数据类要求而导致错误的机会。示例数据类:1.fromdataclassesimportdataclass3.@dataclass4.classCard:5.rank:str6.suit:str8.card=Card("Q","hearts")10.print(card==card)11.#True13.print(card.rank)14.#'Q'15.print(card)16.Card(rank='Q',suit='hearts')Python最早的禅宗之一Pythonpeps是PEP-20。这里列出了19篇名为“Python之禅”的Python编程论文。这些规则可以追溯到2004年,并基于PEP-8。这个彩蛋在Python中存在了很长时间,并制定了一套规则:所以只要你有PythonREPL,你就可以在屏幕上看到这些规则。4.匿名函数有时,函数的命名并不值得特别注意。例如,如果您确定只使用一次。对于这种情况,Python建议使用匿名函数,也称为lambda函数。Lambda函数可以赋值给变量,创建一种简洁的函数定义方式:1.>>>add_one=lambdax:x+12.>>>add_one(3)3.4当您需要使用函数作为参数时,它变得更有趣。在这种情况下,它通常只使用一次。如您所知,map将函数应用于可迭代对象的所有元素。我们可以在调用map时使用lambda:1.>>>numbers=[1,2,3,4]2.>>>times_two=map(lambdax:x*2,numbers)3.>>>list(times_two)4.[2,4,6,8]5.>>>这段代码非常通用。例如,当您要对迭代对象的每个元素应用操作时。在这种情况下,将map()与lambda函数结合使用既简洁又高效。5.列表理解整体理解可以代替填充列表的非审美循环。语法如下:[expressionforiteminlistifconditional]用数字序列填充列表的最简单示例:2.mylist=[iforiinrange(10)]3.print(mylist)4.#[0,1,2,3,4,5,6,7,8,9]因为你可以在这里使用表达式,所以你可以使用数学:1.squares=[x**2forxinrange(10)]2.print(squares)3.#[0,1,4,9,16,25,36,49,64,81]外部函数调用:1.defsome_function(a):2.return(a+5)/24.my_formula=[some_function(i)foriinrange(10)]5.print(my_formula)6.#[2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0]最后,您可以使用“if”来过滤列表。在这种情况下,只会保存那些能被2整除的值:1.filtered=[iforiinrange(20)ifi%2==0]2.print(filtered)3.#[0,2,4,6,8,10,12,14,16,18]**很多人学python不知道从何入手。很多人学习python,掌握了基本语法后,却不知道去哪里找案例入门。很多已经做过案例的人不知道如何学习更高级的知识。所以针对这三类人,我会为大家提供一个很好的学习平台,免费的视频教程,电子书,以及课程的源码!QQ群:721195303**6.这个代入变量的小技巧可以让你少写几行代码:1.a=12.b=23.a,b=b,a4.print(a)5.#26.print(b)7.#17.格式化命名字符串这不是经常使用,但是如果数据已经在字典中,下面的技巧对于格式化命名字符串很有用:你甚至可以使用locals()函数,但在最新版本的Python中,您必须像这样访问f字符串:8.嵌套列表推导还记得列表推导的基本语法吗?[expressionforiteminlistifconditional]如果expression可以是任何有效的Python表达式,它也可以是另一个列表理解。这在您需要创建矩阵时很有用:1.>>>[[jforjinrange(3)]foriinrange(4)]2.[[0,1,2],[0,1,2],[0,1,2],[0,1,2]]或者,如果你想“展平”之前的矩阵:1.>>>[value2.forsublistinm3.forvalueinsublist]4.[0,1,2,0,1,2,0,1,2,0,1,2]循环的第一部分遍历矩阵m,第二部分遍历每个矩阵的元素向量。9.必填参数强制一个参数,在它前面放一个星号,强制所有参数成为关键字:1.>>>deff(*,a,b):2....print(a,b)3....4.>>>f(1,2)5.Traceback(最近调用最后):6.文件“”,第1行,在7.TypeError:f()takes0positional8.argumentsbut2weregiven9.>>>f(a=1,b=2)10.1211.>>>10.在REPL中使用下划线您可以在中使用下划线运算符来获取PythonREPL中最后一个表达式的结果,例如,在PythonREPL中它看起来像这样:1.>>>3*32.93.>>>_+34.12这个技巧也适用在IPython外壳中。11.检查所需的Python版本为了防止用户运行不兼容版本的脚本,检查代码中的当前Python版本是值得的。做一个简单的测试:1.ifnotsys.version_info>(2,7):2.#斥责你的用户运行了10年3.#pythonversion4.elifnotsys.version_info>=(3,5):5.#请告诉您的用户他需要升级6.#因为您使用的是3.5功能12.装饰函数装饰器是围绕函数的包装器,它以某种方式改变其行为。装饰器有几个用例,您可能已经在使用像Flask这样的框架时使用过它们。让我们创建我们自己的装饰器:1.defprint_argument(func):2.defwrapper(the_number):3.print("Argumentfor",4.func.__name__,5."is",the_number)6.returnfunc(the_number)7.returnwrapper8.@print_argument9.defadd_one(x):10.returnx+111.print(add_one(1))在print_argument内部,我们定义了包装函数。它打印出被调用函数的参数和名称,执行实际函数,并返回其结果,就好像该函数已被“正常”调用一样。使用@print_argument,我们将装饰器应用于函数。装饰器也可以重新用于其他功能。让我们创建我们自己的装饰器:1.add_one的参数是12.213.返回多个值Python中的函数可以返回多个变量,而无需使用字典、列表或类。它是这样的:1.defget_user(id):2.#从数据库中获取用户3.#....4.returnname,birthdate6.name,birthdate=get_user(4)这是返回元组的地方.您可能已经写了一个同样的效果的回报(姓名,生日)。对于有限数量的返回值,这很好。但是任何超过3个值的都得放在(data)类中。14.合并字典从Python3.5开始,合并字典变得更加容易。1.dict1={'a':1,'b':2}2.dict2={'b':3,'c':4}3.merged={**dict1,**dict2}5.打印(合并)6.#{'a':1,'b':3,'c':4}8.#Python>=3.9only9.merged=dict1|dict211.print(merged)12.#{'a':1,'b':3,'c':4}如果有重复的key,会在第一个字典中覆盖。15、切片列表切片语法如下:2、`a[start:stop:step]`start、stop、step可选。它们有默认值,不填参数就会被激活:0为启动;列表末尾停止;1步。以下是一些示例:1.#我们可以轻松地从列表中创建一个新列表2.#列表的前两个元素:3.first_two=[1,2,3,4,5][0:2]4.print(first_two)5.#[1,2]7.#如果我们使用步长值2,8.#我们可以跳过第二个数字9.#像这样:10.steps=[1,2,3,4,5][0:5:2]11.print(steps)12.#[1,3,5]14.#这也适用于字符串。在Python中,15.#你可以把一个字符串当作一个列表16.#letters:17.mystring="abcdefdnnimt"[::2]18.print(mystring)19.#'acedit'16.内存使用使用sys.getsizeof()你可以检查一个对象的内存使用情况:1.importsys3.mylist=range(0,10000)4.print(sys.getsizeof(mylist))5.#48Thehugelistis只有48个字节,因为范围函数返回的行为类似于列表。在内存方面,范围比使用实际的数字列表更有效。1.importsys3.myreallist=[xforxinrange(0,10000)]4.print(sys.getsizeof(myreallist))5.#8763217、使用and*unpack函数参数有些函数需要长列表参数.应该避免这种情况(例如使用数据类),尽管它并不总是由您决定。另一种选择是创建一个带有命名参数的字典并将其传递给函数。这将使您的代码更具可读性。您可以使用**前缀解压字典:1.>>>deff(a,b):2....print(a,b)3....4.>>>args={"a":1,"b":2}5.>>>f(**args)6.12类似地,您可以使用*解压数组并将其内容作为参数传递给函数:1.>>>deff(a,b,c):2....print(a,b,c)3....4.>>>l=[1,2,3]5.>>>f(*l)6.12318.Line-Title如果你想快速获得一个漂亮的标题:1.mystring="10awesomepythontricks"2.print(mystring.title())3.'10AwesomePythonTricks'19.将字符串拆分为列表您可以将字符串拆分为字符串列表。在这种情况下,拆分发生在空格字符处:1.mystring="Thequickbrownfox"2.mylist=mystring.split('')3.print(mylist)4.#['The','quick','brown','fox']您不需要传递任何参数来按空格拆分-使用mystring.split()。Split还有第二个参数maxsplit,它决定了最大分割数。默认情况下它是-1(无限制)。下面是一个示例,将拆分限制为1:1.>>>mystring.split('',1)2.['The','quickbrownfox']20.从字符串列表创建一个字符串创建一个字符串从列表中取出并在每个单词之间放置空格:1.mylist=['The','quick','brown','fox']2.mystring="".join(mylist)3.print(mystring)4.#'Thequickbrownfox'归结为这样一个事实,即String.join()函数不仅可以连接列表,还可以连接任何可迭代对象。将它放在一个字符串中可以防止在多个地方实现相同的功能。21.查询JSONJMESpath是一种JSON查询语言,允许您从JSON文档或字典中检索所需的数据。该库可用于Python和其他语言,从而扩展了它的功能。下面是一些通用介绍的代码示例:1.>>>importjmespath2.>>>persons={3...."persons":[4....{"name":"erik","age":38},5....{"name":"john","age":45},6....{"name":"rob","age":14}7....]8....}9.>>>jmespath.search('persons[*].age',persons)10.[38,45,14]22.反转字符串和列表您可以使用切片符号来反转a字符串或列表。如果步长值为负,交换元素:1.revstring="abcdefg"[::-1]2.print(revstring)3.#'gfedcba'5.revarray=[1,2,3,4,5][::-1]6.print(revarray)7.#[5,4,3,2,1]23.从列表或字符串中获取唯一项通过使用set()函数创建集合,您可以getfrom获取列表或对象中的所有唯一元素:1.mylist=[1,1,2,3,4,5,5,5,6,6]2.print(set(mylist))3.#{1,2,3,4,5,6}5.#因为一个字符串可以被当作一个6.#字母列表,你也可以得到7.#字符串中的唯一字母这样:8.print(set("aaabbbcccdddeeeffff"))9.#{'a','b','c','d','e','f'}24.有效的字典值可以放任何东西字典-不限于数字或字符串。您可以将列表放入字典并访问嵌套值:1.>>>a={'sub_dict':{'b':True},'mylist':[100,200,300]}2.>>>>a['sub_dict']['b']3.True4.>>>a['mylist'][0]5.10025.三元条件赋值运算符这是为了让代码更简洁,保持可读性另一种性爱方式:[on_true]if[expression]else[on_false]下面是一个例子:x="Success!"如果(y==2)否则“失败!”26.使用sets库中的Counter对列表中的条目进行计数可以得到列表中所有唯一项的字典:1.fromcollectionsimportCounter3.mylist=[1,1,2,3,4,5,5,5,6,6]4.c=Counter(mylist)5.print(c)6.#Counter({1:2,2:1,3:1,4:1,5:3,6:2})8.#它也适用于字符串:9.print(Counter("aaaaabbbbbccccc"))10.#Counter({'a':5,'b':5,'c':5})27.比较运算符的链接使您的代码更具可读性1.x=103.#而不是:4.ifx>5andx<15:5.print("Yes")6.#yes8.#你也可以这样写:9.if5>>{x:x**2forxin(2,4,6)}2.{2:4,4:16,6:36}我们在中定义键和值表达方式。集合理解语法与列表理解没有太大区别。我们只使用大括号而不是方括号:{foriteminlistif}示例:1.>>>{sforsinrange(1,5)ifs%2}2.{1,3}这里还是要推荐一下我自己建的Python学习群:721195303,群里大家都在学习Python,如果你想学习或者正在学习Python,欢迎加入,大家都是软件开发党,不定期分享干货(仅与Python软件开发相关),包括本人整理的最新Python进阶资料和2021年零基础教学,欢迎进阶有兴趣的朋友加入Python!