python 调试大法

说在前面

我觉得没有什么错误是调试器无法解决的,如果没有,那我再说一遍,如果有,那当我没说

一、抛出异常

可以通过 raise 语句抛出异常,使程序在我们已经知道的缺陷处停下,并进入到 except 语句

raise句法:

raise关键字

调用的异常函数名 ValueError (这个函数必须是异常类或一个实例)

传递给 ValueError 的字符串,包含有用的出错信息

>>> raise ValueError('This is a error message')
Traceback (most recent call last):File "<pyshell#24>", line 1, in <module>raise ValueError('This is a error message')
ValueError: This is a error message

然后使用 try…except 语句来对抛出的异常做处理

通常我们在函数本身中抛出异常,然后在调用该函数的地方使用 try…except 语句处理异常

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#定义一个简单的int类型的加法器
def calculator(num1,num2):if isintance(num1,int)and isintance(num2,int):raise Exception('Symbol must be a int type number.')return num1+num2print('please enter two number:')
num1=input()
num2=input()
#在调用函数的地方使用try语句
try:print(calculator(num1,num2))
except Exception as err:print('发生了一个错误:'+str(err))
#另一种使用情况
try:print(key)return self[key]except KeyError:#如果在上面遇见了keyErrorraise AttributeError(r"'%s' don't have attribute '%s'"%#就抛出这个AttributeError类型的错误,顺序别弄错<br>(self.__class__.name,key))

注意上面的 as 语句取得 str ,如果不取也是可以的
  
运行示例:

RESTART: C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/boxPrint.py 
please enter two number:
s
发生了一个错误:name 'isintance' is not defined
>>>

二、取的反向跟踪的字符串

当程序运行出现错误时,python会生成一些错误信息,这些错误信息被称为“反向跟踪”,它包含了出错信息、导致该错误的代码行号,和导致 该错误的函数调用 的 序列,这个序列被称为调用栈。

只要抛出的异常没有被处理,python就会显示反向跟踪

以下面程序来展示我们对反向跟踪的解读

def spam():bacon()
def bacon():raise Exception('This is the error message')spam()

这就是反向跟踪:

Traceback (most recent call last):File "C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/errorExample.py", line 6, in <module>spam()File "C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/errorExample.py", line 2, in spambacon()File "C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/errorExample.py", line 4, in baconraise Exception('This is the error message')
Exception: This is the error message

我们应该从下往上阅读方向跟踪,通过反向跟踪我们可以知道,这个错误发生在第5行,在bacon函数中;这次特定的bacon调用发生在第2行,spam函数中,而spam函数又是在第6行被调用的。这样,在从多个位置调用函数的程序中,调用栈就能帮助你确定那次调用导致了错误。

调用 traceback.format_exc() 得到反向跟踪的字符串形式

前面说过,如果抛出的异常没有被处理,python才会显示反向跟踪。假如我们既想用except处理错误,又想要获得出错信息,就可以用这个函数,需要导入 traceback 模块

例如,我们可以在程序出现错误时还能继续运行,同时把错误信息记录到日志中。在程序结束后调试程序时,我们就根据日志里记录的信息去调试

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> import traceback
>>> try:raise Exception('This is a error message')
except:errorFile=open('errorInfo.txt','w')errorFile.write(traceback.format_exc())  #使用tracback.format_exc()获得反向跟踪的字符串形式errorFile.close()print('The traceback info was written to errorInfo.txt')112    #返回的是写入的字符个数
The traceback info was written to errorInfo.txt
>>>

errorInfo.txt的内容:

Traceback (most recent call last):File "<pyshell#8>", line 2, in <module>
Exception: This is a error message

三、断言assert语句

举一个例子。你从学校毕业以后,很久都没有找到工作,有一天你找了一个兼职:宝石大管家。小孩需要拿着与他们身份匹配的标识才能在别处领到宝石,这个标识在你这里领取,你工作做得不错,才做了五分钟就被老板任命为了区域经理,你觉你年纪轻轻就已经成为了二龙山云霄飞车街区的揸Fit人、并且一手建立了二龙山游乐场宝石交易的游戏法则,觉得人生巅峰也不过如此,但是,沉迷于自我陶醉的你根本不知道,你将一个错误的标识给了一个小朋友,导致他没有领到宝石。结果他叫他哥哥来打你了一顿。然后你老板觉得你辜负了他对你的栽培,然后一气之下把你开了,工资当然没有结。最惨的是,你的衣服丢了,当时你为了用肚脐眼上的伤疤吓唬他就把衣服脱了,结果他竟然也有同样的伤疤,然后又被他打了一顿,然后,你的衣服就丢了。你知道这是你最宝贵的财富,因为这是当年女神赠你的礼物,你永远也忘不了毕业那天,在你的寝室楼下,他轻轻的把袋子递给了你,那天你们说了很多,他说感谢你四年来对他的照顾,但是他妈妈不让他谈恋爱,所以让你再等等,你和他一直聊到晚上10点,只为了能当面向他说一句晚安,他很欣赏你的执着,离别之际对你许下了一个承诺:她说假如有一天这件衣服变成了绿色,他一定和你结婚。你知道,这下肯定没有希望了。不仅失去了工作,你失去了爱情。你以为丢了衣服,就再也没机会和他结婚了,万万没想到,最后你们还是成为了夫妻。那天你回来以后就去了网吧,看见旁边的人在写代码,他周围散落的零食包装代表着富有,这一切都被你看在眼里,你知道你看到了希望,然后你就开始学编程了,由于你过人的天赋,没出几十年你就自己创办了一家公司,和阿里啪啪,中国移不动等大公司都建立了不同程度的合作关系,且业务往来十分密切,身边的人都夸你有出息,只是在深夜的时候,你常常想起当年的那个他,你祈求老天再给你一次机会,终于有一天,你qq收到了他的信息,她说要来找你,你在城市最有档次的地方约她吃饭,他一眼就认出来了你,你很开心,你觉得他一点都没变,还是原来的样子,他没有问你衣服的事情,只是不停的向你道歉说是手误当时才把你删了,其实他这些年一直在找你,这次找到你了,就是要和你结婚,你十分激动,但是你强忍着激动的心情,劝他在考虑考虑,他摇了摇头,从他眼神里流露出来的坚定瞬间击垮了你,你再也控制不了自己了,你拿出了那次做兼职留下的宝石钻戒,你一直把它带在身上,就是等着机会到来,他想都没想就一口答应了你的求婚。看到他对你如此信赖,你暗暗发誓一定要用全部的智商去爱她,晚上他非要枕着你的胳膊睡觉,你虽然觉的不舒服但还是让他枕了一夜,你做了一个梦,梦见你们有了自己的孩子,那件衣服也被你找到了
衣服上还写着“前方高能”几个字,这是你睡得最舒服的一个晚上,你早早就醒来了,发现他也已经起来了,就在床边上坐着,但令你不解的是,看到你睁开了眼睛,他的表情忽然很激动,sua的一声就哭了,等他冷静下来你才知道。原来,你应经昏迷了8年了,8年前,你去买早餐就再也没有回来,你出了车祸,昏迷了8年,留下他和他腹中的孩子。他说这些年他从来没有想过放弃你,他对你的爱帮助他克服了许多困难。如今你醒了,他终于成功了,他高兴的留下了激动的泪水,你也很开心。于是从此以后,你们一家三口过上了幸福的生活。

“断言”在这个工作流程当中,就是用来检查 你是否把牌发对了 的一个机制。为了避免这样的情况,我们就添加“断言”来检查。

assert语句包含:

assert关键字、要判断的条件、逗号、条件为False时显示的字符串

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> podBayDoorStatus='open'  #吊舱门的状态
>>> assert podBayDoorStatus=='open','podBayDoorStatus需要设置为open'
#这里结果没有错
>>> podBayDoorStatus='other content'
>>> assert podBayDoorStatus=='open','podBayDoorStatus需要设置为open'
#这里结果出错了
Traceback (most recent call last):File "<pyshell#13>", line 1, in <module>assert podBayDoorStatus=='open','podBayDoorStatus需要设置为open'
AssertionError: podBayDoorStatus需要设置为open
>>>

我们在程序中为某个变量赋值后,基于 这个变量是这个值 的假定,我们可能写下了大量的代码,即这些代码依赖这个值,才能正确工作。说以我们添加一个断言,确保假定的变量值是对的。

对于这种情况,我们使用assert让程序立即崩溃就,以减少寻找缺陷的时间,我们不应用 try except 抛出异常,因为这是程序员的错误,而不是用户的错误,对于那些可以恢复的错误(如文件没有找到,用户输入了无效的数据)则应该用抛出异常来处理

在交通灯模拟中使用断言

你在编写一个交通信号灯的模拟程序。代表路口信号灯的数据结构是一个字典:

market_2nd={'ns':'green','ew':'red'}#ns南北向,ew东西向

你希望编写一个函数 switchLight() ,他接受一个路口字典作为参数,并切换红路灯

你可能认为 switchLight() 只要将每一种灯按顺序切换到下一种颜色: ‘green‘ 值应该切换到 ‘yellow’ , ‘yellow’ 应该切换到 ‘red’ , ‘red’ 应该切换到 ‘green’ 实现这个功能的代码:

def switchLights(stoplight):for key in stoplight.keys():if stoplight[key]=='green':stoplight[key]='yellow'elif stoplight[key]=='yellow':stoplight[key]='red'elif stoplight[key]=='red':stoplight[key]='green'

这样的运行结果:

>>>RESTART: C:\Users\Administrator.SC-201605202132\AppData\Local\Programs\Python\Python37\forTest.py
{'ns': 'yellow', 'ew': 'green'}
{'ns': 'red', 'ew': 'yellow'}
{'ns': 'green', 'ew': 'red'}

你应该发现第一次的输出是错误的,因为南北向和东西向总应该有一个是红色的,如果不是,那么就会出现汽车相撞,为了避免这样的缺陷出现,你应该添加断言

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
market_2nd={'ns':'green','ew':'red'}#ns南北向,ew东西向def switchLights(stoplight):for key in stoplight.keys():if stoplight[key]=='green':stoplight[key]='yellow'elif stoplight[key]=='yellow':stoplight[key]='red'elif stoplight[key]=='red':stoplight[key]='green'assert 'red' in stoplight.values(),'交通灯都不是红色的'+str(stoplight)        #在函数里面添加断言
switchLights(market_2nd)
print(market_2nd)
switchLights(market_2nd)
print(market_2nd)
switchLights(market_2nd)
print(market_2nd)

假如你没有看出来这个代码有问题,然后也没有使用断言,当你从运行结果发现问题时,或许要好多时间才能发现问题出现在 stwitchLight 函数中

禁用断言

当我们开发测试的时候,我们可以使用断言来帮助我们更早的发现错误,但是程序交付的时候应该是没有缺陷的,这时就不在需要断言了,我们可以在运行python时传入-O选项来禁用断言

需要从终端窗口运行程序时使用 >>>从终端运行程序<<<

在这里插入图片描述

四、日志

记日志是一种很好的方式,让我们可以理解程序中发生的事,以及事情发生的顺序。python中的 logging 模块让你能很容易的创建自定义的消息记录。这些日志消息列出了你指定的 任何变量 当时的值。缺失日志消息表明有一部分代码被跳过了,从未执行

4.1使用日志模块

import logging
logging.basicConfig(level=logging.DEBUG,format=' %(asctime)s - %(levelname)s - %(message)s')

我们使用 logging.debug(‘string’) 来打印日志信息,这个 debug() 函数会调用 basicConfig ,所以我们第二行是指定打印信息的格式

python记录一个时间的日志时,他会创建一个 logRecord 对象,保存关于该事件的信息。

logging.debug() 调用不仅打印出了我们传递给他的信息,而且包含时间戳和一个单词DEBUG

我们以下面的程序为例,展示使用日志来调试程序的大致过程

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import logging
logging.basicConfig(level=logging.DEBUG,format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('Start of program')def factorial(n):logging.debug('Start of factorial(%s%%)' %(n))  #这里的两个%是什么意思?或许是匹配basicConfig()里format里的后两个参数?total=1for i in range(n+1):total*=ilogging.debug('i is '+str(i)+', total is '+str(total))logging.debug('End of factorial(%s%%)'%(n))return totalprint(factorial(5))
logging.debug('End of program')

运行结果:

RESTART: C:/Users/Administrator.SC-201605202132/AppData/Local/Programs/Python/Python37/facatorialLog.py2019-03-06 17:39:10,889 - DEBUG - Start of program2019-03-06 17:39:10,938 - DEBUG - Start of factorial(5%)2019-03-06 17:39:10,973 - DEBUG - i is 0, total is 02019-03-06 17:39:11,001 - DEBUG - i is 1, total is 02019-03-06 17:39:11,030 - DEBUG - i is 2, total is 02019-03-06 17:39:11,058 - DEBUG - i is 3, total is 02019-03-06 17:39:11,083 - DEBUG - i is 4, total is 02019-03-06 17:39:11,108 - DEBUG - i is 5, total is 02019-03-06 17:39:11,132 - DEBUG - End of factorial(5%)
02019-03-06 17:39:11,187 - DEBUG - End of program

从里面我们可以看到i是从0开始的,这就导致了total变量总是0,当然结果也是0,知道了这些,我们就可以对程序进行改动

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import logging
logging.basicConfig(level=logging.DEBUG,format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('Start of program')def factorial(n):logging.debug('Start of factorial(%s%%)' %(n))#或许是匹配basicConfig()里format里的后两个参数?total=1for i in range(1,n+1):    #改动在这里---snip--

4.2日志级别

这个级别是全局的

“日志级别”提供了一种方式,按重要性把日志消息分为了下面5类。这些级别只是一种建议,在工作中,还是有我们自己来为日志消息指定类型。就像上面,我们也可以不用 logging.debug() 而选用其他四种

python中的日志级别

级别(上面的是最小的)日志函数描述
DEBUGlogging.debug()最低级别。用于小细节。通常你只有在诊断问题时才需要
INFOlogging.info()用于记录程序中一般事件的信息,或者是用来确认工作正常
WARNINGlogging.warning()用于表示可能的问题,这些问题不会阻止程序的工作,但将来可能会
ERRORlogging.error()用于记录错误,它导致程序做某事失败
CRITICALlogging.critical()最高级别。用于表示致命的错误,它导致或将要导致程序完全停止工作

他们显示的格式并区别

>>> import logging
>>> logging.basicConfig(level=logging.DEBUG,format=' %(asctime)s - %(levelname)s - %(message)s')
>>> logging.debug('Some debugging details')2019-03-06 18:13:44,829 - DEBUG - Some debugging details
>>> logging.info('The logging is working')2019-03-06 18:13:59,984 - INFO - The logging is working
>>> logging.critical('The program is unable to recover!')2019-03-06 18:14:34,237 - CRITICAL - The program is unable to recover!
>>>

“日志级别”的好处

“日志级别”的好处在于,你可以改变想看到的 日志消息 的优先级。这通过 basicConfig() 函数的level关键字参数来指定, level=‘logging.DEBUG’ 时会显示所有的日志级别消息, level=‘logging.ERROR’ 时只会显示级别大于等于ERROR的日志消息

当我们开发了更多程序后,我们可能只会对错误感兴趣,这种情况,就可以通过上面的level参数来设定我们想看到的级别

4.3禁用日志

logging.disable() 函数接受一个日志级别,它会禁止该级别和更低级别的所有日志消息,注意这个参数的书写正确

>>> import logging
>>> logging.basicConfig(level=logging.DEBUG,format=' %(asctime)s - %(levelname)s - %(message)s')
>>> logging.critical('The program is unable to recover!')2019-03-06 18:14:34,237 - CRITICAL - The program is unable to recover!
>>> logging.disable(logging.CRITICAL)
>>> logging.critical('The program is unable to recover!')#由于上面的禁用这个就不显示了
>>>

我们应该吧 logging.disable() 写在程序中接近 import logging 代码行的位置

4.4将日志记录到文件

logging.basicConfig() 函数接受 filename 关键字参数,日志消息将被保存到 myProgramLog.txt 文件中,而不会在输出在屏幕上

>>> import logging
>>>logging.basicConfig(filename='myProgramlog.txt',level=logging.DEBUG,format=' %(asctime)s - %(levelname)s - %(message)s')

4.5 basicConfig 的参数及 logging 模块定义的格式字符串字段

参数名称描述
filename指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了
filemode指定日志文件的打开模式,默认为’a’。需要注意的是,该选项要在filename指定时才有效
format指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。
datefmt指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效
level指定日志器的日志级别
stream指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常
stylePython 3.2中新添加的配置项。指定format格式字符串的风格,可取值为’%’、’{‘和’$’,默认为’%’
handlersPython 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。

五、IDLE的调试器

"调试器"是IDLE的一项功能,他可以让你每次执行一行代码,并让你清除的查看当前时刻所有变量的值,对于你弄明白程序的问题很有帮助,通过在交互窗口中点击 Debug>Debugger 来打开 调试控制窗口

5.1窗口上的信息

调试的时候不要把把断点打到类似while语句上,因为while这样的语句只执行一次,执行多次的是里面包裹的代码,所以单步跳出或者继续的时候就相当于继续执行到这个while语句,结束了要想一次让单步跳出或者继续达到一次执行一轮 while里面代码的效果,就把断点打到while里面

打开调试窗口后,只要你运行程序调试器就会在第一条指令执行前暂停执行,并显示下面的信息:

将要执行的代码行;所有局部变量其其值得列表;所有全局变量及其值的列表

你会发现这里面有多你没有定义的变量,如 __ builtins__ 、 __ doc__ 、 __ file__ ,等等。它们是python在运行程序时,自动设置的变量。这些变量代表的含义我现在也不知道。我们可以只关注那些我们定义的变量。

程序将保持暂停,知道我们按下调试窗口的5个按钮中的一个:GO、Step、Over、Out、Quit

Go

点击Go按钮将导致程序正常执行至终止,或到达一个“断点”(断点稍后会说)。换句话说,如果你完成了调试,希望程序正常继续,就点击Go按钮

Step

Step按钮将导致程序执行下一行代码,然后再次暂停。如果下一行代码是一个函数调用,调试器就会“步入”那个函数,调到该函数的第一行。

Over

Over按钮将执行下一行代码,与Step按钮类似。但是如果下一行代码是一个函数调用,Over按钮将“跨越”该函数的代码,调试器将在该函数返回后暂停。例如,下一行代码是 print() 调用,而显然我们不关注 print() 这个函数的代码是怎样的工作的,只希望传递给它的字符串打印出来,这时我们就可以使用Over按钮

Out

Out按钮将导致调试器全速执行代码行,直到它从当前函数返回。如果你用Step按钮进入了一个函数,现在想要让这个函数全速执行,直到这个函数结束,那么就可以使用Out按钮,让他从当前函数调用中“走出来”

Quit

Quit按钮将马上终止该程序,不会执行下面的代码,记住是终止程序,不是终止调试

5.2关闭调试器

和打开的操作一样,从交互式窗口点击 Debug>Debugger 就会关闭

5.3断点

“断点”可以设置在特定的代码行上,当使用调试器开始调试程序时,按下GO按钮并不会结束程序了,而是会到达断点里暂停。

我们可以在编辑器里在要设定断点的行右击鼠标,选择 Set Breakpoint ,就在当前行设置了断点,并且会以亮黄色显示,这次我们打开调试器后,再运行程序后按GO按钮就会在这一行停止,当我们要清除断点时,需要在当前行右击鼠标,选择 clear Breakpoint

当我们想要知道for循环中某一轮中的变量值,我们就可以在那一行设置断点,而不是频繁的点击Over按钮

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import random
mark=0
for i in range(1,1000):s=random.randint(0,2)if s==1:mark+=1
#我们查看循环到i=500时的mark值就可以在下面设置断点   if i==500:print('halfway done')    #设置这里为断点,而不要在上一行里设置,因为他是个判断,每一轮都会运行
print(mark)

断言、异常、日志和调试器,都是在程序中发现错误和预防缺陷的有用工具。用python的断言,是检查自己有没有犯错的好方式。如果必要的条件被我们搞错了,他将会早早的给出警告。断言所针对的错误,是程序不应该尝试恢复的,而是应该让程序立马失败

异常可以由 try…except 语句捕捉和处理。 logging 模块是一种很好的方式,可以在运行时查看代码的内部,他比使用 pring() 语句要好很多,因为他有不同的日志级别,并能写入日志文件。

调试器让你每次单步执行一行代码。或者可以用正常的速度运行程序,并让调试器停在你设置的断点的代码行上。利用调试器,你可以看到程序在运行期间,任何时候所有变量的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8620.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获得北大新材料学院夏令营offer的艰险历程(附面试答辩PPT)

知乎原文获得北大新材料学院夏令营offer的艰难历程(附面试答辩PPT) - 知乎 视频版 05:27 获得北大新材料学院夏令营offer的艰险历程 科大云炬 的视频 698 播放 文字版 相继6月15日以来北大、清华、浙大、西交、复旦、大连理工等10几个夏令营被拒后&#xff0c;我被打击得渐…

概率图模型 - 学习笔记

文章目录 教材与公开课视频概率图模型例子如何理解BP算法&#xff1f;概率图模型相比有监督学习的优势 教材与公开课视频 国外经典教材 英文版&#xff1a;Probabilistic Graphical Models: Principles and Techniques中文版&#xff1a;《概率图模型&#xff1a;原理与技术》…

从文本创建艺术,AI图像生成器的数据集是如何构建的

AIGC系列分享是整数智能推出的一个全新分享系列&#xff0c;在这个系列中&#xff0c;我们将介绍与AIGC概念相关的有趣内容。AIGC系列主要分为以下几篇文章&#xff1a; 被称为下一代风口的AIGC到底是什么&#xff1f; AIGC的数据集构建方案分享系列 从文本创建艺术&#xff0c…

【軟體架構師如何煉成?硬功夫軟技能點滿技能樹】

軟體架構師如何煉成&#xff1f;硬功夫軟技能點滿技能樹 協助企業資訊系統轉型&#xff0c;架構師擔任關鍵角色如何成為軟體架構師技術領域硬技能職場領域軟技能結語 協助企業資訊系統轉型&#xff0c;架構師擔任關鍵角色 「人無遠慮&#xff0c;必有近憂」&#xff0c;套用到…

巧用提示语,说说话就能做个聊天机器人

你好&#xff0c;我是徐文浩。 这一讲&#xff0c;我们来看看Open AI提供的Completion这个API接口。相信已经有不少人试过和ChatGPT聊天了&#xff0c;也有过非常惊艳的体验&#xff0c;特别是让ChatGPT帮我们写各种材料。那么&#xff0c;我们不妨也从这样一个需求开始吧。 …

量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)

文章目录 动量因子与行业轮动概述动量因子的理解投资视角下的行业轮动现象投资者视角与奈特不确定性 动量因子在行业风格上的效果测算动量因子效果测算流程概述1. 行业选择&#xff1a;申万一级行业2. 动量因子选择&#xff1a;阿隆指标&#xff08;Aroon&#xff09;3. 测算方…

苹果微软等科技巨头紧急叫停,chatgpt翻车了?(文末附联名信)

一、千名大佬集体叫停GPT研发 3月29日&#xff0c;一封联名信刷爆了各大媒体热榜&#xff0c;上面有一千多位大佬签名&#xff0c;其中包括埃隆马斯克、约书亚本吉奥&#xff08;Yoshua Bengio&#xff0c;2018年图灵奖获得者&#xff09;和史蒂夫沃兹尼亚克&#xff08;Steve…

免费!终极ChatGPT提示+Midjourney宝藏神图,1200+图片,震撼人心

新智元报道 编辑&#xff1a;Aeneas 【新智元导读】一位网友花费一周&#xff0c;用从ChatGPT生成的prompt&#xff0c;在Midjourney中生成了一千多张精彩的作品。 Midjourney虽然功能神奇&#xff0c;但在prompt能力平平的人手里&#xff0c;它并不能绽放自己的魔力。 国外的…

ChatGPT专业应用:生成各类通知

正文共 821 字&#xff0c;阅读大约需要 3 分钟 游戏/用户运营等必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 生成各类通知 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | nanako 编辑者 | Linda ●…

ChatGPT Plus停售 留出防治AI风险空窗期

能体验GPT-4模型的ChatGPT&#xff0c;因需求量太大而暂停了升级为Plus的功能&#xff0c;算力似乎爆表了。 这下&#xff0c;有钱都没地儿充会员了&#xff0c;用户们暂时需要回到“GPT-3.5时代”。这或许留给人类一个空窗期&#xff0c;可以好好思考一下前段时间上千名科技精…

【重制版】10分钟学会WINDOWS、MAC、LINUX如何安装GPT桌面版

文章目录 1 前言2 Windows版下载安装2.1 安装包2.2 winget下载 &#xff08;注意看&#xff0c;不是wget&#xff01;&#xff09; 3 Mac版下载安装3.1 安装包3.2 homebrew安装 4 Linux版下载安装4.1 安装包4.2 终端下载 5 特点5.1 软件特点5.2 菜单功能&#xff08;个人喜好特…

英伟达黄老板成身价350亿美元CEO!做AIGC淘金时代送铲子的

Datawhale干货 英伟达CEO&#xff1a;黄仁勋&#xff0c;来源&#xff1a;新智元 【导读】90年代显卡芯片的红海市场中&#xff0c;为什么是英伟达脱颖而出&#xff1f;3D、矿卡、移动构架、人工智能&#xff0c;老黄带着英伟达&#xff0c;踏准了一个个风口&#xff0c;笑到了…

【人工智能】人工智能行业研究:史上最伟大的科技革命

【人工智能】人工智能行业研究:史上最伟大的科技革命 目录 【人工智能】人工智能行业研究:史上最伟大的科技革命

BFT最前线 | iOS版ChatGPT周下载突破50万人次;英伟达市值突破万亿美元创造芯片公司历史;华为开发者大会即将发布

原创 | 文 BFT机器人 AI视界 TECHNOLOGY NEWS 01 联合国教育部聚焦生成式AI 联合国科教文组织提出发展路线图 近日&#xff0c;为应对生成式人工智能技术的迅速发展&#xff0c;联合国教科文组织就此议题召开了首次全球教育部长会议。40多位部长分享了将这些工具融入教育的…

从应用火到股市 AIGC概念股连涨仨月

AI有变革生产力之势&#xff0c;证券市场闻风而动。同花顺数据显示&#xff0c;AIGC概念指数年内上涨近60%&#xff0c;涨幅是上证指数的10倍多。 具体到个股&#xff0c;软通动力、远大智能等搭上AI风口的企业服务商“老树发新芽”&#xff0c;直接涨停。游戏板块霸榜产品回报…

英伟达单日涨出一个AMD、两个英特尔,市值冲向万亿美元!

金磊 发自 凹非寺量子位 | 公众号 QbitAI 英伟达&#xff0c;即将成为第一家市值破1万亿美元的芯片公司&#xff01; 而且是仅在一天内&#xff0c;市值暴涨了超2000亿美元的那种。 什么概念&#xff1f; 相当于涨出了一个AMD、两个英特尔、三个美光…… 用雅虎财经的话来评价&…

AI炒股回报率500%?内行揭秘玄机

一篇来自佛罗里达大学的研究报告震惊了金融圈&#xff1a;用ChatGPT对公司新闻进行情绪分析&#xff0c;并按此在股市做多、卖空&#xff0c;最高可获得超过500%的投资回报率。虽然坊间对这份报告中惊人的回报率数据有所怀疑&#xff0c;但金融界正在因AI的介入发生改变。 摩根…

【创新应用】颠覆历史!「ChatGPT搜索引擎」发布,微软市值一夜飙涨5450亿

来源&#xff1a;智能研究院 【导读】搜索引擎要变天&#xff01;微软官宣&#xff1a;整合ChatGPT的必应来了&#xff01;现在即可体验&#xff01; 连续两天&#xff0c;我们都在见证历史。 硅谷大厂已经剑拔弩张&#xff0c;ChatGPT引爆的这一场搜索引擎大战&#xff0c;一触…

「问题少年」逆袭成资产350亿美元CEO!ChatGPT背后最大赢家

来源&#xff1a;新智元 上周六&#xff0c;仅仅在一天内&#xff0c;英伟达的市值就暴涨了超2000亿美元&#xff0c;震惊了美股市场。 短短一瞬间&#xff0c;就涨出一个AMD&#xff0c;两个英特尔。 ChatGPT引爆的AIGC热潮&#xff0c;让英伟达赚翻了。 在COMPUTEX大会上&…

万字长文:ChatGPT能否成为互联网后下一个系统性机会?

2023年险峰线上沙龙的第一期&#xff0c;我们和四位行业大牛聊了聊最近大火的ChatGPT。 首先介绍一下本场嘉宾&#xff1a;陶芳波博士是前Facebook高级研究科学家&#xff0c;回国后进入阿里达摩院&#xff0c;搭建了阿里的神经符号实验室&#xff0c;属于全球最顶级的AI科学家…