Python语言(尤其是3.x)允许对迭代的非常一般的解包,其中一个简单的例子就是
a, *rest = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
多年来,这种拆包已经逐渐推广(参见例如PEP 3132和PEP 448),允许它在越来越多的情况下使用.因此,我惊讶地发现以下是Python 3.6中的无效语法(并且在Python 3.7中仍然如此):
def f():
rest = [2, 3]
return 1, *rest # Invalid
Run Code Online (Sandbox Code Playgroud)
我可以通过将返回的元组封装在括号中来使其工作,如下所示:
def f():
rest = [2, 3]
return (1, *rest) # Valid
Run Code Online (Sandbox Code Playgroud)
我在return
声明中使用它的事实似乎很重要,因为
t = 1, *rest
Run Code Online (Sandbox Code Playgroud)
确实是合法的,无论有没有括号都会产生相同的结果.
Python开发人员是否忘记了这种情况,或者有没有理由说明这种情况是无效的语法?
这破坏了我认为我使用Python语言的重要合同.考虑以下(也是有效的)解决方案:
def f():
rest = [2, 3]
t = 1, *rest
return t
Run Code Online (Sandbox Code Playgroud)
通常,当我有这样的代码时,我认为t
是一个临时名称,我应该能够摆脱简单地t
用它的定义替换底线.但在这种情况下,这会导致无效代码
def f():
rest = [2, 3]
return 1, *rest
Run Code Online (Sandbox Code Playgroud)
当然,在返回值周围放置括号当然没什么大不了的,但通常需要额外的括号来区分几种可能的结果(分组).这不是这种情况,因为省略括号不会产生一些其他不需要的行为,而是根本没有行为.
我有一个(可能很大的)data
小非负整数的三元组列表,例如
data = [\n (1, 0, 5),\n (2, 4, 2),\n (3, 2, 1),\n (4, 3, 4),\n (3, 3, 1),\n (1, 2, 2),\n (4, 0, 3),\n (0, 3, 5),\n (1, 5, 1),\n (1, 5, 2),\n]\n
Run Code Online (Sandbox Code Playgroud)\n我想对其中的元组进行排序data
,以便相邻元组(data[i]
和data[i+1]
)“尽可能相似”。
将两个三元组的不相似度定义为它们之间不相等的元素数量。例如
\n(0, 1, 2)
对比(0, 1, 2)
:差异0
。(0, 1, 2)
对比(0, 1, 3)
:差异1
。(0, 1, 2)
对比(0, 2, …
我有一个包含各种变量的类
public class myClass{
public int id;
public String category;
public String description;
public String start;
public String end;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通过创建内部函数或检查调用对象来检查变量是否存在?
例如,检查myClass是否包含一个名为"category"的变量(确实如此).或者它是否包含一个名为"foo"的类别(它没有).
我正在编写的程序涉及在运行时切换模型.
我目前正在使用Saver从磁盘中保存/加载模型,如下所示:https://www.tensorflow.org/api_docs/python/state_ops/saving_and_restoring_variables#Saver.
模型相当小,可以存储在内存中,所以我想知道是否有人知道在内存中存储和恢复这些模型的方法,而不是将它们保存到磁盘.
我试图修改tensorflow源以将模型保存到内存,但gen_io_ops
似乎在编译期间生成.另一种可能的方法是使用内存映射文件.有谁知道更简单的方法?
我有这样的事情:
coefs = [28, -36, 50, -22]
print(numpy.roots(coefs))
Run Code Online (Sandbox Code Playgroud)
当然结果是:
[ 0.35770550+1.11792657j 0.35770550-1.11792657j 0.57030329+0.j ]
Run Code Online (Sandbox Code Playgroud)
但是,通过使用这种方法,如何才能获得它(如果有的话)(如浮点数)?这意味着我的例子:
0.57030329
Run Code Online (Sandbox Code Playgroud) 我正在尝试从存储在谷歌云存储桶中的VM实例读取Python代码中的.json
文件。dict()
我尝试将 json 文件读取为 blob:
client = storage.Client()
bucket = client.get_bucket('bucket-id-here')
blob = bucket.get_blob('remote/path/to/file.json')
str_json = blob.download_as_string()
Run Code Online (Sandbox Code Playgroud)
但我无法解码str_json
. 我的做法正确吗?如果有任何其他方法可用,请告诉我。
我需要类似的东西:
client = storage.Client()
bucket = client.get_bucket('bucket-id-here')
blob = bucket.get_blob('remote/path/to/file.json')
str_json = blob.download_as_string()
Run Code Online (Sandbox Code Playgroud) 目标是从用户的段落中列出并进行迭代,以便我可以计算出多少个单词包含特殊字母“ j,x,q,z”。
输入示例:
在地面的一个洞中住着一个霍比特人。它不是一个肮脏,肮脏,潮湿的小孔,里面充满蠕虫的末端和难闻的气味,也没有一个干燥,裸露的沙质孔,里面没有东西可坐下或进食;那是一个霍比特洞,这意味着舒适。
输出示例: 1个单词,带有稀有字符
我已经开始在代码中将用户的段落分成一个列表,但是我很难遍历该列表并查找每个特殊字母的实例。
这是我到目前为止的内容:
def rareChar(words):
rareWords = 0
rareChars = ['j', 'x', 'q', 'z']
for astring in words:
wds = words.split()
for char in wds:
if char in rareChars:
rareWords = rareWords + 1
return rareWords
def CoolPara(words):
print(rareChar(words), 'word(s) with a rare character')
# DO NOT CHANGE CODE BELOW
print(CoolPara(input("Enter: ")))
Run Code Online (Sandbox Code Playgroud)
如果使用示例输入运行,则会得到输出“ 0个单词(带一个罕见字符)”。我该如何解决这个问题,以便获得预期的输出。任何帮助将不胜感激,因为我还是编码的新手
还有一个简短的注意事项:我只允许使用split()和Len()的方法/函数
为了追求更小的 Docker 镜像,apt
在安装软件包后删除(对于基于 Debian/Ubuntu 的镜像)缓存是很常见的。就像是
RUN rm -rf /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些Dockerfile
在每个包安装后完成的地方(示例),即使用模式
# Install some package
RUN apt-get update \
&& apt-get install -y <some-package> \
&& rm -rf /var/lib/apt/lists/*
# Do something
...
# Install another package
RUN apt-get update \
&& apt-get install -y <another-package> \
&& rm -rf /var/lib/apt/lists/*
# Do something else
...
Run Code Online (Sandbox Code Playgroud)
这样做有什么好处,而不是只apt
在最后清理缓存(因此只在开始时更新一次)?对我来说,似乎必须update
多次删除和缓存只会减慢图像构建速度。
在Cython代码中,我可以分配一些内存并将其包装在内存视图中,例如:
cdef double* ptr
cdef double[::1] view
ptr = <double*> PyMem_Malloc(N*sizeof('double'))
view = <double[:N]> ptr
Run Code Online (Sandbox Code Playgroud)
如果现在我使用释放内存PyMem_Free(ptr)
,则尝试访问元素之类ptr[i]
的错误将导致错误。但是,我可以安全地尝试访问view[i]
(尽管它不会返回原始数据)。
我的问题是:仅释放指针总是安全吗?是否以某种方式通知内存视图对象已释放内存,还是应该以某种方式手动删除视图?此外,即使内存视图引用了内存,也可以保证释放内存吗?
我正在使用python 3.6开发的项目中工作,而我使用的是python 3.7。我试图运行通过的测试。但是最后我遇到了一系列这样的错误:
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/project/.eggs/scikit_learn-0.20.2-py3.7-macosx-10.13-x86_64.egg/sklearn/__init__.py", line 64, in <module>
from .base import clone
File "/project/.eggs/scikit_learn-0.20.2-py3.7-macosx-10.13-x86_64.egg/sklearn/base.py", line 10, in <module>
import numpy as np
File "/project/.eggs/numpy-1.16.0-py3.7-macosx-10.13-x86_64.egg/numpy/__init__.py", line 142, in <module>
from . import core
File "/project/.eggs/numpy-1.16.0-py3.7-macosx-10.13-x86_64.egg/numpy/core/__init__.py", line 16, in <module>
from . import multiarray
File "/project/.eggs/numpy-1.16.0-py3.7-macosx-10.13-x86_64.egg/numpy/core/multiarray.py", line 70, in <module>
def empty_like(prototype, …
Run Code Online (Sandbox Code Playgroud) python ×7
python-3.x ×5
numpy ×2
algorithm ×1
apt ×1
cython ×1
debian ×1
docker ×1
dockerfile ×1
free ×1
java ×1
json ×1
memory ×1
memoryview ×1
minimization ×1
optimization ×1
python-3.6 ×1
python-3.7 ×1
return ×1
tensorflow ×1
tuples ×1
ubuntu ×1