社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

jsbueno

jsbueno 最近创建的主题
jsbueno 最近回复了
4 年前
回复了 jsbueno 创建的主题 » Python:nested for循环被字典中的空值中断

你有这个用途 .get 方法而不是 [...] 检索值的语法。这允许您为缺失案例添加默认值。 但是,由于您是用硬编码的dict查询构建的,因此必须级联 get s用于嵌套字段检索,如果可靠的话,这可能会变得很长。 而且 收到 不检查序列中的元素:尝试从空序列检索索引0处的元素也会出错。

所以 data[symbol]['financials']['financials'][0]['netIncome'] 必须成为

(((d3 if (d3:=d2[0].get("netIncome")) else "N/A")if d2 else "N/A" )if (d2:=d1.get('financials') else "N/A") if (d1:=data[symbol].get('financials')) else "N/A"

可以清楚地看到,即使是像您这样的中等结构,这也不可行。最好的方法是构建一个helper函数,从数据的“路径”中检索嵌套数据,默认为一个值,并每次调用该函数:

def retr(obj, path, default="N/A"):
   try:
      for index in path:
          obj = obj[index]
   except (IndexError, KeyError):
      return default
   return obj

他们会打电话给 retr 要组成每个数据项,请执行以下操作:

data[symbol]['financials']['financials'][0]['cashFlow'],

变成:

retr(data, ["symbol", "financials", "financials", 0 ,"cashFlow"]),

6 年前
回复了 jsbueno 创建的主题 » python使数组变平,为什么funtools比较慢?

简而言之,函数调用和列表重新分配的开销是分开的,使用嵌套循环的算法是o(n),使用reduce的算法是o(n)。

即使算法没有什么不同,调用一个函数有“0”代价的想法来自于数学,函数是很好的理论构造。

在计算机程序中运行时,调用一个函数需要初始化一个上下文——在python中,是用局部变量创建一个frame对象。当您有参数被传递时,它意味着在元组中,参数在函数调用之前被构造,并且在函数体中被反构造(尽管这些步骤可能由实现优化)。

在2嵌套循环方法中,您只需在本机代码中迭代迭代器——尽管理论上,根据python的规范,这也意味着调用一个函数(对象的 __iter__ 方法),在本机代码迭代器的实际实现中通常要快得多。

但这并不能解释你在那里看到的不同。主要的问题是每次练习时 a + b[0].tolist() 在存储器中创建一个新的列表“c”,将“a”的值复制到该列表中,然后将b[0]中的值追加到该列表中。而这个新的列表+已经展平的元素的副本将在每个步骤中进行。在list comphrehension情况下,不会发生多余的复制-在展开父2d结构时放置新元素,python经过优化,可以预先分配空间,以供构建时生成的列表使用。

你可以创建一个对象,它有一个无限的或者一组定义好的元素,而这并不取决于你想要的元素的数量。

因此,虽然9个一组的速度不一定比创建一个列表“快”,但几百个一组的速度肯定更快,1000万或10亿个一组的速度明显更快:

class Ones:
    def __init__(self, element=1, size=9):
         self.element = element
         self.size = size
    def __getitem__(self, index):
         return self.element
    def __len__(self):
         return self.size

另外,如果只需要在重复的元素上迭代一个元素,而不需要在任意索引处获得一个元素,则可以使用 itertools.repeat :

import itertools
ones = itertools.repeat(1, size=9)
6 年前
回复了 jsbueno 创建的主题 » 基类中非继承属性上的python循环

您将所有属性作为普通值存储在实例的 __dict__ . 也就是说,没有任何进一步的暗示,它们就无法区分。

python有两种机制以特殊方式处理属性。如果要在类本身的基类中声明属性,并在 __init__ 方法,则可以内省基类 第二节 (而不是实例的 第二节 ) __annotations__ 同一类中的属性。

不过,正如在示例中一样,一件简单的事情是使用一个特殊的属性来记录在基类上添加的属性,然后将其作为属性的名称源:

class baseclass(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)
        self._numeric_attrs = set(kwargs.keys())

    def calcValue(self):
        return sum(getattr(self, attr) for attr in self._numeric_attrs)
6 年前
回复了 jsbueno 创建的主题 » 在python中从sqs消息id中删除单引号

你把字符串内容误认为是字符串表示,把它弄得一团糟。

字符串作为python中的数据,在python 2中是unicode字符串或字节字符串 查看 周围的 ' 每当你看到它们的表现时,你就会引用它们。

向最终用户呈现字符串内容的方法和函数(其中包括录制然后放在文件中)确实显示了该内容,但不包含周围的引号。

在Python2中,要在控制台中查看字符串内容,可以使用 print 陈述。

将引号放在输出“.dat”文件上的代码不在此处显示-该代码将字符串放在此处。如果你自己录制一个原始文件 myfile.write(messageid) 写的时候没有引号。我倾向于认为您正在使用一些第三方代码来编写您的dat文件,将数据作为字典传入-该代码包括输出上的引号。

如果直接调用file.write,则获取这些引号的唯一方法是 repr 你的数据,比如: myfile.write(repr(messageid)) ,或者如果此MessageID位于列表或Python语句中,并且将该数据结构的字符串表示形式写入 file.write(str(my_dict_with_data))

而且,它可能有这样的理由。 .dat 是数据的通用扩展,没有真正的规范——在许多情况下,这样的数据周围的Qute(例如在JSON文件中)是可取的。