范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

你应该知道的9个高级Python概念

  Python 是一种通用编程语言,因其可读性、面向对象的特性和强大的社区支持而广受欢迎。除了用于 Web 应用程序之外,Python 还用于数据科学、人工智能、科学计算等各个领域。
  因此,如果你一直在考虑进入编程领域并寻找一种通用语言,那么 Python 可能适合你。在本文中将分享一些高级 Python 概念,这些概念将帮助您在扎根的同时取得成功。阅读本文可以不必是经验丰富的 Python 程序员;它只会帮助你更好地理解语言并使你成为更好的Python开发人员。 推导式
  推导式分为三种类型:列表推导、字典推导和集合推导。如果您想从现有的可迭代对象中创建新的列表、字典或集合,请使用推导式。以下代码片段展示了这些用法 # 创建一个用于推导式的列表 numbers = [1, 2, 3, -3, -2, -1] # 创建一个包含这些数字的方格的新列表 mylist = [x*x for x in numbers][1, 4, 9, 9, 4, 1] # 为这些数字的幂创建一个新字典 mydict = {x: pow(10, x) for x in numbers}  # 输出 {1: 10, 2: 100, 3: 1000, -3: 0.001, -2: 0.01, -1: 0.1} # 创建一组这些数字的绝对值 myset = {abs(x) for x in numbers}  # 输出 {1, 2, 3}
  这些推导具有相似的语法。以下是对不同形式的简要概述。值得注意的是可以设置条件以确保保留所需的元素 列表推导: [expr for x in iterable] 字典推导: {key_expr: value_expr for x in iterable} 集合推导: {expr for x in iterable} 可选条件: [expr for x in iterable if condition]  {key_expr: value_expr for x in iterable if condition}  {expr for x in iterable if condition}异常处理
  异常是在程序执行期间出现并导致程序中断的情况。它可能由各种原因而发生。假设正在构建一个除法程序,并且分母包含 0,从而导致 ZeroDivisionError。导入不存在的库或访问不在列表索引中的元素是另外两个实例。Python 带有大约 30 个内置异常。
  try  和 except  块用于处理python中的异常。 except  当我们需要同时处理多个异常时,我们可以使用多个块。
  try 块是要执行的指令。 except  块包含执行 try  失败时执行的代码。还有 else  和 finally  块。 else  块仅在 try  成功执行块时执行。 finally  无论前一个块的结果如何, finally  块将始终执行。 处理单个异常 try:     a = int(input("Enter numerator:")     b = int(input("Enter denominator:")     c = a / b     print(c) except ZeroDivisionError as e:     print(e, " please provide a non zero denominator") 处理多个异常 import sys try:    f = open("myfile.txt")     s = f.readline()    i = int(s.strip()) except OSError as err:    print("OS error: {0}".format(err)) except ValueError:    print("Could not convert data to an integer.") except:    print("Unexpected error:", sys.exc_info()[0])    raise finally:    print("Operation Successfully Done!!")(Example Taken From Official Python Docs)
  集合库
  Counter
  将可迭代对象作为输入并返回一个字典,其中键是可迭代元素,值是它们各自在原始可迭代对象中出现的次数。 from collections import Counter data = [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
  生成可以使用名字来访问元素内容的tuple子类,命名元组赋予每个位置一个含义,提供可读性和自文档性。 from collections import namedtuple Direction = 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 中字典已经包含了这个特性。 from collections import OrderedDict dictt = OrderedDict() dictt["a"] = 5 dictt["d"] = 2 dictt["c"] = 1 dictt["b"] = 3 print(dictt)  # OrderedDict([("a", 5), ("d", 2), ("c", 1), ("b", 3)])defaultDict
  这是一个字典结构,当访问结构中不存在的键时将返回默认值,而不是引发错误。 from collections import defaultdict  dictt = defaultdict(int)  dictt["a"] = 2  print(dictt["a"]) ##返回值 print(dictt["b"]) ##返回默认值  # 2  # 0deque
  双端队列,可以快速的从另外一侧追加和推出对象,deque是一个双向链表,针对list连续的数据结构插入和删除进行优化。它提供了两端都可以操作的序列,这表示在序列的前后你都可以执行添加或删除操作。 from collections import deque d = deque("abc")   d.append("d")  print(d) # deque(["a", "b", "c", "d"])  # appendleft 添加元素到左端 d.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 it ertools 模块提供了适用于迭代器的各种函数。 product(iterable,iterable)两个迭代的笛卡尔积 permutation(iterable)没有重复元素的所有可能排列combinations(iterable,n)来自可迭代的 n 个元素的所有可能组合,无需替换combinations_with_replacement(iterable,n)来自可迭代的 n 个元素的所有可能组合与替换accumulate(iterable)返回可迭代的元素的累积和groupby(iterable, key=FUNC)从可迭代对象中返回具有连续键和组的迭代器 装饰器
  装饰器是 Python 中修改函数和类行为的一种方式。它们允许您通过添加方法或更改参数来更改功能,或通过添加属性来更改类。装饰器函数 @  在函数名之前有一个,具体我有文章详细说明了装饰器感兴趣可以看一下: Python—编写装饰器的最佳实践
  例如,如果想在每次调用"my_function"函数时记录日志,可以这样编写代码: def logging_func(original_func):     def wrapper(*args, **kwargs):         print(f"Called {original_func.__name__} with", args, kwargs)         return original_func(*args, **kwargs)     return wrapper @logging_func def add(a, b):     return a + b result = add(5, 6) print(result)
  让我们解释上面的装饰器的例子——首先,我们有一个函数名 add  ,它的工作是获取两个变量并返回它们的总和。现在经过一段时间的工作,我们意识到需要将功能记录到相同的函数中。现在我们有两个选择,第一个是在同一个 add  函数中添加函数调用日志代码,或者我们可以使用装饰器添加功能而不显式更改函数。为了使用装饰器,我们首先定义了一个装饰器函数。该函数 original_func  作为输入。然后,我们有另一个功能。它是一个具有 *args, **kwargs  函数参数的包装函数。有了这些,现在都定义为参数,我们可以在函数内传递任意数量的参数。在包装函数的主体中,我们有日志功能的逻辑。当我们 add  使用一些参数调用函数时 add(5,6)  ,输出将是:
  生成器
  生成器是一个返回可迭代值序列的函数。与一次返回所有元素并消耗整个列表长度的内存的列表不同,生成器会一个一个地生成项目。它至少包含一个 yield  声明。 yield  是python中的一个关键字,用于从函数返回值而不破坏其当前状态或对局部变量的引用。带有 yield  关键字的函数称为生成器,比如最经典的面试题斐波那契数列 def fibon(limit):   a,b = 0,1   while a < limit:       yield a       a, b = b, a + bfor x in fibon(10):    print (x)魔术方法
  Magic方法, __  方法名前后有两个下划线。在某个动作上,这些方法直接从类中调用。当使用 *  a 符号将两个数字相乘时,将 __mul__  调用内部过程。 num =  5 num*6 >> 30 num.__mul__(6) >>30
  通常,这些方法用于重载预定义的运算符。例如,数字运算符 +,-,*,/  必须在数字对象周围使用,但 +  也可以用于连接两个字符串。因此,我们可能会争辩说, +  操作符在执行字符串连接消耗的内存大。 5+6 >>11 "python"+"programming" >> "pythonprogramming"哈希性
  在学习 Python 字典时,我们了解到键必须是可散列的。可哈希是什么意思?Hashable 基本上表示一个 Python 对象可以被散列,也就是散列的行为。下图描述了散列的工作流程。
  散列是使用散列函数(也称为散列器)(在图中称为散列)将 Python 对象(在图中称为键)转换为数字散列值的过程。使用内置的 hash() 方法来获取 Python 对象的哈希值是一种判断它是否存在的简单方法。如果对象不可散列,Python 将抛出 TypeError 异常。 # Get an string object’s hash value hash("This is me") 5361907397716593195   # Get a tuple object’s hash value hash((1,2)) -3550055125485641917   # Get a list object’s hash value hash([1, 2, 3]) Traceback (most recent call last):  File "", line 1, in  TypeError: unhashable type: ‘list’   # Get a dict object’s hash value hash({"a": 1, "b": 2}) Traceback (most recent call last):  File "", line 1, in  TypeError: unhashable type: ‘dict’
  特别是散列需要时间,并且比构造列表和元组要慢。那么,为什么我们首先要费心使用散列创建字典呢?在类似的问题上,你可能听说过设置项也必须是可散列的。字典和集合都需要在底层创建哈希表。以下代码片段演示了特定对象的哈希性如何影响它们作为字典键的适用性。哈希最显着的好处是它们在检索字典元素时提供即时查找时间(即 O(1) 时间复杂度)。检查特定项目是否在集合中需要相同的时间。换句话说,使用散列作为实现机制减少了在后台使用散列表的开销,同时提高了一些常见操作(如项目检索、项目插入和项目验证)的效率。 import random import timeit # Create a function to check the look up time def dict_look_up_time(n):     numbers = list(range(n))     random.shuffle(numbers)     d0 = {x: str(x) for x in numbers}     random_int = random.randint(0, n — 1)     t0 = timeit.timeit(lambda: d0[random_int], number=10000)     return t0 for n in (10, 100, 1000, 10000, 100000):     elapse_time = dict_look_up_time(n)     print(f"*** N = {n:<8}: {elapse_time:.5f}") *** N = 10 : 0.00114 *** N = 100 : 0.00256 *** N = 1000 : 0.00291 *** N = 10000 : 0.00207 *** N = 100000 : 0.00286
  上面的代码生成一些随机整数来确定项目获取的平均查找时间,来模拟真实情况。如你所见,即使字典中有 100,000 个条目,查找时间也几乎相同,这证明了使用哈希表作为字典存储机制的好处。 线程和多处理
  线程和多处理是同时运行多个脚本的两种方法。线程是进程中的一个实体,进程是程序的一个实例。
  多处理是一种技术,其中许多进程同时在不同的 CPU 上运行。线程是一种技术,其中许多线程同时运行以完成不同的任务。让我们看一个线程可能派上用场的例子。假设你有一个需要时间才能完成的函数,并且需要使用不同的参数一次又一次地执行它。你可以使用线程通过使用不同参数并行执行函数来加快此过程。当你想将相同类型的代码用于重复性任务(例如,处理多个图像)时,多处理可能会派上用场。你可以使用多处理,以便同时使用所有处理器,而不是在单个处理器上运行此任务。具体我有文章详细的说明了Python多线程的使用方法及一些案例,如果感兴趣请阅读: Python每日一库之Threading
  希望给你带来帮助,Happy Code!

西洋梨,深受欧美国家喜爱和推崇,传入我国百余年却一直不温不火梨是我国采食利用历史最为悠久的水果之一,享有百果之宗的美誉。从古至今在水果界都地位超然。梨是中国人再熟悉不过的一种水果,但或许有的朋友还不知道,梨分两类(指主要栽培种),其一是原产美国深陷债务危机或将导致经济灾难中国日报网2月23日电据路透社消息,华盛顿国会预算办公室周三表示,美国财政部最早可能会在今年7月发生债务违约。事实上,近年来美国深陷债务危机,达到近30年以来的最高水平,即将突破3段刘愚不输严鼎皓严鼎皓,24岁,脚感好,大局观好,好斗,体力毫不犹豫,远射有威胁,但场上控球太多,失误太多,防守不行很差,他一共为广州队出场83次,打进7球助攻10次。这个数据可以很直观的说明问题前申花队长莫雷诺抵达上海,处理欠薪问题国奥队大名单出炉莫雷诺本次回到上海的行程只有5天,主要是处理一些个人事务。在此之前,莫雷诺已经接受了申花俱乐部提出的欠薪打折偿还协商方案。莫雷诺作为球员对得起申花俱乐部,足协杯决赛,莫雷诺作为队长尬尴境界中还有人利用,28佩吉斯皮拉纳克够吸引人28岁的佩吉斯皮拉纳克是一位性感的大美女,她拥有天使面容魔鬼身材同时作风大胆所以成为高尔夫球坛第一网红。人红是非多的美女佩吉斯皮拉纳克红了不过是非也多了前欧洲巡回赛高尔夫球员苏菲沃超1。5万人报名!2023迁马抽签结果公布耶!我中签了!有候补机会吗?终于有机会跑一次迁马了3月3日,2023迁马抽签结果正式公布,跑友圈再次沸腾。据了解,截至2月27日1700,本届迁马共吸引了15170名选手报名,包括谷歌助力小米13全球发布带来半年GoogleOne试用版手机中国新闻2022年年底,小米方面正式发布了小米13系列机型。不过,那次发布仅限于中国市常而如今,手机中国注意到,在MWC2023期间,小米正式将该系列机型推向了海外市常目前,小让荒山变绿发展果品经济临朐何文芹获潍坊市十大返乡创业农民工奖项2月23日下午,在富华国际会议中心举办的潍坊市2022年创业大赛第七届潍坊市大学生创新创业大赛颁奖典礼上,临朐县桂成家庭农场场长临朐县文芹果蔬专业合作社理事长何文芹获得潍坊市十大返哥伦布感激我吧,不是我,你们不可能100个金币就能买到美人儿感激我吧,没有我,你们享受不到100个西班牙金币就能买到一个美人儿这样的廉价好处哥伦布日记里大声的炫耀。炫耀的背后,谁曾想发现新大陆的哥伦布晚年却连住的地方都没有。为西班牙王室发现伊拉克经济学家为摆脱美元控制人民币结算很有必要伊拉克中央银行日前公布最新改善外汇储备措施,其中包括允许以人民币直接结算伊拉克对华贸易。对此,伊拉克经济学家马什哈达尼在接受中央广播电视总台记者专访时表示,伊拉克商人希望能摆脱美元安徽新锐集团丨滁州儒林外国语学校启航高三,再创辉煌启航高三,再创辉煌滁州儒林外国语学校举行走进高三启动仪式大鲲拍水,扬浪千里鸿鹄击空,青云震彻。为激励全体高三师生树立高三意识,为高考助力,为梦想拼搏。2022年9月17日,滁州儒林
广东佛山顺德区值得游玩的旅游景点有哪些?自驾游有什么攻略?佛山市顺德区是广东省佛山市五个行政辖区之一。位于广东省的南部,珠江三角洲平原中部,广佛同城的西南边界广佛肇经济圈的南部,是佛山市与广州市联系的重要核心区域之一。顺德毗邻广州中山江门开年就到巍山,小吃美景古城,一个都不能少巍山古城夜景繁忙的2022已然翻篇,迎来全新的2023。此时的巍山,家家户户开始忙着置办年货,浓浓的年味弥漫着整个古城。说起巍山,它始于唐宋,兴于明清,放怀于滇西大地,迄今,依旧守今天,为什么要读王阳明?带你走进阳明心学的真正内核先生游南镇,一友指岩中花树问曰天下无心外之物,如此花树,在深山中自开自落,于我心亦何相关?先生曰你未看此花时,此花与汝心同归于寂。你来看此花时,则此花颜色一时明白起来。便知此花不在新疆红石慈善基金会13年募集善款1。3亿元百余万人次受益天山网讯(记者于熙报道)作为立足新疆本土的公募基金会,新疆红石慈善基金会自2009年成立以来,截至目前,累计募集社会爱心善款1。3亿元,支出善款1。1亿元,我区共有100余万人次受揭秘!如果你在古代出海航行,靠什么回家?纪录片如果国宝会说话中讲述了一段古代福船的海上往事。南宋末年,主人公阿丘是一名舟师,负责福船的领航。因为泉州人多地贫难以耕种,阿丘的祖辈决定造条船,拼一把,到海的那边去寻找生机。造魅姬国际美妆晚香玉与天使草原始欲望之息夜幕低垂,月色弥漫神谕祭司在轻声低吟。柔软的晚香玉感受到召唤开始苏醒开始绽放,皎白的花瓣散发迷人的香气,它就是晚香玉与天使草神谕晚香玉来自祖玛珑馥郁典藏系列这是一支有着冬日氛围的花中国台湾飞人刘铮惊传鼻梁骨折确定近日回台开刀效力中国男子篮球职业联赛(CBA)上海大鲨鱼的台湾好手刘铮昨天比赛中与队友相撞,造成鼻梁骨折,经纪公司今天表示,预计刘铮这几天将回台湾开刀,待状况稳定后将尽速归队。现年32岁的台湾国投瑞银基金投资部总经理桑俊今日长缨在手,迈步拾阶而上!国投瑞银基金基金投资部总经理桑俊过去的一年黑天鹅频发,疫情的深远影响从疫情本身蔓延至经济政策等。在历经重重艰难险阻之后,中国经济将在短暂的寒冬之后重迎春回大地,迈出坚定的复苏步伐,意甲最新积分榜尤文豪取8连胜攀升第2,国米遭绝平仍居第4!昨晚今晨,意甲联赛第17轮先战3场,尤文主场10击败乌迪内斯,豪取联赛8连胜,暂时升至积分榜第2位,达尼洛打进唯一入球国米客场22战平蒙扎,拿到赛季首场平局,达米安和劳塔罗破门,蒙正式亮相!蔡振华出山走上新岗位,不负国乒期待,刘国梁都懂了北京时间1月8日,中国乒乓球队正在卡塔尔多哈参加德班世乒赛亚洲区预选赛,本次比赛将会决定在接下来的德班世乒赛上,中国乒乓球队有多少人可以进入到正赛的舞台,尤其是像袁励岑和向鹏这些年NBA西部6队齐输球,湖人打破鸭蛋5连胜冲击季后赛今天NBA一共进行了5场比赛。马刺主场116121不敌凯尔特人独行侠主场127117战胜鹈鹕爵士客场118126不敌公牛勇士主场101115不敌魔术湖人客场136134战胜国王。5