小编jmd*_*_dk的帖子

Python元组在return语句中解压缩

Python语言(尤其是3.x)允许对迭代的非常一般的解包,其中一个简单的例子就是

a, *rest = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

多年来,这种拆包已经逐渐推广(参见例如PEP 3132PEP 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)

当然,在返回值周围放置括号当然没什么大不了的,但通常需要额外的括号来区分几种可能的结果(分组).这不是这种情况,因为省略括号不会产生一些其他不需要的行为,而是根本没有行为.

python tuples return python-3.x iterable-unpacking

66
推荐指数
1
解决办法
4226
查看次数

对数据进行排序的算法,以使相邻元素尽可能相同

我有一个(可能很大的)data小非负整数的三元组列表,例如

\n
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

将两个三元组的不相似度定义为它们之间不相等的元素数量。例如

\n
    \n
  • (0, 1, 2)对比(0, 1, 2):差异0
  • \n
  • (0, 1, 2)对比(0, 1, 3):差异1
  • \n
  • (0, 1, 2)对比(0, 2, …

python algorithm optimization minimization time-complexity

47
推荐指数
5
解决办法
3071
查看次数

查看类中是否存在字段

我有一个包含各种变量的类

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"的类别(它没有).

java

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

在内存中存储张量流模型

我正在编写的程序涉及在运行时切换模型.

我目前正在使用Saver从磁盘中保存/加载模型,如下所示:https://www.tensorflow.org/api_docs/python/state_ops/saving_and_restoring_variables#Saver.

模型相当小,可以存储在内存中,所以我想知道是否有人知道在内存中存储和恢复这些模型的方法,而不是将它们保存到磁盘.

我试图修改tensorflow源以将模型保存到内存,但gen_io_ops似乎在编译期间生成.另一种可能的方法是使用内存映射文件.有谁知道更简单的方法?

python tensorflow

19
推荐指数
1
解决办法
1393
查看次数

只在numpy打印真正的根

我有这样的事情:

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)

python numpy python-3.x

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

如何从谷歌云存储桶中读取Python代码中的.json文件

我正在尝试从存储在谷歌云存储桶中的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)

json python-3.x google-cloud-storage

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

在列表中查找特定字符

目标是从用户的段落中列出并进行迭代,以便我可以计算出多少个单词包含特殊字母“ 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()的方法/函数

python python-3.x

11
推荐指数
1
解决办法
157
查看次数

Dockerfile:重复 apt 缓存清理的好处

为了追求更小的 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多次删除和缓存只会减慢图像构建速度。

ubuntu debian apt docker dockerfile

11
推荐指数
1
解决办法
3968
查看次数

Cython:已释放内存的内存视图

在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 memory free cython memoryview

10
推荐指数
1
解决办法
215
查看次数

RuntimeError:Empty_like方法已具有文档字符串

我正在使用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 numpy python-3.x python-3.6 python-3.7

10
推荐指数
1
解决办法
3204
查看次数