Python中文
首页
教程
问答
标签
搜索
登录
注册
Python:向函数传递标志
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>很长一段时间以来,我一直试图找出将标志传递给python函数的最佳方式。最直接的方法是:</p> <pre><code>def func(data, flag1, flag2, flag3): ... func(my_data, True, False, True) </code></pre> <p>这是非常好和简洁,但难以置信的难读,因为“真”或“假”一词告诉你什么标志正在设置,你必须仔细计算从左边开始的论点。您可以使它们成为关键字参数:</p> <pre><code>def func(data, flag1=False, flag2=False, flag3=False): ... func(my_data, flag1=True, flag3=True) </code></pre> <p>但这有点多余,因为“真的”根本没有任何意义。我可以把它作为一个列表:</p> <pre><code>func(mydata, ['flag1', 'flag3']) </code></pre> <p>或者</p> <pre><code>func(mydata, [func.flag1, func.flag3]) </code></pre> <p>但第一种感觉相当肮脏,使用字符串作为标记,第二种感觉仍然有些重复。理想情况下,我想说:</p> <pre><code>func(my_data, flag1, flag3) </code></pre> <p>将标志传递给具有最小冗余和冗余的函数。在python中有没有类似的方法?</p> <p>编辑: 我最终选择了:</p> <pre><code>func(mydata, flagA=1, flagB=1) </code></pre> <p>主要原因是:编译时检查(与传递字符串相比)、没有名称空间污染(与使用全局“枚举”相反)和最小的样板文件(=1或=0仅为2个字符,而5或6表示=True或=False)。它还使设置标志的默认值变得非常容易:</p> <pre><code>def func(data, flagA=1, flagB=0, flagC=1): ... </code></pre> <p>这比跳过环来提取和指定**kwarg样式标志的默认值要清楚得多,也容易得多。标记基本上是静态检查的,写起来非常清晰/干净。现在我要是能把最后两个字删掉就好了。。。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>可以将<code>flag1</code>…<code>flagN</code>定义为全局变量,并使用<code>func( *args)</code>定义函数</p> <pre><code>FLAG1 = 1 FLAG2 = 2 def func(*args): pass func(FLAG1, FLAG2) </code></pre> <p>通过分别定义标志,而不是使用字符串,可以避免标志名称中的错误和调试时的一些麻烦</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
使用Python创建一个非常大的二进制频率矩阵来运行协作过滤
3 回答
使用Python创建一张HTML网页,其中在不同颜色中重复n遍显示“Hello World”的方法
2 回答
使用Python创建一组唯一的值length L
9 回答
使用python创建不同表格的透视表
7 回答
使用python创建不和谐频道
1 回答
使用python创建不存在的多个文件夹
8 回答
使用python创建串行远程文件
7 回答
使用python创建交互式仪表板时出现问题
8 回答
使用python创建交互式绘图
5 回答
使用python创建交互式自动电子邮件
5 回答
使用Python创建价格列表
7 回答
使用python创建修改的txt文件
10 回答
使用Python创建全局变量,初始化后更改值
7 回答
使用Python创建关键字搜索词数组
6 回答
使用Python创建具有不均匀块大小/堆叠条形图的热图
8 回答
使用Python创建具有依赖于另一列的值的列
5 回答
使用Python创建具有多列的HTML表
9 回答
使用Python创建具有时间范围数据的等距数据帧
5 回答
使用Python创建具有特定顺序或属性的XML文件
7 回答
使用Python创建具有级联功能的搜索栏
9 回答