Python是一种通用的编程语言,因其可读性、面向对象的特性和强大的社区支持而广受欢迎。除了用于Web应用程序之外,Python还用于数据科学、人工智能、科学计算等各个领域。因此,如果您一直在考虑进入编程领域并寻找一种通用语言,Python可能为你。在本文中,我将分享一些高级Python概念,它们将帮助您在脚踏实地的同时取得成功。阅读本文无需成为经验丰富的Python程序员;它只会帮助您更好地理解语言并使您成为更好的开发人员。推导式推导式分为三种:列表推导式、字典推导式和集合推导式。如果要从现有的可迭代对象创建新的列表、字典或集合,请使用理解。下面的代码片段演示了这些用法#Createalistforcomprehensionnumbers=[1,2,3,-3,-2,-1]#Createanewlistmylistcontainingthesenumbers=[x*xforxinnumbers][1,4,9,9,4,1]#为这些数字的幂创建一个新字典mydict={x:pow(10,x)forxinnumbers}#output{1:10,2:100,3:1000,-3:0.001,-2:0.01,-1:0.1}#创建一组这些数字的绝对值myset={abs(x)forxinnumbers}#输出{1,2,3}这些推导具有相似的语法。以下是对不同形式的简要概述。值得注意的是,可以设置条件以确保保留所需元素列表推导:[exprforxiniterable]字典推导:{key_expr:value_exprforxiniterable}设置推导:{exprforxiniterable}可选条件:[exprforxiniterableifcondition]{key_expr:value_exprforxiniterableifcondition}{exprforxiniterableifcondition}异常处理异常是在程序执行过程中发生并导致程序中断的条件。它可能由于各种原因而发生。假设您正在构建一个除法程序并且分母包含0,从而导致ZeroDivisionError。导入不存在的库或访问不在列表索引中的元素是另外两个实例。Python带有大约30个内置异常。try和except块用于处理python中的异常。当我们需要同时处理多个异常时,我们可以使用多个except块。try块是要执行的指令。except块包含尝试失败时执行的代码。还有else和finally块。else块仅在try块成功执行时执行。不管前一个块的结果如何,finally块将始终执行。处理单个异常尝试:a=int(input("Enternumerator:")b=int(input("Enterdenominator:")c=a/bprint(c)exceptZeroDivisionErrorase:print(e,"please提供非零分母")处理多个异常importsystry:f=open('myfile.txt')s=f.readline()i=int(s.strip())exceptOSErroraserr:print("操作系统错误:{0}".format(err))除了ValueError:print("Couldnotconvertdatatoaninteger.")except:print("Unexpectederror:",sys.exc_info()[0])raisefinally:print("OperationSuccessfullyDone!!")(ExampleTakenFromOfficialPythonDocs)集合库Counter以一个可迭代对象作为输入并返回一个字典,其中键是可迭代对象的元素,值是它们各自出现的次数发生在原来的iterable中。从集合中导入计数器数据=[1,1,1,1,2,3,4,3,3,5,6,7,7]count=Counter(data)print(count)##Counter({1:4,3:3,7:2,2:1,4:1,5:1,6:1})nametuple生成可以使用名称访问元素内容的元组子类,命名元组赋予每个位置一个含义,提供可读性和自我记录。fromcollectionsimportnamedtupleDirection=namedtuple('Direction','N,S,E,W')dt=Direction(4,74,0,0)print(dt)#Direction(N=4,S=74,E=0,W=0)OrderedDict这是一个能记住键插入顺序的字典结构。最新版本的python中的词典已经包含此功能。fromcollectionsimportOrderedDictdict=OrderedDict()dictt['a']=5dictt['d']=2dictt['c']=1dictt['b']=3print(dictt)#OrderedDict([('a',5),('d',2),('c',1),('b',3)])defaultDict这是一个字典结构,当访问结构中不存在的键时会返回默认值,而不是抛出错误。fromcollectionsimportdefaultdictdictt=defaultdict(int)dictt['a']=2print(dictt['a'])##返回值print(dictt['b'])##返回默认值#2#0dequedouble侧队列可以从另一侧快速添加和推送对象。deque是一个双向链表,针对链表的连续数据结构的插入和删除进行了优化。它提供了可以在两端进行操作的序列,也就是说你可以在序列的两端进行增删操作。fromcollectionsimportdequed=deque('abc')d.append('d')print(d)#deque(['a','b','c','d'])#appendleft添加元素leftendd.appendleft('e')print(d)#deque(['e','a','b','c','d'])#clear清除所有元素d.clear()print(d)#deque([])还有一些常用的方法如pop、copy、count、extend、index、insert、popleft、remove、reverse、maxlen迭代工具Python的itertools模块提供了各种适用于迭代器的函数。product(iterable,iterable)两个可迭代对象的笛卡尔积。排列(可迭代)所有可能的排列,无需重复元素。combinations(iterable,n)可迭代对象中n个元素的所有可能组合,无需替换。combinations_with_replacement(iterable,n)可迭代的n个元素的所有可能组合和替换。accumulate(iterable)返回可迭代元素的累加和。groupby(iterable,key=FUNC)从可迭代对象中返回一个带有连续键和组的迭代器。装饰器装饰器是Python中修改函数和类行为的一种方式。它们允许您通过添加方法或更改参数来更改功能,或者通过添加属性来更改类。例如,如果你想在每次调用函数“my_function”时都记录下来,你可以这样写代码:__name__}with",args,kwargs)returnoriginal_func(*args,**kwargs)returnwrapper@logging_funcdefadd(a,b):returna+bresult=add(5,6)print(result)让我们来解释装饰器的例子上面-首先,我们有一个名为add的函数,它的工作是获取两个变量并返回它们的总和。现在,经过一段时间的研究,我们意识到我们需要将功能记录到同一个函数中。现在我们有两个选择,第一个是在同一个add函数中添加函数调用记录代码,或者我们可以使用装饰器来添加功能而无需显式更改函数。要使用装饰器,我们首先定义一个装饰器函数。函数original_func作为输入。然后,我们有另一个功能。它是一个带有*args,**kwargs函数参数的包装函数。有了这些,现在都定义为参数,我们可以在函数内部传递任意数量的参数。在包装函数的主体中,我们有日志函数的逻辑。当我们调用带有一些参数add(5,6)的函数add时,输出将是:生成器生成器是一个返回可迭代值序列的函数。与一次返回所有元素并消耗整个列表长度的内存的列表不同,生成器一个一个地生成项目。它包含至少一个yield语句。yield是python中的关键字,用于从函数返回值而不破坏其当前状态或对局部变量的引用。带有yield关键字的函数称为生成器。比如最经典的面试题斐波那契数列deffibon(limit):a,b=0,1whilea
