在进入python之前,我开始使用一些Objective-C/Cocoa书籍.我记得,大多数函数都需要明确说明关键字参数.直到最近我才忘记了这一切,并在Python中使用了位置参数.但是最近,我遇到了一些由不正当的职位造成的错误 - 他们是偷偷摸摸的小东西.
让我思考 - 一般来说,除非有特殊需要非关键字参数的情况 - 有没有什么好的理由不使用关键字参数?即使是简单的功能,它总是被认为是不好的风格吗?
我觉得我的大多数50行程序已经定期扩展到500行或更多行,如果我习惯于总是使用关键字参数,那么随着代码的增长,代码将更易于阅读和维护.这可能不是这样的原因吗?
更新:
我得到的总体印象是它的风格偏好,有许多好的参数,它们通常不应该用于非常简单的参数,但在其他方面与良好的风格一致.在接受之前我只是想澄清一下 - 这种方法是否存在任何特定的非风格问题 - 例如,重要的性能命中?
有人可以向我解释以下内容(python 2.7)
来自解析文件的两个字符串数字:
'410.9''410.9'(注意尾随空格)
A_LIST = ['410.9 ']
'410.9' in '410.9 '
True
'410.9' in A_LIST
False
Run Code Online (Sandbox Code Playgroud)
解决这个问题没问题 - 只是试着理解为什么会这样.
谢谢!
尝试创建一批词典:January = {} February = {} March = {}
我宁愿做一些事情:1月,2月,3月... = {}
这当然不起作用.
最终,我想创建这些词典的字典:
MONTHS_DICT = {'01':1月,'02':2月......}
它并不是一行一行的代码,但我只是学习Python而且....做一些重复的事情通常告诉我它可以通过其他方式更有效地完成.
思考?
ps我正在使用python 2.x但如果在这个例子中使用3会有一些帮助,那不是问题.
我正在解析病人访问列表(csv文件).为了解决这个问题,我有一组自定义的类:
class Patient:
def __init__(self,Rx,ID):
....
class PtController:
def __init__(self,openCSVFile):
self.dict=DictReader(openCSVFile)
self.currentPt = ''
....
def initNewPt(self,row):
Rx = row['Prescription']
PatientID = row['PatientID']
self.currentPt = Patient(Rx,PatientID)
...
Run Code Online (Sandbox Code Playgroud)
所以,我正在使用csv.DictReader来处理文件; 内置于PtController类中.它会迭代,但要为第一位患者设置值,请执行以下操作:
firstRow = self.dict.next()
self.initNewPt(self,firstRow)
...
Run Code Online (Sandbox Code Playgroud)
错误:
TypeError: initNewPt() takes exactly 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
如果我在调用initNewPt之前打印(firstRow),它会按照预期以字典形式打印行.
使用python2.7,这是我第一次使用对象.思考?
首先让我道歉,如果我对此的描述完全被延迟,仍然可以即时学习大部分内容.
我有几个大型文本文件(.txt)(~600,000行)的一般医院信息,我用python解析.我一直在使用默认的dicts(python2.7)来获取pt一个级别的计数和子计数.诊断.例如,如果想要捕获心脏病发作,然后根据类型(伪代码)进行区分:
if 'heart attack' in line[65:69]:
defaultdict['heart attack'] +=1
if [65:69] == 'worst kind':
defaultdict['worst'] += 1
else:
defaultdict['not worst'] +=1
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以捕获心脏病,以及它们是否是特定的感兴趣.一切正常.然而,现在我还想收集患者年龄(编码范围内报告),性别(M,F,U)和种族等的信息(来自同一行).我意识到我的技术是它不太适合这种情况 - 它似乎在迅速增加复杂性.所以,在我深入挖掘自己之前 - 还有另一种方法我应该解决这个问题吗?
最终我计划将所有这些文件放到一个实际的数据库中,但这基本上是最后一条信息.我需要当前的项目,所以我很乐意将它转储到excel并暂时绘制图形.
感谢任何建议!
编辑:样本行像 -
02032011JuniorHospital 932220320M09A228393
03092011MassGeneralHospitals 923392818F09B228182
Run Code Online (Sandbox Code Playgroud)
因此,所有行都是固定长度,其中行[0:8]始终是日期等.有一个单独的文件(字典?)解释数字的含义 - 所以诊断将像410.22,年龄将是在0 = 0-1岁的范围内,1 = 2-3岁,等等...
目标:对于我想要的每一个诊断,也想知道是特定诊断一个子类型的间隔(上述代码没有问题),与诊断相关的各种年龄(即每个年龄段有多少)范围).我目前有这个输出到excel文件(csv),所以我想要各种多列,我可以根据需要绘制.
再一次,我可以想出如何做到这一切只是创建一些额外的默认dicts - 它似乎应该有一个更简单的方法将它们组合成一个主要对象!
表示不快
有两组数据(两个表)用于患者记录,一组1999-2003,另一组2004-2009.每个都有> 100列; Table_A有~8个唯一列,Table_B~25个唯一列(相互比较).我的目标是:
我已经看到了一种手动执行此操作的方法: 联合具有不同列数的两个表
但是,此数据集中的列太多,无法输入每个列 - 我只想自动创建列并根据需要插入NULL值.
我正在使用SQL Server 2008R2.
获取将varchar转换为float的错误.
有一个表(不是我的制作)与列result
,具有varchar数据.我想转换为float来获取所有值> 180.0.
SELECT result FROM table WHERE result > 180.0
Run Code Online (Sandbox Code Playgroud)
产生错误.有趣的是,尽管如此:
WITH temp AS (
CASE
WHEN ISNUMERIC(result)=1 THEN CAST(result as FLOAT)
ELSE CAST(-1.0 AS FLOAT)
END AS result
)
Run Code Online (Sandbox Code Playgroud)
这很好.当我配对时:
SELECT temp.result FROM temp WHERE temp.result > 180.0
Run Code Online (Sandbox Code Playgroud)
我再次收到错误.思考?
更新:完整代码请求...
WITH temp AS (
SELECT
CASE
WHEN ISNUMERIC(result)=1 THEN CAST(result as FLOAT)
ELSE CAST(-1.0 AS FLOAT)
END AS result
FROM table)
SELECT temp.result FROM temp WHERE temp.result > 180.0
Run Code Online (Sandbox Code Playgroud)
使用SQL-SERVER 2008 RC2.