一段代码工作,我不明白为什么.它应该不符合我的理解.问题在下面很容易说明:
"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)
它如何弄清楚如何调用此方法?
我最近开始使用Swagger来生成烧瓶模板:http : //editor.swagger.io/#/
我的工作流程有缺陷,我想知道哪里出了问题。一世:
这部分过程很好。但是,假设我们要添加一个新端点或更改一个现有端点。怎么办?一世:
似乎最初的烧瓶模板与进行中的维护之间存在差距。我究竟做错了什么?
帖子我可以使用什么而不是箭头操作符,` - >`? 和箭头操作员-在C(>)的使用 状态
以下两个表达式是等效的:
Run Code Online (Sandbox Code Playgroud)x->y (*x).y
但是,当作为数学等价时,这似乎并不总是正确的.
为什么g ++在替换时会抛出错误
a->b->c
Run Code Online (Sandbox Code Playgroud)
同
a->(*b).c
Run Code Online (Sandbox Code Playgroud)
?
看来上述等价并不总是可以替换的.因此,我认为"等同"一词有点误导.
另外,我不是指这个问题中的任何超载.
这困扰了我几个小时,因为我来自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)
我必须运行它来弄清楚要打印的内容.我甚至无法猜到!
如果我有一个批量插入语句,例如:
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每条(数百万条)记录都有一个单独的插入,那么运行速度似乎会慢得多。所以无论哪种方式我都遇到了麻烦:使用批量插入时,重复的失败会破坏整个语句,而如果不使用批量插入,则该过程需要更长的时间。
如何进行以下工作以便运行助手的测试?它没有。
def B():
def helper():
"""
>>> some doctest
result
"""
...
if __name__ == "__main__":
import doctest
doctest.testmod()
Run Code Online (Sandbox Code Playgroud) 几年来,我以相同的方式使用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) 我有一个OTP应用程序。该应用程序的版本位于以下两个位置:src/application_name.src文件(OTP应用程序的标准文件)和我的rebar.config。
应用程序是否有“官方”方式获取自己的版本,或者是否需要通过sed / grep等进行黑客入侵?我想在我的应用程序中使用一个“信息”端点来打印自己的版本。当然,我总是可以从rebar.config中执行grep之类的操作,但是似乎很hack。
我编写了一个有效的函数,将二进制文件拆分为每个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"]这也不是我想要的.
示例: 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?