首页 > 其他分享 >【解决办法】RegularPolygon.__init__() takes 3 positional arguments but 4 were given 报错

【解决办法】RegularPolygon.__init__() takes 3 positional arguments but 4 were given 报错

时间:2024-05-27 23:57:52浏览次数:28  
标签:__ given name 关键字 RegularPolygon matplotlib 星号 报错 参数

我在学习用Python绘制一个六边形且隐藏全部轴脊的代码时,出现如下报错:

RegularPolygon._init_() takes 3 positional arguments but 4 were given

报错意思:RegularPolygon.__init__()接受3个位置参数,但给定了4个

通过上网查询、询问同学,我解决了这个问题,其中的解决过程我详细地讲一下:

首先,明白报错意思后,我开始尝试删除其中的任何一个参数,但都还有报错。

只有删除“0.2”后,绘制出了一个四边形,与需要绘制的六边形不符。其中的原因并不知晓,明明设置的多边形顶点数量是6,而绘制出的是四边形。如果有大佬知道原因,欢迎在评论区告诉我!

然后,我怀疑是不是版本导致的问题,就开始重新下载matplotlib库。

pip install matplotlib  #下载matplotlib库
pip install --upgrade matplotlib  #更新matplotlib库

更新之后,问题还未解决,说明不是版本的问题。

再然后,我去网上查询patches和RegularPolygon的使用方法。

matplotlib.patches是专门用于绘制路径和形状的模块,该模块中包含一些表示形状(例如箭头、圆形、长方形等)的类,通过创建这些类的对象可以快速绘制常见的形状。matplotlib中常见的形状类如表1所示。

表1 matplotlib中常见的形状类

说明
Arrow箭头
Circle圆形
RegularPolygon正多边形
Rectangle矩形
Ellipse椭圆形

表1中列举的所有类都提供了与类同名的构造方法。以创建正多边形为例,RegularPolygon类的构造方法的语法格式如下所示:

RegularPolygon(xy, numVertices, radius=5, orientation=0, **kwargs)

该方法常用参数的含义如下:

  • xy:表示中心点的元组(x, y)。
  • numVertices:表示多边形顶点的数量。
  • radius:表示从中心点到每个顶点的距离。
  • orientation:表示多边形旋转的角度(以弧度为单位)。

例如,通过RegularPolygon()方法创建一个黄色的正五边形,代码如下:

polygon = mapthes.RegularPolygon((0.5, 0.5), numVertices=5, radius=0.3, color='y')

之后,通过Axes对象的add_patch()方法将正五边形polygon添加到画布中,代码如下。

ax = plt.axes([0.3, 0.3, 0.5, 0.5])
ax.add_patch(polygon)

了解使用方法后,还是不太清楚问题出在哪里,我就去询问了同学。(博主:沐曦可期

他也帮助我去查找原因,当看到博主yimaoyingbi的文章后受到了启发(虽然与解决此问题没有太大关系,但受到了一些启发),怀疑有可能需要修改引用的RegularPolygon类中的内容。 (博主yimaoyingbi文章链接:点击链接

接着,我就去寻找RegularPolygon类所在的patches模块文件位置。

通过上网查询,知道了可以将光标点到某一方法上,按 Shift + Tab 键,显示帮助文档。

显示后,点“^”是在分页器中显示帮助文档点“+”是展开所有帮助文档信息点“×”是关闭帮助文档显示。将帮助文档拉到最底下,就会有引用模块.py文件的详细地址。

按照文件地址,找到patches.py文件 ,然后用PyCharm打开(能打开.py文件的软件都可以)。

按 Ctrl + F 键,查找RegularPolygon类,如下图(代码行数可能不同,但参数定义是相同的)。

在这串代码中,并未理解星号“*”在这里的意思,注释也没有解释。

通过上网查询,星号“*”有很多用法,但在这里是使函数只能接收关键字参数,代码如下:

def genius(*, first_name, last_name):
    print(first_name, last_name)
# genius('Li','Bai')
# TypeError: genius() takes 0 positional arguments but 2 were given
genius(first_name='Li', last_name='Bai')
# Li Bai

上述代码采用了星号​​“*”限制了星号之后的参数必须采用关键字形式来调用上述函数。 实际上,如果我们只是想将一些参数限制为仅以关键字形式输入同时另一部分参数依旧按照位置形式输入,此时我们可以将位置参数放置在星号之前,代码如下:

def genius(age, *, first_name, last_name):
    print(first_name, last_name, 'is', age)
genius(28, first_name='Li', last_name='Bai')
# Li Bai is 28

此内容链接:Python 中星号(*)的用法小结

最后,明白星号“*”在这里的作用后,找出了问题所在:因为星号“*”在radius关键字的前面,所以要使用星号“*”后面的关键字(包括radius)的参数时,就必须采用关键字的形式来调用上述函数。

解决办法:

1、将“0.2”参数前面添加关键字“radius”;(我选择的这一种)

2、可以将星号“*”删去,不在这里限制仅为关键字变参;

3、可以将星号“*”移到“radius”关键字后面,就不会影响“0.2”参数的使用了。

注意:我是用PyCharm来使用Jupyter Notebook的,如果使用是Anaconda,也可以用我以上的解决办法来解决此问题。


本人还是计算机小白,对于一些知识和名词尚未完全理解,还在继续学习中。

若文章中有错误,欢迎各位大佬积极指正,我会虚心接受,努力学习,向你们靠近!

标签:__,given,name,关键字,RegularPolygon,matplotlib,星号,报错,参数
From: https://blog.csdn.net/m0_57249993/article/details/139242845

相关文章

  • mysql存储地理信息的方法
    MySQL存储地理信息通常使用GEOMETRY数据类型或其子类型(如POINT,LINESTRING,POLYGON等)。为了支持这些数据类型,MySQL提供了SPATIAL索引,这允许我们执行高效的地理空间查询。1.创建支持地理信息的表首先,我们需要一个包含GEOMETRY或其子类型列的表。以下是一个示例,展示......
  • 中外程序员到底有啥区别?
    中国程序员的特点中国程序员的最大优点是非常勤奋。中国互联网行业有句话叫:“theyearnalotofmoneybutdieearly”(赚得多死得早)。由于工作强度大,经常有程序员突然去世的新闻报道。996工作制度:中国程序员通常实行“996”工作制度(即每天工作从早9点到晚9点,每周工作6天)。这......
  • 设计链表
    leetcode:707题这题基本涵盖链表的的常用操作,获取第n个节点的值(从零开始)头部插入节点尾部插入节点第n个节点前插入节点删除第n个节点C#:publicclassMyLinkedList{publicintcount{get;set;}privateNodedummyHead;publicMyLinkedList(){......
  • WPF Splash Screen – A New Splash Screen Manager (v20.1) 启动页 闪屏页 初始加载
    WPFSplashScreen–ANewSplashScreenManager(v20.1)(devexpress.com)  WPFTeamBlog RSS06July2020A splashscreen isaneffectivewaytoimproveanapp’suserexperienceduringlengthystartupoperations.Unfortunately,creatinganef......
  • P9650 [SNCPC2019] Escape Plan
    原题链接第一份代码#include<bits/stdc++.h>#definelllonglongconstllmaxs=2e18;usingnamespacestd;lle[1000005];lld[1000005];structnode{llto,len;booloperator<(constnode&b)const{returnb.len>len;}};......
  • 痞子衡嵌入式:不同J-Link版本对于i.MXRT1170连接复位后处理行为有所不同
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是不同J-Link版本对于i.MXRT1170连接复位后处理行为。痞子衡之前写过一篇旧文《i.MXRT1170上用J-Link连接复位后PC总是停在0x223104的原因》,这篇文章详细解释了RT1170BootROM代码里软件实现的DebugMai......
  • 记录word替换数据-2
    #导入模块fromdocximportDocumentimportosfromwin32com.clientimportDispatchimportpandasaspd#转换doc文件defdoc_to_docx(file_path):"""将指定的doc文件转化为docx格式:paramfile_path:文件路径"""word=Dispatch......
  • 记录word数据替换-1
    #导入模块importtkinter.filedialogimportosfromwin32com.clientimportDispatchimportpandasaspdimportwin32com.client#转换doc文件defreplace_main(word,old_text,new_text,output_path):#word.Selection.Find.ClearFormatting()#word.Sele......
  • TCP滑动窗口
    发送方发送报文不再使用一个一个报文发送然后等待一个一个确认,而是进行一段(多个报文)发送接收方接收到数据后,发送当前接收到数据序列值+1,以及下一次可以接收的窗口值 也就是说,发送方需要配合接收方接受的窗口大小来确定数值发送 发送方窗口左边为后沿,右边为前沿。1.当......
  • abc 355 F - MST Query
    题目链接:https://atcoder.jp/contests/abc355/tasks/abc355_f题目要求动态维护最小生成树.那么我们考虑朴素的Kruskal算法:将边从小到大排序,不断加边,用并查集维护联通块,加边加到整张图联通(联通块数量为1)为止,最后的答案就是从小到大遍历边权将边的数量*当前边权相加起来......