小编Tom*_*mmy的帖子

我们什么时候需要Python导入语句?

一段代码工作,我不明白为什么.它应该不符合我的理解.问题在下面很容易说明:

"Main.py"

from x import * #class x is defined
from y import * #class y is defined


xTypeObj = x()
yTypeObj = y()
yTypeObj.func(xTypeObj)
Run Code Online (Sandbox Code Playgroud)

"x.py"

class x(object):

    def __init__...
        ...
    def functionThatReturnsAString(self):
        return "blah"
Run Code Online (Sandbox Code Playgroud)

"y.py"

#NO IMPORT STATEMENT NEEDED?? WHY

class y(object):
    def __init__...
        ...
    def func(self, objOfTypeX):
        print(objOfTypeX.functionThatReturnsAString())
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我不需要在类型的"y.py"中有一个import语句

from x import functionThatReturnAString()
Run Code Online (Sandbox Code Playgroud)

它如何弄清楚如何调用此方法?

python python-import

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

使用Swagger生成的新代码更新Flask代码

我最近开始使用Swagger来生成烧瓶模板:http : //editor.swagger.io/#/

我的工作流程有缺陷,我想知道哪里出了问题。一世:

  1. 使用用户界面编写API V1 .yaml
  2. 使用UI编辑器生​​成代码,该编辑器将下载存根的zip文件
  3. 编写残存的功能

这部分过程很好。但是,假设我们要添加一个新端点或更改一个现有端点。怎么办?一世:

  1. 重新加载swagger编辑器
  2. 编辑Yaml
  3. 生成代码,该代码将下载新的zip并删除旧代码
  4. 使用新生成的代码并执行“自我合并”,将新存根复制到旧代码中,然后将新yaml复制到旧代码中

似乎最初的烧瓶模板与进行中的维护之间存在差距。我究竟做错了什么?

python flask swagger

5
推荐指数
1
解决办法
1074
查看次数

C++箭头运算符equivelence

帖子我可以使用什么而不是箭头操作符,` - >`?箭头操作员-在C(>)的使用 状态

以下两个表达式是等效的:

x->y
(*x).y
Run Code Online (Sandbox Code Playgroud)

但是,当作为数学等价时,这似乎并不总是正确的.

为什么g ++在替换时会抛出错误

a->b->c
Run Code Online (Sandbox Code Playgroud)

a->(*b).c
Run Code Online (Sandbox Code Playgroud)

看来上述等价并不总是可以替换的.因此,我认为"等同"一词有点误导.

另外,我不是指这个问题中的任何超载.

c++ pointers

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

为什么Python不使用类似C++/Java的语法来定义实例变量?

这困扰了我几个小时,因为我来自C++世界.我终于知道发生了什么,但我不知道为什么这是默认行为.我想了解为什么语言是这样设计的.

我想要一个实例变量mem.所以我尝试了这个:

class x(object):
   mem = []

obj = x()
obj.mem.append(1)
print(obj.mem)
objTWO = x()
objTWO.mem.append(2)
print(objTWO.mem)
Run Code Online (Sandbox Code Playgroud)

打印这个:

[1] 

[1, 2]
Run Code Online (Sandbox Code Playgroud)

鉴于:

class x(object):

    def __init__(self):
        self.mem = []

obj = x()
obj.mem.append(1)
print(obj.mem)
objTWO = x()
objTWO.mem.append(2)
print(objTWO.mem)
Run Code Online (Sandbox Code Playgroud)

版画

[1]

[2]
Run Code Online (Sandbox Code Playgroud)

为什么第一个是默认行为?这里的直觉是什么,因为它与多少主流OO语言的工作方式相反(他们static为顶级案例引入了关键字,这让你明确地说你想要一个静态变量)?对于Python的新手来说,这是一个惊喜.

此外,似乎您可以拥有一个实例变量和一个具有相同名称的类变量:

class x(object):
    mem = []

    def __init__(self):
        self.mem = []
Run Code Online (Sandbox Code Playgroud)

我必须运行它来弄清楚要打印的内容.我甚至无法猜到!

python java class instance-variables

4
推荐指数
1
解决办法
282
查看次数

MySQL什么时候抛出主键错误?

如果我有一个批量插入语句,例如:

INSERT INTO TABLE VALUES (x,y,z),(x2,y2,z2),(x3,y3,z3);
Run Code Online (Sandbox Code Playgroud)

并且x2违反了主键,错误是在处理之前还是之后抛出的x3

具体来说,我使用 Python 和 PyMySQL 在 try-catch 块中进行了一堆批量插入,例如:

conn = myDB.cursor() 
try:
     conn.execute("INSERT INTO TABLE VALUES (x,y,z),(x2,y2,z2),(x3,y3,z3);")
except pymysql.Error as  msg:
     print("MYSQL ERROR!:{0}".format(msg)) #print error
Run Code Online (Sandbox Code Playgroud)

我想确保如果批量插入中的一个元组失败,从而打印错误,同一批次中的其余元组仍然被处理。

我的动机是在两台服务器之间传输大量数据。在服务器1中,数据存储在日志文件中,并且正在将其插入到服务器2上的MySQL中。部分数据已经在服务器2上的MySQL中,因此存在很多故障。但是,如果我不使用批量插入,并且INSERT INTO每条(数百万条)记录都有一个单独的插入,那么运行速度似乎会慢得多。所以无论哪种方式我都遇到了麻烦:使用批量插入时,重复的失败会破坏整个语句,而如果不使用批量插入,则该过程需要更长的时间。

python mysql pymysql

4
推荐指数
1
解决办法
1929
查看次数

python3:doctest 帮助程序/内部函数?

如何进行以下工作以便运行助手的测试?它没有。

def B():
    def helper():
        """
        >>> some doctest
        result
        """

...
if __name__ == "__main__":
    import doctest
    doctest.testmod() 
Run Code Online (Sandbox Code Playgroud)

python doctest python-3.x

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

Docker中的Python日志记录类:日志消失了

几年来,我以相同的方式使用Python的日志记录类:

def get_module_logger(mod_name):
    """
    To use this, do logger = get_module_logger(__name__)
    """
    logger = logging.getLogger(mod_name)
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)
    return logger
Run Code Online (Sandbox Code Playgroud)

然后在某些模块中

logger = get_module_logger(__name__)
Run Code Online (Sandbox Code Playgroud)

现在,我正在运行一个在Docker容器中使用此功能的Python应用程序。我正在使用运行容器-d -i -t。当我在容器后进入容器时docker exec -it containername /bin/bash,如果我在生成日志的python脚本中执行命令,则可以看到日志。但是,从外面看,docker logs containername从不显示任何东西。我尝试PYTHONUNBUFFERED=0每运行几个Web帖子就运行我的容器,但这也没有帮助。尾随docker logs -f containername也不显示任何东西。所以我所有的日志,stderr和stdout都是空的。我也尝试过,logging.StreamHandler(sys.stdout)但无济于事。

怎么了?我需要更改处理程序中的某些内容吗?

编辑:我的Dockerfile非常简单:

FROM python:3.5.1
MAINTAINER tommy@...
ADD . /tmp

#need pip > 8 to have internal pypi repo in requirements.txt
RUN pip …
Run Code Online (Sandbox Code Playgroud)

python docker

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

Erlang:以编程方式获取应用程序版本

我有一个OTP应用程序。该应用程序的版本位于以下两个位置:src/application_name.src文件(OTP应用程序的标准文件)和我的rebar.config。

应用程序是否有“官方”方式获取自己的版本,或者是否需要通过sed / grep等进行黑客入侵?我想在我的应用程序中使用一个“信息”端点来打印自己的版本。当然,我总是可以从rebar.config中执行grep之类的操作,但是似乎很hack。

erlang

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

Erlang:在每个char上拆分二进制文件

我编写了一个有效的函数,将二进制文件拆分为每个char,但我觉得有一种更简单的方法:

my_binary_to_list(<<H,T/binary>>) ->
%slightly modified version of http://erlang.org/doc/efficiency_guide/binaryhandling.html
    [list_to_binary([H])|my_binary_to_list(T)];
my_binary_to_list(<<>>) -> [].

> my_binary_to_list(<<"ABC">>).
[<<"A">>,<<"B">>,<<"C">>]
Run Code Online (Sandbox Code Playgroud)

我认为这可能是凌乱的,list_to_binary([H])因为因为H应该已经是二进制了.

我尝试直接使用该链接功能,但得到的"AA"不是我想要的.然后我尝试了,[H]并得到了["A","B","C"]这也不是我想要的.

erlang

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

地形;为什么通过列表索引语法引用元数据?

示例: https: //www.terraform.io/docs/providers/kubernetes/r/service_account.html

我们看到这个:

resource "kubernetes_service_account" "example" {
  metadata {
    name = "terraform-example"
  }
  secret {
    name = "${kubernetes_secret.example.metadata.0.name}"
  }
}
Run Code Online (Sandbox Code Playgroud)

元数据不是列表,为什么秘密/名称值使用引用元数据.0

terraform

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