小编chr*_*ris的帖子

有什么理由不总是使用关键字参数?

在进入python之前,我开始使用一些Objective-C/Cocoa书籍.我记得,大多数函数都需要明确说明关键字参数.直到最近我才忘记了这一切,并在Python中使用了位置参数.但是最近,我遇到了一些由不正当的职位造成的错误 - 他们是偷偷摸摸的小东西.

让我思考 - 一般来说,除非有特殊需要非关键字参数的情况 - 有没有什么好的理由不使用关键字参数?即使是简单的功能,它总是被认为是不好的风格吗?

我觉得我的大多数50行程序已经定期扩展到500行或更多行,如果我习惯于总是使用关键字参数,那么随着代码的增长,代码将更易于阅读和维护.这可能不是这样的原因吗?

更新:

我得到的总体印象是它的风格偏好,有许多好的参数,它们通常不应该用于非常简单的参数,但在其他方面与良好的风格一致.在接受之前我只是想澄清一下 - 这种方法是否存在任何特定的非风格问题 - 例如,重要的性能命中?

python coding-style

58
推荐指数
5
解决办法
7322
查看次数

Python:(sub)字符串等价与列表快速成员资格测试

有人可以向我解释以下内容(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)

解决这个问题没问题 - 只是试着理解为什么会这样.

谢谢!

python

4
推荐指数
2
解决办法
424
查看次数

Python中的大量变量声明和赋值

尝试创建一批词典:January = {} February = {} March = {}

我宁愿做一些事情:1月,2月,3月... = {}

这当然不起作用.

最终,我想创建这些词典的字典:

MONTHS_DICT = {'01':1月,'02':2月......}

它并不是一行一行的代码,但我只是学习Python而且....做一些重复的事情通常告诉我它可以通过其他方式更有效地完成.

思考?

ps我正在使用python 2.x但如果在这个例子中使用3会有一些帮助,那不是问题.

python python-2.x

3
推荐指数
2
解决办法
1742
查看次数

Python - TypeError :(函数)只需要2个参数(给定3个) - 但我只给了2个!

我正在解析病人访问列表(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,这是我第一次使用对象.思考?

python

3
推荐指数
2
解决办法
2万
查看次数

Python解析大型文本文件并捕获多级数据

首先让我道歉,如果我对此的描述完全被延迟,仍然可以即时学习大部分内容.

我有几个大型文本文件(.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 - 它似乎应该有一个更简单的方法将它们组合成一个主要对象!

表示不快

python parsing

2
推荐指数
1
解决办法
1205
查看次数

SQL - 联合两个表,每个表都有一些唯一的列

有两组数据(两个表)用于患者记录,一组1999-2003,另一组2004-2009.每个都有> 100列; Table_A有~8个唯一列,Table_B~25个唯一列(相互比较).我的目标是:

  1. 一张包含1999 - 2009年所有数据的表格
  2. 对于一个表中不在另一个表中的行,只需为该列指定NULL值.例如,如果表A具有Diagnostic_Category_12但Table_B没有,则该值将是表A中的原始值,但在表B中为NULL

我已经看到了一种手动执行此操作的方法: 联合具有不同列数的两个表

但是,此数据集中的列太多,无法输入每个列 - 我只想自动创建列并根据需要插入NULL值.

我正在使用SQL Server 2008R2.

sql t-sql sql-server sql-server-2008

2
推荐指数
2
解决办法
6759
查看次数

将varchar转换为float的错误

获取将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.

t-sql sql-server

1
推荐指数
1
解决办法
3万
查看次数