pyt

阅读 / 问答 / 标签

python 新浪微博爬虫,求助

0x00. 起因因为参加学校大学生创新竞赛,研究有关微博博文表达的情绪,需要大量微博博文,而网上无论是国内的某度、csdn,还是国外谷歌、gayhub、codeproject等都找不到想要的程序,没办法只能自己写一个程序了。ps.在爬盟找到类似的程序,但是是windows下的,并且闭源,而且最终爬取保存的文件用notepad++打开有很多奇怪的问题,所以放弃了。0x01. 基础知识本程序由Python写成,所以基本的python知识是必须的。另外,如果你有一定的计算机网络基础,在前期准备时会有少走很多弯路。对于爬虫,需要明确几点:1. 对爬取对象分类,可以分为以下几种:第一种是不需要登录的,比如博主以前练手时爬的中国天气网,这种网页爬取难度较低,建议爬虫新手爬这类网页;第二种是需要登录的,如豆瓣、新浪微博,这些网页爬取难度较高;第三种独立于前两种,你想要的信息一般是动态刷新的,如AJAX或内嵌资源,这种爬虫难度最大,博主也没研究过,在此不细举(据同学说淘宝的商品评论就属于这类)。2. 如果同一个数据源有多种形式(比如电脑版、手机版、客户端等),优先选取较为“纯净的”展现。比如新浪微博,有网页版,也有手机版,而且手机版可以用电脑浏览器访问,这时我优先选手机版新浪微博。3. 爬虫一般是将网页下载到本地,再通过某些方式提取出感兴趣的信息。也就是说,爬取网页只完成了一半,你还要将你感兴趣的信息从下载下来的html文件中提取出来。这时就需要一些xml的知识了,在这个项目中,博主用的是XPath提取信息,另外可以使用XQuery等等其他技术,详情请访问w3cschool。4. 爬虫应该尽量模仿人类,现在网站反爬机制已经比较发达,从验证码到禁IP,爬虫技术和反爬技术可谓不断博弈。0x02. 开始决定了爬虫的目标之后,首先应该访问目标网页,明确目标网页属于上述几种爬虫的哪种,另外,记录为了得到感兴趣的信息你需要进行的步骤,如是否需要登录,如果需要登录,是否需要验证码;你要进行哪些操作才能获得希望得到的信息,是否需要提交某些表单;你希望得到的信息所在页面的url有什么规律等等。以下博文以博主项目为例,该项目爬取特定新浪微博用户从注册至今的所有微博博文和根据关键词爬取100页微博博文(大约1000条)。0x03. 收集必要信息首先访问目标网页,发现需要登录,进入登录页面如下新浪微博手机版登录页面注意url后半段有很多形如”%xx”的转义字符,本文后面将会讲到。从这个页面可以看到,登录新浪微博手机版需要填写账号、密码和验证码。这个验证码是近期(本文创作于2016.3.11)才需要提供的,如果不需要提供验证码的话,将有两种方法进行登录。第一种是填写账号密码之后执行js模拟点击“登录”按钮,博主之前写过一个Java爬虫就是利用这个方法,但是现在找不到工程了,在此不再赘述。第二种需要一定HTTP基础,提交包含所需信息的HTTP POST请求。我们需要Wireshark 工具来抓取登录微博时我们发出和接收的数据包。如下图我抓取了在登录时发出和接收的数据包Wireshark抓取结果1在搜索栏提供搜索条件”http”可得到所有http协议数据包,右侧info显示该数据包的缩略信息。图中蓝色一行是POST请求,并且info中有”login”,可以初步判断这个请求是登录时发出的第一个数据包,并且这个180.149.153.4应该是新浪微博手机版登录认证的服务器IP地址,此时我们并没有任何的cookie。在序号为30是数据包中有一个从该IP发出的HTTP数据包,里面有四个Set-Cookie字段,这些cookie将是我们爬虫的基础。Wireshark抓取结果2早在新浪微博服务器反爬机制升级之前,登录是不需要验证码的,通过提交POST请求,可以拿到这些cookie,在项目源码中的TestCookie.py中有示例代码。ps.如果没有wireshark或者不想这么麻烦的话,可以用浏览器的开发者工具,以chrome为例,在登录前打开开发者工具,转到Network,登录,可以看到发出和接收的数据,登录完成后可以看到cookies,如下图chrome开发者工具接下来访问所需页面,查看页面url是否有某种规律。由于本项目目标之一是获取某用户的全部微博,所以直接访问该用户的微博页面,以央视新闻 为例。央视新闻1图为央视新闻微博第一页,观察该页面的url可以发现,新浪微博手机版的微博页面url组成是 “weibo.cn/(displayID)?page=(pagenum)” 。这将成为我们爬虫拼接url的依据。接下来查看网页源码,找到我们希望得到的信息的位置。打开浏览器开发者工具,直接定位某条微博,可以发现它的位置,如下所示。xpath观察html代码发现,所有的微博都在<div>标签里,并且这个标签里有两个属性,其中class属性为”c”,和一个唯一的id属性值。得到这个信息有助于将所需信息提取出来。另外,还有一些需要特别注意的因素* 微博分为原创微博和转发微博* 按照发布时间至当前时间的差距,在页面上有”MM分钟前”、”今天HH:MM”、”mm月dd日 HH:MM”、”yyyy-mm-dd HH:MM:SS”等多种显示时间的方式* 手机版新浪微博一个页面大约显示10条微博,所以要注意对总共页数进行记录以上几点都是细节,在爬虫和提取的时候需要仔细考虑。0x04. 编码1.爬取用户微博本项目开发语言是Python 2.7,项目中用了一些第三方库,第三方库可以用pip的方法添加。既然程序自动登录的想法被验证码挡住了,想要访问特定用户微博页面,只能使用者提供cookies了。首先用到的是Python的request模块,它提供了带cookies的url请求。import requestprint request.get(url, cookies=cookies).content使用这段代码就可以打印带cookies的url请求页面结果。首先取得该用户微博页面数,通过检查网页源码,查找到表示页数的元素,通过XPath等技术提取出页数。页数项目使用lxml模块对html进行XPath提取。首先导入lxml模块,在项目里只用到了etree,所以from lxml import etree然后利用下面的方法返回页数def getpagenum(self):url = self.geturl(pagenum=1)html = requests.get(url, cookies=self.cook).content # Visit the first page to get the page number.selector = etree.HTML(html)pagenum = selector.xpath("//input[@name="mp"]/@value")[0]return int(pagenum)接下来就是不断地拼接url->访问url->下载网页。需要注意的是,由于新浪反爬机制的存在,同一cookies访问页面过于“频繁”的话会进入类似于“冷却期”,即返回一个无用页面,通过分析该无用页面发现,这个页面在特定的地方会出现特定的信息,通过XPath技术来检查这个特定地方是否出现了特定信息即可判断该页面是否对我们有用。def ispageneeded(html):selector = etree.HTML(html)try:title = selector.xpath("//title")[0]except:return Falsereturn title.text != "微博广场" and title.text != "微博"如果出现了无用页面,只需简单地重新访问即可,但是通过后期的实验发现,如果长期处于过频访问,返回的页面将全是无用页面,程序也将陷入死循环。为了避免程序陷入死循环,博主设置了尝试次数阈值trycount,超过这个阈值之后方法自动返回。下面代码片展示了单线程爬虫的方法。def startcrawling(self, startpage=1, trycount=20):attempt = 0try:os.mkdir(sys.path[0] + "/Weibo_raw/" + self.wanted)except Exception, e:print str(e)isdone = Falsewhile not isdone and attempt < trycount:try:pagenum = self.getpagenum()isdone = Trueexcept Exception, e:attempt += 1if attempt == trycount:return Falsei = startpagewhile i <= pagenum:attempt = 0isneeded = Falsehtml = ""while not isneeded and attempt < trycount:html = self.getpage(self.geturl(i))isneeded = self.ispageneeded(html)if not isneeded:attempt += 1if attempt == trycount:return Falseself.savehtml(sys.path[0] + "/Weibo_raw/" + self.wanted + "/" + str(i) + ".txt", html)print str(i) + "/" + str(pagenum - 1)i += 1return True考虑到程序的时间效率,在写好单线程爬虫之后,博主也写了多线程爬虫版本,基本思想是将微博页数除以线程数,如一个微博用户有100页微博,程序开10个线程,那么每个线程只负责10个页面的爬取,其他基本思想跟单线程类似,只需仔细处理边界值即可,在此不再赘述,感兴趣的同学可以直接看代码。另外,由于多线程的效率比较高,并发量特别大,所以服务器很容易就返回无效页面,此时trycount的设置就显得更重要了。博主在写这篇微博的时候,用一个新的cookies,多线程爬取现场测试了一下爬取北京邮电大学的微博,3976条微博全部爬取成功并提取博文,用时仅15s,实际可能跟cookies的新旧程度和网络环境有关,命令行设置如下,命令行意义在项目网址里有说明python main.py _T_WM=xxx; SUHB=xxx; SUB=xxx; gsid_CTandWM=xxx u bupt m 20 20爬取的工作以上基本介绍结束,接下来就是爬虫的第二部分,解析了。由于项目中提供了多线程爬取方法,而多线程一般是无序的,但微博博文是依靠时间排序的,所以项目采用了一种折衷的办法,将下载完成的页面保存在本地文件系统,每个页面以其页号为文件名,待爬取的工作结束后,再遍历文件夹内所有文件并解析。通过前面的观察,我们已经了解到微博博文存在的标签有什么特点了,利用XPath技术,将这个页面里所有有这个特点的标签全部提取出来已经不是难事了。在这再次提醒,微博分为转发微博和原创微博、时间表示方式。另外,由于我们的研究课题仅对微博文本感兴趣,所以配图不考虑。def startparsing(self, parsingtime=datetime.datetime.now()):basepath = sys.path[0] + "/Weibo_raw/" + self.uidfor filename in os.listdir(basepath):if filename.startswith("."):continuepath = basepath + "/" + filenamef = open(path, "r")html = f.read()selector = etree.HTML(html)weiboitems = selector.xpath("//div[@class="c"][@id]")for item in weiboitems:weibo = Weibo()weibo.id = item.xpath("./@id")[0]cmt = item.xpath("./div/span[@class="cmt"]")if len(cmt) != 0:weibo.isrepost = Trueweibo.content = cmt[0].textelse:weibo.isrepost = Falsectt = item.xpath("./div/span[@class="ctt"]")[0]if ctt.text is not None:weibo.content += ctt.textfor a in ctt.xpath("./a"):if a.text is not None:weibo.content += a.textif a.tail is not None:weibo.content += a.tailif len(cmt) != 0:reason = cmt[1].text.split(u"xa0")if len(reason) != 1:weibo.repostreason = reason[0]ct = item.xpath("./div/span[@class="ct"]")[0]time = ct.text.split(u"xa0")[0]weibo.time = self.gettime(self, time, parsingtime)self.weibos.append(weibo.__dict__)f.close()方法传递的参数parsingtime的设置初衷是,开发前期爬取和解析可能不是同时进行的(并不是严格的“同时”),微博时间显示是基于访问时间的,比如爬取时间是10:00,这时爬取到一条微博显示是5分钟前发布的,但如果解析时间是10:30,那么解析时间将错误,所以应该讲解析时间设置为10:00。到后期爬虫基本开发完毕,爬取工作和解析工作开始时间差距降低,时间差将是爬取过程时长,基本可以忽略。解析结果保存在一个列表里,最后将这个列表以json格式保存到文件系统里,删除过渡文件夹,完成。def save(self):f = open(sys.path[0] + "/Weibo_parsed/" + self.uid + ".txt", "w")jsonstr = json.dumps(self.weibos, indent=4, ensure_ascii=False)f.write(jsonstr)f.close()2.爬取关键词同样的,收集必要的信息。在微博手机版搜索页面敲入”python”,观察url,研究其规律。虽然第一页并无规律,但是第二页我们发现了规律,而且这个规律可以返回应用于第一页第一页第二页应用后第一页观察url可以发现,对于关键词的搜索,url中的变量只有keyword和page(事实上,hideSearchFrame对我们的搜索结果和爬虫都没有影响),所以在代码中我们就可以对这两个变量进行控制。另外,如果关键词是中文,那么url就需要对中文字符进行转换,如我们在搜索框敲入”开心”并搜索,发现url如下显示搜索开心但复制出来却为http://weibo.cn/search/mblog?hideSearchFrame=&keyword=%E5%BC%80%E5%BF%83&page=1幸好,python的urllib库有qoute方法处理中文转换的功能(如果是英文则不做转换),所以在拼接url前使用这个方法处理一下参数。另外,考虑到关键词搜索属于数据收集阶段使用的方法,所以在此只提供单线程下载网页,如有多线程需要,大家可以按照多线程爬取用户微博的方法自己改写。最后,对下载下来的网页进行提取并保存(我知道这样的模块设计有点奇怪,打算重(xin)构(qing)时(hao)时再改,就先这样吧)。def keywordcrawling(self, keyword):realkeyword = urllib.quote(keyword) # Handle the keyword in Chinese.try:os.mkdir(sys.path[0] + "/keywords")except Exception, e:print str(e)weibos = []try:highpoints = re.compile(u"[U00010000-U0010ffff]") # Handle emoji, but it seems doesn"t work.except re.error:highpoints = re.compile(u"[uD800-uDBFF][uDC00-uDFFF]")pagenum = 0isneeded = Falsewhile not isneeded:html = self.getpage("http://weibo.cn/search/mblog?keyword=%s&page=1" % realkeyword)isneeded = self.ispageneeded(html)if isneeded:selector = etree.HTML(html)try:pagenum = int(selector.xpath("//input[@name="mp"]/@value")[0])except:pagenum = 1for i in range(1, pagenum + 1):try:isneeded = Falsewhile not isneeded:html = self.getpage("http://weibo.cn/search/mblog?keyword=%s&page=%s" % (realkeyword, str(i)))isneeded = self.ispageneeded(html)selector = etree.HTML(html)weiboitems = selector.xpath("//div[@class="c"][@id]")for item in weiboitems:cmt = item.xpath("./div/span[@class="cmt"]")if (len(cmt)) == 0:ctt = item.xpath("./div/span[@class="ctt"]")[0]if ctt.text is not None:text = etree.tostring(ctt, method="text", encoding="unicode")tail = ctt.tailif text.endswith(tail):index = -len(tail)text = text[1:index]text = highpoints.sub(u"u25FD", text) # Emoji handling, seems doesn"t work.weibotext = textweibos.append(weibotext)print str(i) + "/" + str(pagenum)except Exception, e:print str(e)f = open(sys.path[0] + "/keywords/" + keyword + ".txt", "w")try:f.write(json.dumps(weibos,indent=4,ensure_ascii=False))except Exception,ex:print str(ex)finally:f.close()博主之前从未写过任何爬虫程序,为了获取新浪微博博文,博主先后写了3个不同的爬虫程序,有Python,有Java,爬虫不能用了是很正常的,不要气馁,爬虫程序和反爬机制一直都在不断博弈中,道高一尺魔高一丈。另. 转载请告知博主,如果觉得博主帅的话就可以不用告知了

python处理10亿级别数据求助

还没有仔细分析你的算法。第一个感觉,如果没有一个超级计算机,还是想办法优化你的算法。通常在python里,一个字典只有支持几万到几十万数据量的时候效率最高。字典太大并不适合这种数据类型。列表也不是存贮效率高的一种方式,通常我们大数据量计算会使用array,最差也要使用blist。另外range也不可以的。要用xrange。xrange通常不消耗多少内存。range会用很多内存。你上面的文字描述也没有讲明白你的算法目标。如果你讲得清楚,可以直接帮你优化一下算法。整型的KEY,完全可以不用字典,只需要一个索引加一个一个数组就可以解决。总体感觉你自己把算法弄得复杂了,应该可以有更简单得多的算法。先优化算法再做程序吧。即使你用java实现这个功能,也会出现内存不足。另外你代码里可通还有语法错误。cums1,cums2,cums3应该是一个东西,为什么要弄三份。又不需要改写。一份足够了。

python 中的isdir和exists区别

isdir 是判断是否是目录(文件夹) 关注的是文件的类型,而exists只是判断文件是否存在。

利用python算闰年

#加入了排错#python 2.5try: begin = int(raw_input("Starting year : ")) end = int(raw_input("Ending year : ")) if begin > end: raise Exceptionexcept Exception: print "Bad input!" exit()total = 0for year in xrange(begin, end): if (year%4 == 0 and year%100 != 0) or year%400 == 0: print year, "is a leap year" total += 1 else: print year, "is not a leap year"print "Total number of leap years :", total#貌似楼上C的语法和python的搞混了...

python标准库有哪些

Python标准库的内容涵盖了非常多的功能,主要包括文件、字符串和数字处理,数据结构、网络编程、操作系统用户界面、网页测试、线程以及其它的工具。具体有,1、文件操作相关的模块,os,os。path,shutil,errno,stat,glob,fnmatch,tempfile等。2、字符串和文本处理模块,string,re,difflib和textwrap等。3、数据结构形式,collections,bisect,array,heapq,queue,struct和weakref等。4、网络编程与操作系统,SocketServer,socket,selectselectors,threading,multiprocessing,subprocess,mmap,sched,asyncore等。5、网页测试,urllib,urllib2,httplib,ftplib,gopherlib,spider等。6、解析和处理XML,HTMLParser,ElementTree,XMLParser,XMLWriter,SAX,minidom,expat等。7、除此之外,还包含一些其他方便实用的部分,如BaseHTTPServer,CGIHTTPServer,Cookie,templating,xmlrpclib,formatter,email等。此外,Python还支持第三方库和框架,有很多实用的框架和工具可以让开发者高效、便捷地完成国家工作。

常用的生物信息学python库有哪些

常用的生物信息学python库:TkinterPython默认的图形界面接口。Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。PyGTK用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的库。PyQt用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是Scintillar编辑器类的Qt接口。wxPythonGUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或者对设计要求不高的用户来说,使用Boa Constructor可以方便迅速的进行wxPython的开发)PILpython提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。Psyco一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。xmpppyJabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。PyMedia用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。PmwPython megawidgets,Python超级GUI组件集,一个在python中利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。PyXML用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:xmlproc: 一个符合规范的XML解析器。Expat: 一个快速的,非验证的XML解析器。还有其他和他同级别的还有 PyHtml PySGML。PyGame用于多媒体开发和游戏软件开发的模块。PyOpenGL模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。NumPy、NumArray、SAGENumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的底层代码使用C来编写,所以速度的优势很明显。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。MySQLdb用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。Sqlite3用于连接sqlite数据库。Python-ldap提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。smtplib发送电子邮件。ftplib定义了FTP类和一些方法,用以进行客户端的ftp编程。如果想了解ftp协议的详细内容,请参考RFC959。PyOpenCLOpenCL的Python接口,通过该模块可以使用GPU实现并行计算。

Python 运行报错 错误如下

如果是命令行的,一般是捕获ctrl-c事件吧。importsignalimportsysdefsignal_handler(signal,frame):print("YoupressedCtrl+C!")sys.exit(0)signal.signal(signal.SIGINT,signal_handler)print("PressCtrl+C")signal.pause()

Python curses Redirection is not supported,该怎么解决

代码做测试:import curses myscreen = curses.initscr()myscreen.border(0)myscreen.addstr(12, 25, "Python curses in action!") myscreen.refresh()myscreen.getch()

linux下python的curses库是自带的吗

python的库 一般解压后都有一个 setup.py 的文件,然后使用python来安装 在安装包当前目录执行 $python setup.py install

Pythagoras

Please go to "http://mathworld.wolfram.com/search/?query=Pythagoras&x=8&y=13"to see his mathematical achievementsPythagoras This documentary presents the life and times of one of the world"s greatest thinkers, Pythagoras. Known generally for his theorem concerning the length of the hypotenuse of a right triangle, Pythagoras brings to light his other contributions in the fields of philosophy, astronomy, science, music, religion and politics. Pythagoras (fl. 530 BCE.) Pythagoras (fl. 530 BCE) must have been one of the world"s greatest men, but he wrote nothing, and it is hard to say how much of the doctrine we know as Pythagorean is due to the founder of the society and how much is later development. It is also hard to say how much of what we are told about the life of Pythagoras is trustworthy; for a mass of legend gathered around his name at an early date. Sometimes he is represented as a man of science, and sometimes as a preacher of mystic doctrines, and we might be tempted to regard one or other of those characters as alone historical. The truth is that there is no need to reject either of the traditional views. The union of mathematical genius and mysticism is common enough. Originally from Samos, Pythagoras founded at Kroton (in southern Italy) a society which was at once a religious community and a scientific school. Such a body was bound to excite jealousy and mistrust, and we hear of many struggles. Pythagoras himself had to flee from Kroton to Metapontion, where he died. It is stated that he was a disciple of Anaximander, his astronomy was the natural development of Anaximander"s. Also, the way in which the Pythagorean geometry developed also bears witness to its descent from that of Miletos. The great problem at this date was the duplication of the square, a problem which gave rise to the theorem of the square on the hypotenuse, commonly known still as the Pythagorean proposition (Euclid, I. 47). If we were right in assuming that Thales worked with the old 3:4:5 triangle, the connection is obvious. Pythagoras argued that there are three kinds of men, just as there are three classes of strangers who come to the Olympic Games. The lowest consists of those who come to buy and sell, and next above them are those who come to compete. Best of all are those who simply come to look on. Men may be classified accordingly as lovers of wisdom, lovers of honor, and lovers of gain. That seems to imply the doctrine of the tripartite soul, which is also attributed to the early Pythagoreans on good authority, though it is common now to ascribe it to Plato. There are, however, clear references to it before his time, and it agrees much better with the general outlook of the Pythagoreans. The comparison of human life to a gathering like the Games was often repeated in later days. Pythagoras also taught the doctrine of Rebirth or transmigration, which we may have learned from the contemporary Orphics. Xenophanes made fun of him for pretending to recognize the voice of a departed friend in the howls of a beaten dog. Empedocles seems to be referring to him when he speaks of a man who could remember what happened ten or twenty generations before. It was on this that the doctrine of Recollection, which plays so great a part in Plato, was based. The things we perceive with the senses, Plato argues, remind us of things we knew when the soul was out of the body and could perceive reality directly. There is more difficulty about the cosmology of Pythagoras. Hardly any school ever professed such reverence for its founder"s authority as the Pythagoreans. "The Master said so" was their watchword. On the other hand, few schools have shown so much capacity for progress and for adapting themselves to new conditions. Pythagoras started from the cosmical system of Anaximenes. Aristotle tells us that the Pythagoreans represented the world as inhaling "air" form the boundless mass outside it, and this "air" is identified with "the unlimited". When, however, we come to the process by which things are developed out of the "unlimited", we observe a great change. We hear nothing more of "separating out" or even of rarefaction and condensation. Instead of that we have the theory that what gives form to the Unlimited is the Limit. That is the great contribution of Pythagoras to philosophy, and we must try to understand it. Now the function of the Limit is usually illustrated from the arts of music and medicine, and we have seen how important these two arts were for Pythagoreans, so it is natural to infer that the key to its meaning is to be found in them. It may be taken as certain that Pythagoras himself discovered the numerical ratios which determine the concordant intervals of the musical scale. Similar to musical intervals, in medicine there are opposites, such as the hot and the cold, the wet and the dry, and it is the business of the physician to produce a proper "blend" of these in the human body. In a well-known passage of Plato"s Phaedo (86 b) we are told by Simmias that the Pythagoreans held the body to be strung like an instrument to a certain pitch, hot and cold, wet and dry taking the place of high and low in music. Musical tuning and health are alike means arising from the application of Limit to the Unlimited. It was natural for Pythagoras to look for something of the same kind in the world at large. Briefly stated, the doctrine of Pythagoras was that all things are numbers. In certain fundamental cases, the early Pythagoreans represented numbers and explained their properties by means of dots arranged in certain "figures" or patterns. order to determine what the historical Pythagoras actually thought and did. In order to obtain an accurate appreciation of Pythagoras" achievement, it is important to rely on the earliest evidence before the distortions of the later tradition arose. The popular modern image of Pythagoras is that of a master mathematician and scientist. The early evidence shows, however, that, while Pythagoras was famous in his own day and even 150 years later in the time of Plato and Aristotle, it was not mathematics or science upon which his fame rested. Pythagoras was famous (1) as an expert on the fate of the soul after death, who thought that the soul was immortal and went through a series of reincarnations; (2) as an expert on religious ritual; (3) as a wonder-worker who had a thigh of gold and who could be two places at the same time; (4) as the founder of a strict way of life that emphasized dietary restrictions, religious ritual and rigorous self discipline. It remains controversial whether he also engaged in the rational cosmology that is typical of the Presocratic philosopher/scientists and whether he was in any sense a mathematician. The early evidence suggests, however, that Pythagoras presented a cosmos that was structured according to moral principles and significant numerical relationships and may have been akin to conceptions of the cosmos found in Platonic myths, such as those at the end of the Phaedo and Republic. In such a cosmos, the planets were seen as instruments of divine vengeance (“the hounds of Persephone”), the sun and moon are the isles of the blessed where we may go, if we live a good life, while thunder functioned to frighten the souls being punished in Tartarus. The heavenly bodies also appear to have moved in accordance with the mathematical ratios that govern the concordant musical intervals in order to produce a music of the heavens, which in the later tradition developed into “the harmony of the spheres.” It is doubtful that Pythagoras himself thought in terms of spheres, and the mathematics of the movements of the heavens was not worked out in detail. But there is evidence that he valued relationships between numbers such as those embodied in the so-called Pythagorean theorem, though it is not likely that he proved the theorem.Pythagoras" cosmos was developed in a more scientific and mathematical direction by his successors in the Pythagorean tradition, Philolaus and Archytas. Pythagoras succeeded in promulgating a new more optimistic view of the fate of the soul after death and in founding a way of life that was attractive for its rigor and discipline and that drew to him numerous devoted followers.1. The Pythagorean Question 2. Sources 2.1 Chronological Chart of Sources for Pythagoras 2.2 Post-Aristotelian Sources for Pythagoras 2.3 Plato and Aristotle as Sources for Pythagoras 3. Life and Works 4. The Philosophy of Pythagoras 4.1 The Fate of the Soul—Metempsychosis 4.2 Pythagoras as a Wonder-worker 4.3 The Pythagorean Way of Life 5. Was Pythagoras a Mathematician or Cosmologist? Bibliography Primary Sources and Commentaries Secondary Sources Other Internet Resources Related Entries --------------------------------------------------------------------------------1. The Pythagorean QuestionWhat were the beliefs and practices of the historical Pythagoras? This apparently simple question has become the daunting Pythagorean question for several reasons. First, Pythagoras himself wrote nothing, so our knowledge of Pythagoras" views is entirely derived from the reports of others. Second, there was no extensive or authoritative contemporary account of Pythagoras. No one did for Pythagoras what Plato and Xenophon did for Socrates. Third, only fragments of the first detailed accounts of Pythagoras, written about 150 years after his death, have survived. Fourth, it is clear that these accounts disagreed with one another on significant points. These four points would already make the problem of determining Pythagoras" philosophical beliefs more difficult than determining those of almost any other ancient philosopher, but a fifth factor complicates matters even more. By the third century AD, when the first detailed accounts of Pythagoras that survive intact were written, Pythagoras had come to be regarded, in some circles, as the master philosopher, from whom all that was true in the Greek philosophical tradition derived. By the end of the first century BC, a large collection of books had been forged in the name of Pythagoras and other early Pythagoreans, which purported to be the original Pythagorean texts from which Plato and Aristotle derived their most important ideas. A treatise forged in the name of Timaeus of Locri was the supposed model for Plato"s Timaeus, just as forged treatises assigned to Archytas were the supposed model for Aristotle"s Categories. Pythagoras himself was widely presented as having anticipated Plato"s later metaphysics, in which the one and the indefinite dyad are first principles. Thus, not only is the earliest evidence for Pythagoras" views meager and contradictory, it is overshadowed by the hagiographical presentation of Pythagoras, which became dominant in late antiquity. Given these circumstances, the only reliable approach to answering the Pythagorean question is to start with the earliest evidence, which is independent of the later attempts to glorify Pythagoras, and to use the picture of Pythagoras which emerges from this early evidence as the standard against which to evaluate what can be accepted and what must be rejected in the later tradition. Following such an approach, Walter Burkert, in his epoch-making book (1972a), revolutionized our understanding of the Pythagorean question, and all modern scholarship on Pythagoras, including this article, stands on his shoulders. For a detailed discussion of the source problems that generate the Pythagorean Question see 2. Sources, below.2. Sources2.1 Chronological Chart of Sources for Pythagoras300 AD Iamblichus (ca. 245-325 AD) On the Pythagorean Life (extant) Porphyry (234- ca. 305 AD) Life of Pythagoras (extant) Diogenes Laertius (ca. 200-250 AD) Life of Pythagoras (extant) 200 AD Sextus Empiricus (circa 200 AD) (summaries of Pythagoras" philosophy in Adversus Mathematicos [Against the Theoreticians], cited below as M.) 100 AD Nicomachus (ca. 50-150 AD) Introduction to Arithmetic (extant), Life of Pythagoras(fragments quoted in Iamblichus etc.) Apollonius of Tyana (died ca. 97 AD) Life of Pythagoras (fragments quoted in Iamblichus etc.) Moderatus of Gades (50-100) Lectures on Pythagoreanism (fragments quoted in Porphyry) Aetius (first century AD) Opinions of the Philosophers (reconstructed by H. Diels from pseudo-Plutarch, Opinions of the Philosophers [2nd AD] and Stobaeus, Selections [5th AD]) Pseudo-Pythagorean texts forged (starting as early as 300 BC but most common in the first century BC) 100 BC Alexander Polyhistor (b. 105 BC) his excerpts of the Pythagorean Memoirs are quoted by Diogenes Laertius 200 BC Pythagorean Memoirs (200 BC) (sections quoted in Diogenes Laertius) 300 BC Timaeus of Tauromenium 350-260 BC) (historian of Sicily) Academy Heraclides (ca. 380-310)Xenocrates (ca. 396-314)Speusippus (ca. 410-339) Lyceum Dicaearchus (ca.370-300)Aristoxenus (ca. 370-300)Eudemus (ca.370-300)Theophrastus (372-288)Aristotle (384-322) 400 BC Plato (427-347) 500 BC Pythagoras (570-490) reference;http://plato.stanford.edu/entries/pythagoras/Pythagoras (fl. 530 BCE) must have been one of the world"s greatest men, but he wrote nothing, and it is hard to say how much of the doctrine we know as Pythagorean

python中的extend和append的区别

extend()接受一个列表参数,把参数列表的元素添加到列表的尾部,append()接受一个对象参数,把对象添加到列表的尾部[1,2].extend([1,2,3])[1,2,1,2,3][1,2].append([1,2,3])[1,2,[1,2,3]]

extern在Python中用什么代替?

我在VC下建了一个控制台程序。为了弄清楚,我建了2个文件。大致如下://file.cvoid f1(void){printf("this is f1. ");}void f2(void){printf("this is f2. ");}//file2.cvoid f1(void);extern void f2(void);int main(void){f1();f2();}

aver在python中表示什么

在Python里的表示为函数定义。aver是average的缩写,函数定义时,当三种参数都出现,其定义顺序为必备参数、args、默认参数,使用aver接收返回值。

PyTorch+sklearn划分训练集/验证集

参数 n_splits 是将训练数据分成train/test对的组数,可根据需要进行设置,默认为10 参数 test_size 和t rain_size 是用来设置train/test对中train和test所占的比例。例如: 1.提供10个数据num进行训练和测试集划分 2.设置train_size=0.8 test_size=0.2 3.train_num=num train_size=8 test_num=num test_size=2 4.即10个数据,进行划分以后8个是训练数据,2个是测试数据 注 :train_num≥2,test_num≥2 ;test_size+train_size可以小于1 参数 andom_state 控制是将样本随机打乱 1.其产生指定数量的独立的train/test数据集划分数据集划分成n组。 2.首先将样本随机打乱,然后根据设置参数划分出train/test对。 3.其创建的每一组划分将保证每组类比比例相同。即第一组训练数据类别比例为2:1,则后面每组类别都满足这个比例 记载一个数据增强方法: cutout github地址: https://github.com/uoguelph-mlrg/Cutout 其思想也很简单,就是对训练图像进行随机遮挡,该方法激励神经网络在决策时能够更多考虑次要特征,而不是主要依赖于很少的主要特征,如下图所示: 该方法需要设置n_holes和length两个超参数,分别表示遮挡的补丁数量和遮挡方形补丁的长度。首先建立cutout对象,使用 call 来封装方法,使之可调用:

python 里面的时间怎么由原来的实时更换为之前五分钟?

有一个笨方法,5分钟前先求出来,存起来,然后现在要用再调出来

python定义一个圆柱体类Cylinder,包含底面半径和高两个属性(数据成员)

比武结束。于生看透这险恶浑混的一切,放弃武状元荣耀,与仆人成伯策马而去。

python 值错误:字段名异常

{0}的右边是大括号},不是中括号]。

y在python中等于多少

f(x)。中数学定义:?y等于f(x),y是x的函数,x是自变量,python中函数定义:函数是逻辑结构化和过程化的一种编程方法。

427. 建立四叉树(Python)

难度:★★★☆☆ 类型:二叉树 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的. 每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子结点时为真。val 变量储存叶子结点所代表的区域的值。 你的任务是使用一个四叉树表示给定的网络。下面的例子将有助于你理解这个问题: 给定下面这个8 x 8 网络,我们将这样建立一个对应的四叉树: 由上文的定义,它能被这样分割: 对应的四叉树应该像下面这样,每个结点由一对 (isLeaf, val) 所代表. 对于非叶子结点,val 可以是任意的,所以使用 * 代替。 题目中四叉树的构建是为了表示一个布尔方阵,我们的构建遵循构建法则,我们定义一个构建函数,实现构建指定区域四叉树的功能,通过递归调用本函数实现所有四叉树结点的构建。这里重点介绍使用函数递归调用实现四叉树构建的思路: 1. 函数的功能 实现指定范围的四叉树构建。 2. 函数的输入和输出 我们设计的四叉树,需要只需要输入要构建网格中四叉树的网格即可。不过我们这里为了便于递归,把整个网格作为每次递归函数的输入,并且指定要构建四叉树的范围,这里的范围用左上角坐标和区域边长来表示。 函数的输出是根据指定网格构建而成的四叉树,换句话说,这个四叉树是输入网格的唯一表示。 3. 函数的实现 如有疑问或建议,欢迎评论区留言~

python中的不等于符号怎么打?

Python是常用的一种编程语言,编程过程中,使用“!=”(即:不等于)运算符可以比较两个变量的值是否不相等。今天教大家在Python编程中如何使用“不等于”运算符。工具/原料:联想小新pro13、Win10、Python3.6.5、PyCharm2019.3.31、首先在PyCharm软件中,打开一个Python项目。2、在Python项目中,新建并打开一个空白的python文件(比如:test.py)。3、在python文件编辑区中,输入:“x = 1234”。4、继续输入:“y = 4321”,点击Enter键。5、然后输入:“print(x!=y)”,打印出相关数据结果。6、在编辑区域点击鼠标右键,在弹出菜单中选择“运行”选项。7、在运行结果窗口中查看运行结果,可以看到已经使用了“不等于”运算符比较了两个变量的值。

python 用time.strptime转换时间格式出错,代码如下:

格式time.strptime("30Nov00","%d%b%y")中的"30Nov00"改"30 Nov 00"(少二个空格)

python小于等于怎么表示

<=假设a是1,b是2== 等于: 比较对象是否相等 比如:(a == b) 返回 False> 大于:返回x是否大于y 比如:(a > b) 返回 False。< 小于: 返回x是否小于y 比如:(a < b) 返回 True>= 大于等于: 返回x是否大于等于y。 比如:(a >= b) 返回 False。<= 小于等于:返回x是否小于等于y。 比如:(a <= b) 返回 True

python ambiguous variable name "l"

今天在写demo时 pycharm l 标黄并提示此信息,强迫症的我是实在受不了的,从字面意思可知 变量名不明确 ?,然后查了下草丛github上找到了答案

changchunwangandportyouwanttohaveahappytreasureyouknow是什么意思

你好,chang chun wang and port you want to have a happy trea sure you know 翻译成中文是:王长春和港口你想有一个快乐的处理确定你知道——————供参考,希望对你有帮助。

python语言中PYTHONPATH是什么

这个是C语言的运行库,你去查C语言的函数帮助就可以了.

ubuntu16.04下切换python版本

对于ubuntu 16.04,由于本身是自带python,这样就减少了在windows下的下载和环境变量配置,非常不错。但是他本身是自带两个版本的python,2.X和3.X,两个版本,两个版本默认的是使用2.X,毕竟3.X是一个趋势,今后我这边应该也会主要使用3.X版本,所以这里记录一下如果在版本间切换以及如何把python版本切换到3.X下的方法。注意:要以root身份操作一: 确认本机下的python默认版本。调出终端,输入python即可查看默认的版本:二:如果想要查看本机自带的python的另一个版本为多少,需要命令python3即可:(博主电脑里自带的是2.7和3.5并没有3.6,我自己电脑的3.6是另外安装的,这个简单,就不多说了,但是输入Python3时显示的是3.5并不是3.6,显示3.6要输入Python3.6,估计是因为我电脑里面3.5的优先级高于3.6,关于优先级的操作,在下面)三: 如何切换这两个版本以及切换默认的python版本:我们可以使用 update-alternatives 来为整个系统更改Python 版本。以 root 身份登录,首先罗列出所有可用的python 替代版本信息:update-alternatives --list pythonupdate-alternatives: error: no alternatives for python如果出现以上所示的错误信息,则表示 Python 的替代版本尚未被update-alternatives 命令识别。想解决这个问题,我们需要更新一下替代列表,将python2.7 和 python3.4 放入其中。# update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode# update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode(这里我设置没有成功,但是我还是把电脑里的三个Python版本全都设置了一遍,最后还是成功切换Python版本了)--install 选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先 级的选项就会被选中。这个例子中,我们为/usr/bin/python3.4 设置的优先级为2,所以update-alternatives 命 令会自动将它设置为默认 Python 版本。# python --versionPython 3.5.2(因为上面博主没有设置成功,所以这一步显示的还是2.7)接下来,我们再次列出可用的 Python 替代版本。# update-alternatives --list python/usr/bin/python2.7/usr/bin/python3.5现在开始,我们就可以使用下方的命令随时在列出的 Python 替代版本中任意切换了。# update-alternatives --config python接下来,我们再次列出可用的 Python 替代版本。# update-alternatives --list python/usr/bin/python2.7/usr/bin/python3.5现在开始,我们就可以使用下方的命令随时在列出的 Python 替代版本中任意切换了。(这一步是最关键的)# update-alternatives --config python下面就简单了,会提示你输入序号,你想用哪个版本为默认,就输入序号就可以了!

ubuntu上怎么设置默认python命令是执行python3而不是python2

alternatives这么好的机制用起来呀。shell里执行:sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150此时你会发现如果要切换到Python2,执行:sudo update-alternatives --config python按照提示输入选择数字回车即可。这样你甚至可以将自己喜欢的任意版本python安装到任意位置,然后使用update-alternatives将其设置为系统默认python。

最实用的自由切换python版本,建议收藏

python -V sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo update-alternatives --config python

在CentOS 8上安装Python

在CentOS 8上安装Python 3 要在CentOS 8上安装Python 3,请以root或sudo用户身份在终端中运行以下命令: $ sudo dnf install python3 要验证安装,请输入以下命令检查Python版本: $ python3 --version 参考: 在Linux系统中检查Python版本(Python Version)的方法 。 在选写本文时,CentOS存储库中可用的Python 3的最新版本是“3.6.x”: Python 3.6.8 注:该命令还会安装pip。 要运行Python,你需要明确输入python3并运行pip输入pip3。 你应该始终喜欢使用yum或dnf安装发行版提供的python模块,因为它们受支持并经过测试可以在CentOS 8上正常工作,仅在虚拟环境中使用pip,Python虚拟环境允许你将Python模块安装在特定项目的隔离位置,而不必全局安装,这样,你不必担心会影响其他Python项目。 Python 3模块软件包的名称以“python3”为前缀,例如,要安装paramiko模块,应运行: $ sudo dnf install python3-paramiko 在CentOS 8上安装Python 2 Python 2软件包也包含在默认的CentOS 8存储库中。 要安装Python 2,请输入以下命令: $ sudo dnf install python2 通过键入以下命令验证安装: $ python2 --version 输出应如下所示内容: Python 2.7.15 要执行Python 2,请输入python2,然后运行pip并输入pip2。 设置默认Python版本(Unversioned Python命令) 如果你有希望在系统路径中找到python命令的应用程序,则需要创建unversioned python命令并设置默认版本。 要将Python 3设置为系统范围内的非版本化python命令,请使用Alternatives实用程序: $ sudo alternatives --set python /usr/bin/python3 对于Python 2,输入: $ sudo alternatives --set python /usr/bin/python2 Alternatives命令创建一个指向指定python版本的symlink python。 在终端中键入python --version,你应该看到默认的Python版本。 要更改默认版本,请使用上面的命令之一,如果要删除未版本控制的python命令,请输入: $ sudo alternatives --auto python 结论 在CentOS 8操作系统中,默认情况下未安装Python,如果有需要,按照以上方法操作即可。 如果做一个总结的话,那就是:要安装Python 3,请键入dnf install python3,如果是安装python 2,请键入dnf install python2 参考: https://ywnz.com/linuxjc/6033.html

ubuntu上怎么设置默认python命令是执行python3而不是python2

alternatives这么好的机制用起来呀。shell里执行:sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150此时你会发现如果要切换到Python2,执行:sudo update-alternatives --config python按照提示输入选择数字回车即可。这样你甚至可以将自己喜欢的任意版本python安装到任意位置,然后使用update-alternatives将其设置为系统默认python。

Python中length name是什么意思?

ls 命令,也就是 list ,是列出当前文件夹下所有文件/文件夹的命令。Length 表示文件的长度也就是大小。如果是文件夹则 Length 为空。Name 表示文件/文件夹名称

Python - pytest

目录 pytest是Python的单元测试框架,同自带的unittest框架类似,但pytest框架使用起来更简洁,效率更高。 pytest特点 安装 测试 在测试之前要做的准备 我的演示脚本处于这样一个的目录中: 踩坑:你创建的pytest脚本名称中不允许含有 . ,比如 1.简单上手.py ,这样会报错。当然,可以这么写 1-简单上手.py demo1.py : 上例中,当我们在执行(就像Python解释器执行普通的Python脚本一样)测试用例的时候, pytest.main(["-s", "demo1.py"]) 中的传参需要是一个元组或者列表(我的pytest是5.2.2版本),之前的版本可能需要这么调用 pytest.main("-s demo1.py") ,传的参数是str的形式,至于你使用哪种,取决于报不报错: 遇到上述报错,就是参数需要一个列表或者元组的形式,而我们使用的是str形式。 上述代码正确的执行结果是这样的: 大致的信息就是告诉我们: pytest.main(["-s", "demo1.py"])参数说明 除了上述的函数这种写法,也可以有用例类的写法: 用法跟unittest差不多,类名要以 Test 开头,并且其中的用例方法也要以 test 开头,然后执行也一样。 执行结果: 那么,你这个时候可能会问,我记得unittest中有setup和teardown的方法,难道pytest中没有嘛?你怎么提都不提?稳住,答案是有的。 接下来,我们来研究一下pytest中的setup和teardown的用法。 我们知道,在unittest中,setup和teardown可以在每个用例前后执行,也可以在所有的用例集执行前后执行。那么在pytest中,有以下几种情况: 来一一看看各自的用法。 模块级别setup_module/teardown_module 执行结果: 类级别的setup_class/teardown_class 执行结果: 类中方法级别的setup_method/teardown_method 执行结果: 函数级别的setup_function/teardown_function 执行结果: 小结 该脚本有多种运行方式,如果处于PyCharm环境,可以使用右键或者点击运行按钮运行,也就是在pytest中的主函数中运行: 也可以在命令行中运行: 这种方式,跟使用Python解释器执行Python脚本没有什么两样。也可以如下面这么执行: 当然,还有一种是使用配置文件运行,来看看怎么用。 在项目的根目录下,我们可以建立一个 pytest.ini 文件,在这个文件中,我们可以实现相关的配置: 那这个配置文件中的各项都是什么意思呢? 首先, pytest.ini 文件必须位于项目的根目录,而且也必须叫做 pytest.ini 。 其他的参数: OK,来个示例。 首先,(详细目录参考开头的目录结构)在 scripts/test_case_01.py 中: 在 scripts/test_case_dir1/test_case02.py 中: 那么,在不同的目录或者文件中,共有5个用例将被执行,而结果则是两个失败三个成功。来执行验证一下,因为有了配置文件,我们在终端中(前提是在项目的根目录),直接输入 pytest 即可。 由执行结果可以发现, 2 failed, 3 passed ,跟我们的预期一致。 后续执行相关配置都来自配置文件,如果更改,会有相应说明,终端都是直接使用 pytest 执行。 我们知道在unittest中,跳过用例可以用 skip ,那么这同样是适用于pytest。 来看怎么使用: 跳过用例,我们使用 @pytest.mark.skipif(condition, reason) : 然后将它装饰在需要被跳过用例的的函数上面。 效果如下: 上例执行结果相对详细,因为我们在配置文件中为 addopts 增加了 -v ,之前的示例结果中,没有加! 另外,此时,在输出的控制台中, 还无法打印出 reason 信息,如果需要打印,则可以在配置文件中的 addopts 参数的 -s 变为 -rs : 如果我们事先知道测试函数会执行失败,但又不想直接跳过,而是希望显示的提示。 Pytest 使用 pytest.mark.xfail 实现预见错误功能:: 需要掌握的必传参数的是: 那么关于预期失败的几种情况需要了解一下: 结果如下: pytest 使用 x 表示预见的失败(XFAIL)。 如果预见的是失败,但实际运行测试却成功通过,pytest 使用 X 进行标记(XPASS)。 而在预期失败的两种情况中,我们不希望出现预期失败,结果却执行成功了的情况出现,因为跟我们想的不一样嘛,我预期这条用例失败,那这条用例就应该执行失败才对,你虽然执行成功了,但跟我想的不一样,你照样是失败的! 所以,我们需要将预期失败,结果却执行成功了的用例标记为执行失败,可以在 pytest.ini 文件中,加入: 这样就就把上述的情况标记为执行失败了。 pytest身为强大的单元测试框架,那么同样支持DDT数据驱动测试的概念。也就是当对一个测试函数进行测试时,通常会给函数传递多组参数。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码。 当然,我们可以把这些参数写在测试函数内部进行遍历。不过虽然参数众多,但仍然是一个测试,当某组参数导致断言失败,测试也就终止了。 通过异常捕获,我们可以保证程所有参数完整执行,但要分析测试结果就需要做不少额外的工作。 在 pytest 中,我们有更好的解决方法,就是参数化测试,即每组参数都独立执行一次测试。使用的工具就是 pytest.mark.parametrize(argnames, argvalues) 。 使用就是以装饰器的形式使用。 只有一个参数的测试用例 来看(重要部分)结果:: 可以看到,列表内的每个手机号,都是一条测试用例。 多个参数的测试用例 (重要部分)结果: 可以看到,每一个手机号与每一个验证码都组合一起执行了,这样就执行了4次。那么如果有很多个组合的话,用例数将会更多。我们希望手机号与验证码一一对应组合,也就是只执行两次,怎么搞呢? 在多参数情况下,多个参数名是以 , 分割的字符串。参数值是列表嵌套的形式组成的。 固件(Fixture)是一些函数,pytest 会在执行测试函数之前(或之后)加载运行它们,也称测试夹具。 我们可以利用固件做任何事情,其中最常见的可能就是数据库的初始连接和最后关闭操作。 Pytest 使用 pytest.fixture() 定义固件,下面是最简单的固件,访问主页前必须先登录: 结果: 在之前的示例中,你可能会觉得,这跟之前的setup和teardown的功能也类似呀,但是,fixture相对于setup和teardown来说更灵活。pytest通过 scope 参数来控制固件的使用范围,也就是作用域。 比如之前的login固件,可以指定它的作用域: 很多时候需要在测试前进行预处理(如新建数据库连接),并在测试完成进行清理(关闭数据库连接)。 当有大量重复的这类操作,最佳实践是使用固件来自动化所有预处理和后处理。 Pytest 使用 yield 关键词将固件分为两部分, yield 之前的代码属于预处理,会在测试前执行; yield 之后的代码属于后处理,将在测试完成后执行。 以下测试模拟数据库查询,使用固件来模拟数据库的连接关闭: 结果: 可以看到在两个测试用例执行前后都有预处理和后处理。 pytest中还有非常多的插件供我们使用,我们来介绍几个常用的。 先来看一个重要的,那就是生成测试用例报告。 想要生成测试报告,首先要有下载,才能使用。 下载 如果下载失败,可以使用PyCharm下载,怎么用PyCharm下载这里无需多言了吧。 使用 在配置文件中,添加参数: 效果很不错吧! 没完,看我大招 Allure框架是一个灵活的轻量级多语言测试报告工具,它不仅以web的方式展示了简洁的测试结果,而且允许参与开发过程的每个人从日常执行的测试中最大限度的提取有用信息。 从开发人员(dev,developer)和质量保证人员(QA,Quality Assurance)的角度来看,Allure报告简化了常见缺陷的统计:失败的测试可以分为bug和被中断的测试,还可以配置日志、步骤、fixture、附件、计时、执行 历史 以及与TMS和BUG管理系统集成,所以,通过以上配置,所有负责的开发人员和测试人员可以尽可能的掌握测试信息。 从管理者的角度来看,Allure提供了一个清晰的“大图”,其中包括已覆盖的特性、缺陷聚集的位置、执行时间轴的外观以及许多其他方便的事情。allure的模块化和可扩展性保证了我们总是能够对某些东西进行微调。 少扯点,来看看怎么使用。 Python的pytest中allure下载 但由于这个 allure-pytest 插件生成的测试报告不是 html 类型的,我们还需要使用allure工具再“加工”一下。所以说,我们还需要下载这个allure工具。 allure工具下载 在现在allure工具之前,它依赖Java环境,我们还需要先配置Java环境。 注意,如果你的电脑已经有了Java环境,就无需重新配置了。 配置完了Java环境,我们再来下载allure工具,我这里直接给出了百度云盘链接,你也可以去其他链接中自行下载: 下载并解压好了allure工具包之后,还需要将allure包内的 bin 目录添加到系统的环境变量中。 完事后打开你的终端测试: 返回了版本号说明安装成功。 使用 一般使用allure要经历几个步骤: 来看配置 pytest.ini : 就是 --alluredir ./report/result 参数。 在终端中输入 pytest 正常执行测试用例即可: 执行完毕后,在项目的根目下,会自动生成一个 report 目录,这个目录下有: 接下来需要使用allure工具来生成HTML报告。 此时我们在终端(如果是windows平台,就是cmd),路径是项目的根目录,执行下面的命令。 PS:我在pycharm中的terminal输入allure提示"allure" 不是内部或外部命令,也不是可运行的程序或批处理文件。但windows的终端没有问题。 命令的意思是,根据 reportresult 目录中的数据(这些数据是运行pytest后产生的)。在 report 目录下新建一个 allure_html 目录,而这个目录内有 index.html 才是最终的allure版本的HTML报告;如果你是重复执行的话,使用 --clean 清除之前的报告。 结果很漂亮: allure open 默认的,allure报告需要HTTP服务器来打开,一般我们可以通过pycharm来完成,另外一种情况就是通过allure自带的open命令来完成。 allure的其他用法 当然,故事还是没有完!在使用allure生成报告的时候,在编写用例阶段,还可以有一些参数可以使用: allure.title与allure.description feature和story 由上图可以看到,不同的用例被分为不同的功能中。 allure.severity allure.severity 用来标识测试用例或者测试类的级别,分为blocker,critical,normal,minor,trivial5个级别。 severity的默认级别是normal,所以上面的用例5可以不添加装饰器了。 allure.dynamic 在之前,用例的执行顺序是从上到下依次执行: 正如上例的执行顺序是 3 1 2 。 现在,来看看我们如何手动控制多个用例的执行顺序,这里也依赖一个插件。 下载 使用 手动控制用例执行顺序的方法是在给各用例添加一个装饰器: 那么, 现在的执行顺序是 2 1 3 ,按照order指定的排序执行的。 如果有人较劲传个0或者负数啥的,那么它们的排序关系应该是这样的: 失败重试意思是指定某个用例执行失败可以重新运行。 下载 使用 需要在 pytest.ini 文件中, 配置: 给 addopts 字段新增(其他原有保持不变) --reruns=3 字段,这样如果有用例执行失败,则再次执行,尝试3次。 来看示例: 结果: 我们也可以从用例报告中看出重试的结果: 上面演示了用例失败了,然后重新执行多少次都没有成功,这是一种情况。 接下来,来看另一种情况,那就是用例执行失败,重新执行次数内通过了,那么剩余的重新执行的次数将不再执行。 通过 random 模块帮助我们演示出在某次执行中出现失败的情况,而在重新执行的时候,会出现成功的情况,看结果: 可以看到,用例 02 重新执行了一次就成功了,剩余的两次执行就终止了。 一条一条用例的执行,肯定会很慢,来看如何并发的执行测试用例,当然这需要相应的插件。 下载 使用 在配置文件中添加: 就是这个 -n=auto : 并发的配置可以写在配置文件中,然后其他正常的执行用例脚本即可。另外一种就是在终端中指定,先来看示例: 结果: pytest-sugar 改变了 pytest 的默认外观,添加了一个进度条,并立即显示失败的测试。它不需要配置,只需 下载插件即可,用 pytest 运行测试,来享受更漂亮、更有用的输出。 下载 其他照旧执行用例即可。 pytest-cov 在 pytest 中增加了覆盖率支持,来显示哪些代码行已经测试过,哪些还没有。它还将包括项目的测试覆盖率。 下载 使用 在配置文件中: 也就是配置 --cov=./scripts ,这样,它就会统计所有 scripts 目录下所有符合规则的脚本的测试覆盖率。 执行的话,就照常执行就行。 结果: 更多插件参考:https://zhuanlan.zhihu.com/p/50317866 有的时候,在 pytest.ini 中配置了 pytest-html 和 allure 插件之后,执行后报错: 出现了这个报错,检查你配置的解释器中是否存在 pytest-html 和 allure-pytest 这两个模块。如果是使用的pycharm ide,那么你除了检查settings中的解释器配置之外,还需要保证运行脚本的编辑器配置是否跟settings中配置一致。

Python+selenium自动化,Allure包不生成index.html文件,解决方法

查看ui自动化生成的html报告。pytest+allure只生成了xml报告--json格式的数据,没有生成html的index报告。 场景: 排查: 1.cmd输入allure --version,查看是安装成功 2.pycharm输入pip freeze,查看包是否配置成功 都显示安装、配置成功 3.pycharm软件Terminal中输入allure 怀疑是pycharm软件哪里配置除了问题,排查浪费了N多时间。 最终总算是配置好了~ 解决方法:

Pytest-allure,为公司定制专属测试框架

Python安装:python.org/downloads pycharm安装:https://www.jetbrains.com/pycharm/download pytest安装:pip install -U pytest 所有的测试模块文件名都需要满足test_*.py格式或*_test.py格式。 在测试模块文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以Test开头,不然pytest是不会去运行该class的) 在测试模类中,可以包含一个或多个test_开头的函数。 此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。 命令行运行:在终端(Teminal,cmd,shell)里面直接执行pytest命令 会按默认的命名规则去找用例,并且执行 pycharm插件:pytest in xxx.py 一定只运行这一个py文件 按命名规则找用例执行 python执行:执行的py文件(一般是这样运行) if __name__ == "__main__": pytest.main(["-s"]) Allure 下载最新版本: https://github.com/allure-framework/allure2/releases 解压到非中文目录下 然后设置环境变量: 将allure/bin目录添加到path变量 重新打开cmd,运行allure --version 安装allure-pytest插件 pip install allure-pytest 创建项目或者包 创建脚本文件test-allure.py 修改运行方式为python运行 运行test-allure.py,会自动化生成测试报告 打开测试报告 注解说明

Python函数将秒到分钟,小时,天问题,怎么解决

为了美化日志输出程序执行的总时间,同时人们能够快速获取所需要的信息,需要把输出的秒数转换成  228 days, 22 hour, 9 min,39.0 sec 这样的格式。因为考虑到判断的重复型,这个函数运用递归的思维方式编写的。[python] view plain copy#coding:utf8  import time  import math  def changeTime(allTime):  day = 24*60*60  hour = 60*60  min = 60  if allTime <60:          return  "%d sec"%math.ceil(allTime)  elif  allTime > day:  days = divmod(allTime,day)   return "%d days, %s"%(int(days[0]),changeTime(days[1]))  elif allTime > hour:  hours = divmod(allTime,hour)  return "%d hours, %s"%(int(hours[0]),changeTime(hours[1]))  else:  mins = divmod(allTime,min)  return "%d mins, %d sec"%(int(mins[0]),math.ceil(mins[1]))  if __name__=="__main__":  nums = 19778979  t = time.time()  data = changeTime(nums)  print time.time() -t  print data  [python] view plain copyirsadmin@IR-ZHANGCHENG ~/Desktop/iOpenData   $ python dataGenerat.py  0.0  3 min,18.0 sec  irsadmin@IR-ZHANGCHENG ~/Desktop/iOpenData   $ python dataGenerat.py  0.0  228 days, 22 hour, 9 min,39.0 sec  irsadmin@IR-ZHANGCHENG ~/Desktop/iOpenData   $  

Python中dict为什么比list浪费内存?求大神,感激不尽!!

dict的key比列表的数字索引数据结构复杂啊 .

Python中list的实现

原文链接 这篇文章介绍了Python中list是如何实现的。 在Python中list特别有用。让我们来看下list的内部是如何实现的。 来看下面简单的程序,在list中添加一些整数并将他们打印出来。 正如你所看到的,list是可以迭代的。 Python中list是用下边的C语言的结构来表示的。 ob_item 是用来保存元素的指针数组,allocated是 ob_item 预先分配的内存总容量 让我们来看下当初始化一个空list的时候发生了什么 L = [] 非常重要的是知道list申请内存空间的大小(后文用allocated代替)的大小和list实际存储元素所占空间的大小( ob_size )之间的关系, ob_size 的大小和 len(L) 是一样的,而allocated的大小是在内存中已经申请空间大小。通常你会看到allocated的值要比 ob_size 的值要大。这是为了避免每次有新元素加入list时都要调用realloc进行内存分配。接下来我们会看到更多关于这些的内容。 我们在list中追加一个整数:L.append(1)。发生了什么?调用了内部的C函数app1() 来让我们看下 list_resize() , list_resize() 会申请多余的空间以避免调用多次 list_resize() 函数,list增长的模型是:0, 4, 8, 16, 25, 35, 46, 58, 72, 88, … 开辟了四个内存空间来存放list中的元素,存放的第一个元素是1。你可以从下图中看到L[0]指向了我们刚刚加进去的元素。虚线的框代表了申请了但是还没有使用(存储元素)的内存空间现在我们在列表的第一个位置插入一个整数5:L.insert(1, 5),看看内部发生了什么。调用了ins1()当你弹出list的最后一个元素:L.pop()。调用listpop(), list_resize 在函数listpop()内部被调用,如果这时 ob_size (译者注:弹出元素后)小于allocated(译者注:已经申请的内存空间)的一半。这时申请的内存空间将会缩小。 Pop的时间复杂度是O(1)Python list对象有一个方法可以移除一个指定的元素。调用listremove()。 切开list和删除元素,调用了 list_ass_slice() (译者注:在上文slice list between element"s slot and element"s slot + 1被调用),来看下 list_ass_slice() 是如何工作的。在这里,低位为1 高位为2(译者注:传入的参数),我们移除在1号内存空间存储的数据5 Remove的时间复杂度为O(n)文中list的sort部分没有进行翻译 核心部分

python里chi是啥

python里chi是一个字符串的格式化。Python是一种跨平台的计算机程序设计语言,是ABC语言的替代品,属于面向对象的动态类型语言,最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

Python里method和function的区别

呃,确实误导了。function和method是两个不同的语境下的概念。function是从代码机制角度来说的,表示函数这个机制,它是与“语句”相对应的概念。而method是从面向对象机制角度来说的,它表示类或对象的一个方法(也称操作),它是与“属性”等相对应的概念。通常来说,function与method是可以互换的。严格地说,虽然方法是由函数来实现的,但所有的函数并不一定是方法,例如:构造函数、析构函数、属性访问器等等都是由函数实现的,但它们都不是方法。有些私有函数的设计意图也是从面向过程来考虑的,并不是要提供一个method。

python opencv相机标定格子边长的参数怎么写入cv2.findchessboardcorners

OpenCV使用棋盘格板进行标定,如下图所示。为了标定相机,我们需要输入一系列三维点和它们对应的二维图像点。在黑白相间的棋盘格上,二维图像点很容易通过角点检测找到。由于我们采集中,是将相机放在一个地方,而将棋盘格定标板进行移动变换不同的位置,然后对其进行拍摄。

python解决四皇后问题

import randomimport pprintchessboard = [ [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], [" "," "," "," "," "," "," "," ",], ]def putqueen(pos): global chessboard i,j = pos delta = i-j if chessboard[i][j] != " ": return False for m in range(8): if chessboard[m][j] == " ": chessboard[m][j] = "x" if chessboard[i][m] == " ": chessboard[i][m] = "x" if 0 <= m+i-j < 8 and chessboard[m+i-j][m] == " ": chessboard[m+i-j][m] = "x" if 0 <= i+j-m < 8 and chessboard[m][i+j-m] == " ": chessboard[m][i+j-m] = "x" chessboard[i][j] = "O" print pos return Truedef getRandPos(): return random.randint(0,7), random.randint(0,7)def show(): global chessboard print " ".join([" ".join(r) for r in chessboard])# 1stputqueen(getRandPos())# 2ndwhile True: if putqueen(getRandPos()): break# 3rdwhile True: if putqueen(getRandPos()): break# 4thwhile True: if putqueen(getRandPos()): breakshow()

python字典定义修改变量后原字典也变了?

这是"引用"导致的。Python中很多情况下的赋值其实都是以引用的方式实现的,也就是说内存中的数据就那么一个,赋值的时候只是有定义了一个指针指向这个数值的存储ID。你用id()查看存储位置就明白了。如果,你不想原始数据发生变化你可以使用copy模块中的copy和deepcopy进行赋值。如有帮助,望采纳!!!

python语句寻求解答

new_alien=...这一句会重新建立这个字典,它使用的地址会发生改变,也就是说,它与这前的new_alien是完全不同的。因此,如果这一句在for外面的话,aliens中的每个元素实际上都是保存的同一个字典对象,对其中一个进行修改,都是修改aliens引用的那个字典,因此会看到aliens中每个字典都同步改变了。如果在for中去为new_alien赋值,每次都会得到一个新的字典,aliens中的每个元素都是不同的,修改其中一个不会影响到其它字典。

seek函数用法python

参数offset--开始的偏移量,也就是代表需要移动偏移的字节数whence:可选,默认值为0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。file.seek(off,whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。

如何安装 cheetah for python2.7

编辑环境: [root@openstack-01 rhel7.x]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) openstack版本:Mitaka python-zope-interface python-jinja2 python-cheetah python-cheetah python-webtest python-werkzeug

如何安装alfred python库

定义模块,只要使用文本编辑器,把一些python代码输入到文本中,然后以.py为后缀名进行保存,任何此类文件都会被认为是python模块。比如说,下面的代码输入到一个文件中,就可以看作是一个模块:[python] view plaincopyprint?def printme(var): print var if __name__ == "__main__": printme(1) 假设说输入到a.py中,那么import a就可以把这个模块导入。然后可执行a.printme(3),屏幕即可打印出3。

python批量删除链表

python批量删除链表?批量删除链表的话就可以按chee键,这个时候它就可以批量删除链表,因为它这个链表的话是批量删除就可以批量选择,按住chee键可以一键选择,然后就可以可以批量删除

Pytorch Lightning系列 如何使用ModelCheckpoint

在训练机器学习模型时,经常需要缓存模型。 ModelCheckpoint 是Pytorch Lightning中的一个Callback,它就是用于模型缓存的。它会监视某个指标,每次指标达到最好的时候,它就缓存当前模型。 Pytorch Lightning文档 介绍了ModelCheckpoint的详细信息。 我们来看几个有趣的使用示例。 示例1 注意,我们把epoch和val_loss信息也加入了模型名称。 示例2 这个使用例子非常像示例1,唯一的差别在于指标的名称是由我们自己指定的,而不是由Pytorch Lightning自动生成的 ( auto_insert_metric_name=False )。通过这样的方式,我们可以使用类似 val/mrr 的指标名。从而统一tensorboard和pytorch lightning对指标的不同描述方式。 Pytorch Lightning把ModelCheckpoint当作最后一个CallBack,也就是它总是在最后执行。这一点在我看来很别扭。如果你在训练过程中想获得best_model_score或者best_model_path,它对应的是上一次模型缓存的结果,而并不是最新的模型缓存结果

total += i 在python中什么意思

就是total = total + i,让total增加i

python中total什么用法

python中total的用法是计数。根据python官网资料显示,total的用法是计数,类似于sum,count等计算函数。Python由荷兰数学和计算机科学研究学会的GuidovanRossum于1990年代初设计。

python自学菜鸟 expected an indented block什么意思

说明你的代码缩进有问题。

在python中如何设置当前工作目录

import osos.chdir("要设置的当前目录")

python如何使用gitbash执行git命令?

代码如下:#!/usr/bin/env python# -*- coding: utf-8 -*-# @name   : find_t.py# @author : cat# @date   : 2017/8/2.import osimport timedef bash_shell(bash_command):"""python 中执行 bash 命令     :param bash_command::return: bash 命令执行后的控制台输出"""try:       return os.popen(bash_command).read().strip()    except:        return Nonedef find_target(target_path="./../", key=".git"):"""查找目标目录所在的目录 : 如 /aa/bb/.git --> return /aa/bb/:param target_path::param key: target:return:"""walk = os.walk(target_path)    for super_dir, dir_names, file_names in walk:        for dir_name in dir_names:            if dir_name == key:dir_full_path = os.path.join(super_dir, dir_name)                # print(dir_full_path, super_dir, dir_name, sep=" ## ")yield super_dirif __name__ == "__main__":print("start execute bash ...........")st = time.time()cwd = os.getcwd()    # this for repofor repo_path in find_target(os.getcwd(), key=".repo"):os.chdir(repo_path)       if repo_path == os.getcwd():print("find repo in -->", repo_path)print(bash_shell("pwd"))print(bash_shell("repo forall -c git config core.fileMode false --replace-all"))        else:print("error in chdir 2 {}".format(repo_path))        if os.getcwd() != cwd:os.chdir(cwd)       if os.getcwd() != cwd:print("change 2 cwd FAIL !!!  {}".format(cwd))    # this for gitfor git_path in find_target(os.getcwd(), key=".git"):os.chdir(git_path)       if git_path == os.getcwd():print("find git in -->", git_path)print(bash_shell("pwd"))print(bash_shell("git config --global core.filemode false"))        else:print("error in chdir 2 {}".format(git_path))        if os.getcwd() != cwd:os.chdir(cwd)       if os.getcwd() != cwd:print("change 2 cwd FAIL !!!  {}".format(cwd))et = time.time()print("    #### execute finished in {:.3f} seconds ####".format(et - st))print(" ")    # test for bash_command# print(bash_shell("git init"))# print(bash_shell("ls -al"))

Python之OS模块操作有哪些?这18个高频函数是重中之重,你会用?

案例一:新建一个txt文件并向文件中写入数据。 代码与结果如上图所示。 案例:os.rename("kitty1.txt",""kitty2.txt") 2.1 输出结果:将kitty1文件改为kitty2 2.2 文件解析说明:文件重命名,将test1文件改为test2文件。 案例:os.remove("kitty2.txt") 3.1 输出结果:kitty2.txt文件被删除 3.2 解析说明:删除文件。 案例:os.mkdir("kitty") 4.1 输出结果:创建一个文件夹名字为kitty 4.2 解析说明:创建文件夹。 4.3 解析说明:list.pop()就直接从list中的最末尾处删除一个元素。 案例:os.rmdir("test") 5.1 输出结果:删除一个文件夹 5.3 解析说明:删除文件夹. 解析说明:可以取代操作系统特定的路径分割符 案例一:print(os.getcwd()) 输出结果:D:PythonProjectPython编程基础 解析说明:相当于linux下的pwd,获取当前目录。 案例一:os.chdir(os.getcwd()+os.sep+"kitty") 解析说明:进入到某个目录下。 解析说明:相当于linux下的ls,显示当前目录下的文件。 解析说明:创建一个aa文件夹,再在里面创建一个bb文件夹。 解析说明:删除aa文件夹和aa文件夹中的bb文件夹。 解析说明:判断是否是个文件。 解析说明:判断是否是个文件夹。 解析说明:判断文件是否存在。 解析说明:获取文件大小。 解析说明:返回文件的绝对路径。 解析说明:获取文件的文件名,注意参数需要传入绝对路径。 解析说明:获取文件的所在目录,注意参数需要传入绝对路径。

python os.chdir中文目录错误

文件名或目录含中文时,需要encode("utf-8")另外,脚本前面加上# -*- coding:utf-8 -*-

python os 模块的os.walk()与os.chdir()简述

os.chdir() 简述 os.chdir 主要用于改变当前工作目录到指定的工作目录 语法 返回值 如果允许访问返回 True , 否则返回False。 举例 os.walk() 简述 os.walk()用于在文件目录中进行查找和遍历操作。是一个方便易用的文件,目录遍历器 语法 参数 举例

pythoncharm注册之后怎么安装

在网上下载pycharm安装包,比如下面这种格式。双击运行,进入安装向导界面。点击“NEXT”同意许可条款。选择安装位置,尽量不要安装在系统盘。这是安装选项,是否关联文件扩展名。。选择。确认之后,安装。安装完成之后,点击运行,然后开始运行pycharm。

python中rate[-1]是什么意思

python中rate[-1]是指reshape之后的array的新形状面积是与原始形状相同。-1表示未知的长或者宽。numpy允许将新的形状参数之一指定为-1。

Chariot有没有python接口

看提示,你需要安装setuptools, numpy, python-dateutil, pytz, pyparsing, cycler这些包,意思是支持numpy运行的其他包不全。

Python中solution什么意义?

默认all函数可以判定一个元组或者列表中的元素是否都为真默认的是元组中不存在0,空字符 none是都为True,其他的都为False也可以添加判断条件,判断一个列表或者元组中的所有元素是否都满足条件以下展示了使用 all() 方法的实例:>>> all(["a", "b", "c", "d"]) # 列表list,元素都不为空或0True>>> all(["a", "b", "", "d"]) # 列表list,存在一个为空的元素False>>> all([0, 1,2, 3]) # 列表list,存在一个为0的元素False>>> all(("a", "b", "c", "d")) # 元组tuple,元素都不为空或0True>>> all(("a", "b", "", "d")) # 元组tuple,存在一个为空的元素False>>> all((0, 1, 2, 3)) # 元组tuple,存在一个为0的元素False>>> all([]) # 空列表True>>> all(()) # 空元组True添加判断条件的实例class Solution: def findWords(self, words: List[str]) -> List[str]: out = [] s1 = "qwertyuiop" s2 = "asdfghjkl" s3 = "zxcvbnm" for word in words: if all(x.lower() in s1 for x in word) or all(x.lower() in s2 for x in word) or all(x.lower() in s3 for x in word):#判断单词中是否所有的字符都在字串中,为真的话,将它加入列表 out.append(word) return out

python浅复制小问题

python里面的字符串是不可修改的。所以你y["usrname"]="mlh"这样做之后实际上是创建了一个新的字符串对象赋值给y的username,你可以通过赋值前后的id确认这是两个不同的字符串对象比如这样的代码:x={"usrname":"admin","machine":["boo","bar","baz"]}y=x.copy()print(id(y["usrname"]))print(id(x["usrname"]))y["usrname"]="hi"print(id(y["usrname"]))print(id(x["usrname"]))在我的环境的执行结果是:12311008123110081167835212311008这说明了在y["usrname"]赋值之前,y和x的username确实是同一字符串对象,但是赋值之后就不同了

jupyter notebook中的shutdown是什么意思

shutdown英 ["ʃʌtdaʊn]美 ["ʃʌtdaʊn]n. 关机;停工;关门;停播

python dataframe describe 参数 什么意思

pandas.Series.describeDataFrame.describe(percentiles=None, include=None, exclude=None)生成描述性统计,总结数据集分布的中心趋势,分散和形状,不包括NaN值。分析数字和对象系列,以及混合数据类型的DataFrame列集。 输出将根据所提供的内容而有所不同。 有关详细信息,请参阅下面的注释。变量:1、百分位数:数字列表,可选输出中包含的百分位数。 全部应该在0和1之间。默认值为[.25,.5,.75],返回第25,第50和第75百分位数。2、包括:"all",dtypes的列表或无(默认),可选要包括在结果中的白名单数据类型。 忽略了系列。 以下是选项:l "all":输入的所有列都将包含在输出中。l 类似dtypes的列表:将结果限制为提供的数据类型。 将结果限制为数字类型,提交numpy.number。要将其限制为分类对象,请提交numpy.object数据类型。 字符串也可以以select_dtypes的样式使用(例如,df.describe(include = ["O"]))。l 无(默认):结果将包括所有数字列。3、排除:类型为dtypes或None(默认),可选从结果中忽略的黑名单数据类型。 忽略了系列。 以下是选项:l 类似dtypes的列表:从结果中排除提供的数据类型。 选择数字类型submit numpy.number。要选择分类对象,请提交数据类型numpy.object。字符串也可以以select_dtypes的样式使用(例如,df.describe(include = ["O"]))。l 无(默认):结果将不排除任何内容。返回:总结:系列/ DataFrame的汇总统计注释:对于数值数据,结果的索引将包括计数,平均值,标准差,最小值,最大值以及较低的百分位数和50。默认情况下,较低的百分位数为25,较高的百分位数为75.50百分位数与中位数相同。对于对象数据(例如字符串或时间戳),结果的索引将包括count,unique,top和freq。顶部是最常见的价值。频率是最常见的频率。时间戳还包括第一个和最后一个项目。如果多个对象值具有最高的计数,则计数和顶部结果将从计数最高的那些中任意选择。对于通过DataFrame提供的混合数据类型,默认值仅返回数字列的分析。如果include ="all"作为选项提供,则结果将包括每种类型的属性的并集。可以使用include和exclude参数来限制DataFrame中哪些列被分析输出。分析系列时,参数将被忽略。例子:描述数字系列。>>> s = pd.Series([1, 2, 3])>>> s.describe()count 3.0mean 2.0std 1.0min 1.025% 1.550% 2.075% 2.5max 3.0描述一个分类系列。>>> s = pd.Series(["a", "a", "b", "c"])>>> s.describe()count 4unique 3top afreq 2dtype: object描述时间戳系列。>>> s = pd.Series([... np.datetime64("2000-01-01"),... np.datetime64("2010-01-01"),... np.datetime64("2010-01-01")... ])>>> s.describe()count 3unique 2top 2010-01-0100:00:00freq 2first 2000-01-01 00:00:00last 2010-01-01 00:00:00dtype: object描述DataFrame。默认情况下只返回数字字段。>>> df = pd.DataFrame([[1, "a"], [2, "b"], [3, "c"]],... columns=["numeric", "object"])>>> df.describe()numericcount 3.0mean 2.0std 1.0min 1.025% 1.550% 2.075% 2.5max 3.0描述DataFrame的所有列,而不管数据类型如何。>>> df.describe(include="all")numericobjectcount 3.0 3unique NaN 3top NaN bfreq NaN 1mean 2.0 NaNstd 1.0 NaNmin 1.0 NaN25% 1.5 NaN50% 2.0 NaN75% 2.5 NaNmax 3.0 NaN通过访问DataFrame作为属性来描述列。>>> df.numeric.describe()count 3.0mean 2.0std 1.0min 1.025% 1.550% 2.075% 2.5max 3.0Name: numeric, dtype: float64在DataFrame描述中仅包含数字列。>>> df.describe(include=[np.number])numericcount 3.0mean 2.0std 1.0min 1.025% 1.550% 2.075% 2.5max 3.0在DataFrame描述中只包含字符串列。>>> df.describe(include=[np.object])objectcount 3unique 3top bfreq 1从DataFrame描述中排除数字列。>>> df.describe(exclude=[np.number])objectcount 3unique 3top bfreq 1从DataFrame描述中排除对象列。>>> df.describe(exclude=[np.object])numericcount 3.0mean 2.0std 1.0min 1.025% 1.550% 2.075% 2.5max 3.0顶0踩0

python中ax.legend 语句什么意思

legend代表是 图例 ax.legend是图片中 图例的设置

python中traceback是什么意思?

意思是:回溯(最近的一次呼叫)这里表示您的Python程序出现了异常,括号中通俗的解释就是代码中引发异常的位置。Python中一般使用try-except捕获异常。这样,如果引发异常,程序可对异常进行处理。避免了Traceback(most recent call last)等这样一些不友好的语句出现。比如下面一个除零操作:import tracebacktry:num = 1/0except:traceback.print_exc()Traceback (most recent call last):File "C:/Users/Administrator/AppData/Roaming/JetBrains/PyCharmCE2021.2/scratches/scratch.py", line 5, in <module>num = 1/0ZeroDivisionError: division by zero黑体标注的是异常具体位置。如果对异常进行处理,就不会显示这些回溯信息(Trackback这些内容)try:num = 1/0except:print("异常了")这里程序只打印‘异常了"这三个字,但在具体编写程序时,不建议这样使用。使用中建议指明具体的异常类型。如下:try:    num = 1 / 0except ZeroDivisionError as e:    print(str(e))打印输出“division by zero”,比Traceback友好多了!希望回答对您有帮助!

cfb的参数是什么python

一.函数功能(包裹一部分代码 实现某一个功能 达成某一个目的)# 定义函数def func(): print("我是一个函数")# 调用函数func()123456123456函数命名字母数字下划线,首字符不能为数字严格区分大小写,且不能使用关键字函数命名有意义,且不能使用中文哦驼峰命名法:(1) 大驼峰命名法:每个单词的首字符大写 (类:面向对象)mycar => MyCar mydesk => MyDesk(2) 小驼峰命名法:除了第一个单词的首字符小写之外,剩下每个单词首字符大写mycar => myCar mydesk => myDeskmycar => my_car mydesk => my_desksymmetric_difference# 函数的定义处def cfb_99(): for i in range(1,10): for j in range(1,i+1): print("%d*%d=%2d " % (i,j,i*j) , end="") print()# 函数的调用处for i in range(10): cfb_99()1234567891012345678910二.函数的参数参数:(1)形参:形式参数,在函数的定义处(2)实参:实际参数,在函数的调用处遵循原则:形参和实参要一一对应1.普通形参2.默认形参3.普通形参 + 默认形参默认形参必须跟在普通形参的身后,顺序是一定的4.关键字实参关键字实参是对具体的某个参数赋值,具体的顺序可以打乱普通实参 + 关键字实参关键字实参必须跟在普通实参的身后,顺序是一定的三.区分 默认形参 和 关键字实参# 函数的定义处 def lol31_gameteam(top="王盼盼",middle="吴洪昌",bottom="孙敬华",jungle="孙致和",support="周鹏飞"): print("上单选手{}".format(top)) print("中单选手{}".format(middle)) print("下单选手{}".format(bottom)) print("打野选手{}".format(j

python中even什么意思

虚拟环境。顾名思义,它是一个虚拟出来的环境。通俗的来讲,这个虚拟的环境可以理解为一个“容器”,在这个容器中,我们可以只安装我们需要的依赖包,而且各个容器之间互相隔离,互不影响。

timehappytimeofpiano中文是什么意思

在英语里没有timehappytimeofpiano这个字,只有termite这个字,意思是白蚁。白蚁(termite, white ant),亦称虫尉属节肢动物门,昆虫纲,等翅目,类似蚂蚁营社会性生活,其社会阶级为蚁后、蚁王、兵蚁、工蚁。白蚁与蚂蚁虽一般同称为蚁(见蚁总科),但白蚁社会体系在分类地位上,白蚁属于较低级的半变态昆虫,蚂蚁则属于较高级的全变态昆虫。根据化石判断,白蚁可能是由古直翅目昆虫发展而来,最早出现于 2 亿年前的二叠纪。人们会误认为白蚁就是蚂蚁的一种,实际上白蚁和蚂蚁是两种不同物种。白蚁体软而小,通常长而圆,白色、淡黄色,赤褐色直至黑褐色。头前口式或下口式,能自由活动。触角念珠状,腹基粗壮,前后翅等长;蚂蚁触角膝状,腹基瘦细,前翅大于后翅。中国古书所称蚁、螘、飞螘、蚍蜉、蠡、螱等,都与蚂蚁混同。宋代开始有白蚁之名,并确定为白蚁的别称。 白蚁分布于热带和亚热带地区 ,以木材或纤维素为食。白蚁是一种多形态、群居性而又有严格分工的昆虫,群体组织一旦遭到破坏,就很难继续生存。全世界已知2000多种。中国除澳白蚁科尚未发现外,其余4科均有,共达300余种。分布范围很广。白蚁是等翅目的昆虫,因而具有昆虫的基本特征。其体躯分头、胸、腹三部分。头部可以自由转动,生有触角、眼睛等重要的感觉器官,取食器官为典型的咀嚼式口器,前口式。胸部分前胸、中胸、后胸三个体节,每一胸节分别生一对足。有翅成虫的中、后胸各生一对狭长的膜质翅。前、后翅的形状、大小几乎相等,等翅目的名称就由此而来。腹部10节,雄虫生殖孔开口于第9与第10腹板间;雌虫第7腹板增大,生殖孔开口于下,第8和第9腹板则缩小,多数种类有一对简单的刺突,位于第9腹板中缘,第10腹板两侧生有一对尾须。白蚁体躯几丁质化的程度随着不同种类有不同变化,一般有翅成虫的体壁几丁质化高,且硬,工蚁体壁几丁质化较浅,而软。体躯的毛随种类而异,有多有少,有的近于裸露。体色由白色、淡黄色、赤褐色,直到黑色不等。但大多种类的体色较浅淡,近于乳白色。白蚁体长一般由几毫米到十几毫米,有翅成虫的长度约为10-30毫米,但多年生蚁后由于生殖腺的发达,腹部极度膨大,整个体长可达60-70毫米,有的种类的蚁后甚至可超过100毫米。其社会阶级为蚁后、蚁王、兵蚁、工蚁。生殖型又称繁殖蚁,指有性的雌蚁和雄蚁,它们的职责是保持旧群体和创立新群体,分原始繁殖蚁和补充繁殖蚁两类。体躯骨化,黄、褐或黑色,有两对发达的翅。每年4-6月是其分飞高峰期,特别是在春夏雨后闷热时,大量长翅繁殖蚁从蚁巢中飞出,在离巢不远处的建筑物附近低飞,飞行时间很短,这种现象称为婚飞或群飞(分群)。群蚁在低空飞舞,好像在开舞会,各自毫无拘束地自由选择对象。"情投意合者"飞落地面,各自脱掉翅膀,雌雄成双追逐,通常为雌前雄后,完成"婚配"大事。配对后的雌雄成虫经一段时间后,便开始寻找合适场所,建筑新巢"定居"。入穴后,雄虫常用口器舔舐雌虫的腹部,有时雌雄虫彼此舔舐,然后产卵,繁殖后代,另立新的群体。这对"新婚"的雌雄蚁,就是未来新群体的母蚁和父蚁,也就是新群体中的蚁后和蚁王。大多情况下,这对伴侣终身过着"一夫一妻制"的文明社会生活。但不是婚飞中的所有个体都能成双建立新群,当它们大量飞出时,常被各种鸟类、捕食性昆虫或其他动物吃掉,往往只有其中的少数能够幸存下来,但尽管是少数,也足以维持其种族繁衍,并造成对木质建筑物的危害的了,王后躺在王室中可是专门"生育"的,到一定时期又有成虫出飞建立新的群体。工蚁在蚁群中数量最多,占群体数量的绝大部分,形态与成虫相似,通常体色较暗,有雌、雄性别之分。工蚁头阔,复眼消失,有时仅存痕迹。工蚁往往还有大、小型之分,无生殖机能。担任巢内很多繁杂的工作,如建筑蚁冢,开掘隧道,修建蚁路,培养菌圃,采集食物,饲育幼蚁、兵蚁和蚁后,清洁卫生,看护蚁卵等。在无兵蚁的种类中,它们还要负责抵御外敌。兵蚁是群体的防卫者,虽有雌雄之分,但不能繁殖。兵蚁的头部长而高度骨化,上颚特别发达,但已失去了取食功能,而成为御敌的武器,还可用上颚堵塞洞口、蚁道或王宫入口。兵蚁大致可分上颚型和象鼻型2类,前者有强大的上颚,好似一把二齿的大叉子。后者有发达的额鼻,头延伸成象鼻状,当它与敌搏斗时,可喷出胶质分泌物,涂抹敌害。元音字母组合er在单字里发卷舌长元音/ɝ/的音,发音时,舌端离开下齿,并尽量向上齿龈后部卷起来,舌中部隆起,舌位接近半高,是三个中元音中舌位最高的一个,牙床接近半合,双唇略扁平,向左右两边拉开些,呈微笑状,这个音出现在字首、字中和字尾位置,如:term 学期fern 蕨类herb 药草clerk 职员servant 仆人verb 动词herd 一群希望我能帮助你解疑释惑。

python转化成c++或c

是特定的应用,别人无法看出来做什么的。虽然里面每个标准python用法都很简单。python比c++容易的多,不管是编写还是阅读,转成c++毫无意义,除非为了效率的缘故。感觉就是读文件,计算一些东西,然后收集结果再输出到其他文件中。

用python如何将txt文件每一行的第2,3项提取出来(C:UsersAdministratorDesktopEXT1-2009-Snyder.txt

line = "Acebutolol 37517-30-9 N N/N D-352/N ooc"words_of_line = line.split(" ") #按空格分开print words_of_line # ["Acebutolol", "37517-30-9", "N", "N/N", "D-352/N", "ooc"]

python sock.sendto消息怎么看

# -*- coding: cp936 -*- """"" 建立一个python server,监听指定端口, 如果该端口被远程连接访问,则获取远程连接,然后接收数据, 并且做出相应反馈。 """ if __name__=="__main__": import socket print "Server is starting" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(("localhost", 8001)) #配置soket,绑定IP地址和端口号 sock.listen(5) #设置最大允许连接数,各连接和server的通信遵循FIFO原则 print "Server is listenting port 8001, with max connection 5" while True: #循环轮询socket状态,等待访问 connection,address = sock.accept() try: connection.settimeout(50) #获得一个连接,然后开始循环处理这个连接发送的信息 """"" 如果server要同时处理多个连接,则下面的语句块应该用多线程来处理, 否则server就始终在下面这个while语句块里被第一个连接所占用, 无法去扫描其他新连接了,但多线程会影响代码结构,所以记得在连接数大于1时 下面的语句要改为多线程即可。 """ while True: buf = connection.recv(1024) print "Get value " +buf if buf == "1": print "send welcome" connection.send("welcome to server!") elif buf!="0": connection.send("please go out!") print "send refuse" else: print "close" break #退出连接监听循环 except socket.timeout: #如果建立连接后,该连接在设定的时间内无数据发来,则time out

python入门教程(非常详细)

Python入门教程可以在CDSN网查看。说道 Python,它的诞生是极具戏曲性的,据 Guido 的自述记载,Python 语言是他在圣诞节期间为了打发时间开发出来的,之所以会选择 Python 作为该编程语言的名字,是因为 Guido 是一个叫 Monty Python 戏剧团体的忠实粉丝。看似 Python 是“不经意间”开发出来的,但丝毫不比其它编程语言差。自 1991 年 Python 第一个公开发行版问世后,2004 年 Python 的使用率呈线性增长,不断受到编程者的欢迎和喜爱。2010 年,Python 荣膺 TIOBE 2010 年度语言桂冠;2017 年,IEEE Spectrum 发布的 2017 年度编程语言排行榜中,Python 位居第 1 位。Python功能强大:Python 强大的功能是很多用户支持 Python 的最重要的原因,从字符串处理到复杂的 3D 图形编程,Python 借助扩展模块都可以轻松完成。实际上,Python 的核心模块已经提供了足够强大的功能,使用 Python 精心设计的内置对象可以完成许多功能强大的操作。同学,你加下我的微信:762459510 领取python福利。

python的基本问题,TypeError: "str" object is not callable

你是不是要统计 C 和 G 出现的次数?s = "CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT"print len(s)count_C = 0count_G = 0for char in s:    #print char    if char == "C":        count_C += 1    if char == "G":        count_G = count_G + 1print "C count: "+str(count_C),"G count: "+str(count_G)

python 数组组合

mm=[["a","b","c","d","e"],[1,2,3,4],[5,6,7,8],[9,10,11,12,13]]longs=[]for n in mm:   longs.append(len(n))ll = max(longs)print lloutall=[]for i in range(0,ll,2):   outone = []   for j in mm:      if i <ll-1:         print i         outone.append(j[i])         outone.append(j[i+1])      else:         try:            outone.append(j[i])         except:            pass   outall.append(outone)print outall结果:[["a", "b", 1, 2, 5, 6, 9, 10], ["c", "d", 3, 4, 7, 8, 11, 12], ["e", 13]]代码中的2,就是你要的,改成4,下面i改到+3为止。

python def是什么意思

define的意思,用来定义函数。如:def函数名(参数1,参数2,……,参数N):执行语句#例:简单的函数使用#定义函数defhello():print"hellopython!"#调用函数hello()hellopython!从意思上,告诉你这个函数是受保护的函数,只有类本身和其子类才能调用,类似java里面的protested从代码上来说,没有任何意义。因为Python没有那些关键字,是不是子类都可以调用,只是作者希望你只在子类中调用。另外,Python连私有的都可以曲线访问的到,所以一般只能从写法上来告诉大家用的范围,至于你怎么用,这个看你个人了。

ROS入门-python下两台电脑的socket通信

python下两台电脑的socket通信,及将主机收到数据做ROS主题形式发布,远程电脑通过wifi订阅发布数据 cd ~/joey |catkin_make

ros下python文件怎么运行

直接执行python xx.py就可以运行。或者建立catkin_make工作目录,放入python文件,写好配置文件。catkin_make之后生成节点文件,rosrun运行该节点。

如何编写ros的python程序

ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版)我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo1. 前言 :Hello world 程序,在我们编程界,代表学习某种语言编写的第一个程序。对于 ROS 机器人操作系统来说,这个 Hello World 程序就是 : 写一个简单的消息发布器(发送) 和 订阅器(接收)。2. 准备工作 :C++ 的程序都会存放在每个程序包的 src 文件夹里。 Python 不同,Python 程序都存放在 scripts 文件夹中, 反正意思都是 源文件 包。 Step 1 . 所以,先在 beginner_tutorials 软件包中创建一个 scripts 文件夹:$ roscd beginner_tutorials$ mkdir scripts$ cd scripts1233. 编写消息发布器节点程序:如果你懒得去写的话,你可以使用 wget 命令, 在 github 上获取一个 talker.py 源代码。如何获取呢 ? Step 2 . 开一个终端,输入下面的命令就可以获取 talker.py :$ wget -devel/rospy_tutorials/001_talker_listener/talker.py$ lstalker.py123但是我建议你亲自动手,写一写:手动创建一个 talker.py 文件在 /scripys 文件夹里:$ roscd beginner_tutorials/scripts$ gedit talker.py12将这上面链接里的代码手动输入到 talker.py 文件中。(我就不将代码贴上来了)下面我来讲解一下代码:Step 3 . 最后一步,给这个 talker.py 文件加上可执行权限:$ chmod +x talker.py1这样,一个发布器就编写完了。我们不要急着去运行它,现在我们编写一个订阅器,来接收这个发布器发布的话题:4. 编写消息订阅器节点程序:Step 4 . 和发布器一样,我们使用wget命令获取订阅器的源代码 listener.py:$ roscd beginner_tutorials/scripts/$ wget ials/indigo-devel/rospy_tutorials/001_talker_listener/listener.py$ lslistener.py  talker.py1234但是,我还是建议你自己动手写一下。好吧,下面我们开始讲解 listener.py 里面的代码,这个listener.py程序的代码简单:Step 5 . 最后不要忘了给这个listener.py 加可执行权限:$ chmod +x listener.py15. 运行 :对于python 来说,我们不需要使用 catkin_make 命令对 ~/catkin_ws 工作空间进行编译。因为python文件本身就是可执行文件(前提是我们给它添加可执行权限)。OK,发布器 和 订阅器 都创建完了。下面我们运行它们,看看效果:Step 6 . 新打开一个终端,先执行 roscore 命令:$ roscore1Step 7 . 新打开一个终端,启动 发布器 :$ rosrun beginner_tutorials talker.py  1Step 8 . 新打开一个终端,启动 订阅器 :$ rosrun beginner_tutorials listener.py 1运行效果:Step 9 . 我们来使用 rostopic list ,看看当前的话题有哪些:$ rostopic list /chatter/rosout/rosout_agg1234其中 /chatter 就是我们在发布器里面发布的 ROS话题。6. 扩展,编写一个启动脚本文件 :还记得上一节,我们讲的ROS的启动脚本文件吧,下面我们来编写一个launch文件,来将 talker.py 和listener.py 文件的启动工作交个这个launch文件来做:Step 10 . 来到 beginner_tutorials程序包的 /launch 路径下,新建一个 hello_world_topic.launch 文件:$ roscd  beginner_tutorials/launch$ gedit hello_world_topic.launch   #使用你自己喜欢的文本编辑器12Step 11 . 输入下面的代码:<launch><node pkg="beginner_tutorials" name="talker" type="talker.py" /><node pkg="beginner_tutorials" name="listener" type="listener.py" /></launch>1234Step 12 . 现在,将之前打开的终端都关闭,我们启动这个脚本: (开一个终端 : Ctrl+Alt+T)$ roslaunch beginner_tutorials hello_world_topic.launch1运行结果:上面截图的输出显示: talker.py 和 listener.py 脚本运行成功。但是并没有出现刷屏的现象。这是为什么? 为了证明这个脚本程序真的成功的运行了,我们来试一试:Step 13 . 重新开一个终端,输入下面的命令:$ rosrun list$ rostopic list$ rostopic echo /chatter123Step 14 . 现在 Ctrl+C 结束监听 /chatter 话题。使用 rqt_graph 对当前启动的节点可视化:$ rqt_graph1这些足以说明,hello_world_topic.launch 启动脚本文件,启动成功。总结: 发布器 和 订阅器 是很简单的, 就是简单的发布一个 自定义的话题。我之前使用说过:节点之间通讯的方式有两种 : 话题(rostopic) 和 服务(rosservice)所以,接下来,我们会讲:使用ROS服务来完成ROS版 Hello World 程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便 ROS 服务版的 Hello World 程序的编写。 所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。

电脑里装了Python2和Python3,安装ros时,ros会使用Python几?

在ROS中使用Python3Use Python3 in ROS.以下内容在Ubuntu 16.04 x64和ROS kinetic中测试通过事实上,只要在.py文件加上python3的shebang,rosrun的时候就会自动调用相应的解释器了:#!/usr/bin/env python3但是,在安装ros-kinetic-desktop-full的时候,也并没有安装python3相关的package,所以需要手动安装。1. 创建virtualenv环境(非必须)。这一步不是必要的,在这只是为了保险起见。sudo pip install virtualenv# 我在这使用的是Python3.6rc2,指向系统已安装的python3也可以。virtualenv rosenv -p /opt/python36rc/bin/python3source rosenv/bin/activatepython -V# Python 3.6.0rc22. 安装相应的Package需要安装catkin-tools和rospkg。# 没有创建virtualenv的话,注意需要使用pip3pip install catkin-toolspip install rospkg3. 按正常方式创建ROS Packgae创建Packge和Node的时候,无需source virtualenv。但是,记得要在python node的文件头部加上shebang,否则rosrun仍会调用python2:#!/usr/bin/env python34. rosrun如果使用virtualenv,rosrun前记得source virtualenv就好了。source ros_test/devel/setup.zsh# 如没有使用virtualenv,下一语句则跳过source rosenv/bin/activaterosrun py3test pytest.pyNote需要注意的是,即使使用的virtualenv中,python指向的是python3,但是只要不在.py文件中添加python3的shebang,rosrun还是会调用python2的。这样可以很方便地兼容原来Python2的Package。

Python 中的index一般是什么意思,怎么个用法?

索引罢了,和C语言的i类似。
 首页 上一页  19 20 21 22 23 24 25 26  下一页  尾页