小编Dee*_*ace的帖子

为什么Python在为dict而不是为list的迭代过程中强制更改大小?

这个问题不是在迭代过程Dictionary更改大小的重复-代码在Py2中有效,而在Py3中无效。这个问题问为什么不对此强制执行list,而不是如何修复代码。

Python将愉快地执行

li = [1, 2, 3]
for n in li:
    if n % 2 == 0:
        li.remove(n)
Run Code Online (Sandbox Code Playgroud)

但是,如果我们尝试使用字典:

a = {1: '', 2: '', 3: ''}   
for n in a:                 
    if n % 2 == 0:          
        a.pop(n)
Run Code Online (Sandbox Code Playgroud)

我们得到

RuntimeError: dictionary changed size during iteration
Run Code Online (Sandbox Code Playgroud)

因为我假设这是实现细节,所以我会注意到这已经在CPython 3.7.0和3.4.2中进行了测试。

python

12
推荐指数
0
解决办法
125
查看次数

为什么 mypy 很难分配给嵌套字典?

mypy版本0.910

考虑

d = {
    'a': 'a',
    'b': {
        'c': 1
    }
}

d['b']['d'] = 'b'
Run Code Online (Sandbox Code Playgroud)

将其提供给mypy结果

error: Unsupported target for indexed assignment ("Collection[str]")
Run Code Online (Sandbox Code Playgroud)

mypy放置推断错误类型的一侧d(它显然不是字符串集合),添加一个非常基本的显式类型d修复此问题:

d: dict = {
    ... # same as above
}
Run Code Online (Sandbox Code Playgroud)
Success: no issues found in 1 source file
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪。mypy绝对应该能够推断出这d是一个没有d: dict.

python type-hinting mypy python-typing

12
推荐指数
1
解决办法
3016
查看次数

在Python中,'返回self'是否返回对象或指针的副本?

假设我有一堂课

class A:
    def method(self):
        return self
Run Code Online (Sandbox Code Playgroud)

如果method被调用,是指向A要返回的对象的指针,还是对象的副本?

python pointers class

10
推荐指数
2
解决办法
6757
查看次数

python-requests发布了unicode文件名

我已经在SO上阅读了几个相关的问题,但没有设法找到一个有效的解决方案.

我有一个带有这个简化代码的Flask服务器:

app = Flask(__name__)
api = Api(app)


class SendMailAPI(Resource):
    def post(self):
        print request.files
        return Response(status=200)

api.add_resource(SendMailAPI, '/')

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)
Run Code Online (Sandbox Code Playgroud)

然后在客户端:

# coding:utf-8

import requests

eng_file_name = 'a.txt'
heb_file_name = u'?.txt'

requests.post('http://localhost:5000/', files={'file0': open(eng_file_name, 'rb')})
requests.post('http://localhost:5000/', files={'file0': open(heb_file_name, 'rb')})
Run Code Online (Sandbox Code Playgroud)

当发送带有非utf-8文件名的第一个请求时,服务器接收带有文件的请求并打印ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)]),但是当发送带有utf-8文件名的文件时,服务器似乎在打印时没有收到该文件ImmutableMultiDict([]).

我正在使用请求,2.3.0但问题并没有解决最新版本(2.8.1),Flask版本0.10.1和Flask-RESTful版本0.3.4.

我已经完成了一些requests代码挖掘并且请求似乎已发送正常(即使用该文件),并且我在发送之前打印了请求,并且看到文件名确实编码为RFC2231:

--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt
Run Code Online (Sandbox Code Playgroud)

总结一下,我不完全确定问题是否在于requests没有正确地将文件附加到请求,或者是否Flask存在拾取具有根据RFC2231编码的文件名的文件的问题.

更新:requestsGitHub中遇到过这个问题:https://github.com/kennethreitz/requests/issues/2505

python unicode flask python-requests flask-restful

9
推荐指数
1
解决办法
2119
查看次数

从队列中获取最后 n 个项目

我看到的所有内容都是关于列表的,但这是关于events = queue.queue() 哪个队列包含我想要提取的对象,但是我将如何从该队列中获取最后 N 个元素?

python queue

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

正则表达式:不匹配以换行符 (\n) 结尾的字符串与行尾锚点 ($)

我不知道如何匹配一个字符串,但如果它有一个尾随换行符 ( \n),它似乎自动剥离了:

import re

print(re.match(r'^foobar$', 'foobar'))
# <_sre.SRE_Match object; span=(0, 6), match='foobar'>

print(re.match(r'^foobar$', 'foobar\n'))
# <_sre.SRE_Match object; span=(0, 6), match='foobar'>

print(re.match(r'^foobar$', 'foobar\n\n'))
# None
Run Code Online (Sandbox Code Playgroud)

对我来说,第二种情况也应该返回None.
当我们用$, like设置模式的结尾时^foobar$,它应该只匹配一个字符串 like foobar,而不是foobar\n

我错过了什么?

python regex newline match python-3.x

7
推荐指数
1
解决办法
6443
查看次数

使用itertools.tee复制嵌套迭代器(即itertools.groupby)

我正在读一个文件(在做一些昂贵的逻辑时),我需要在不同的函数中迭代几次,所以我真的只想读取和解析文件一次.

解析函数解析文件并返回一个itertools.groupby对象.

def parse_file():
    ...
    return itertools.groupby(lines, key=keyfunc)
Run Code Online (Sandbox Code Playgroud)

我考虑过做以下事情:

csv_file_content = read_csv_file()

file_content_1, file_content_2 = itertools.tee(csv_file_content, 2)

foo(file_content_1)
bar(file_content_2)
Run Code Online (Sandbox Code Playgroud)

但是,itertools.tee似乎只能"复制"外部迭代器,而内部(嵌套)迭代器仍然引用原始(因此在迭代返回的第一个迭代器后它将耗尽itertools.tee).

独立MCVE:

from itertools import groupby, tee

li = [{'name': 'a', 'id': 1},
      {'name': 'a', 'id': 2},
      {'name': 'b', 'id': 3},
      {'name': 'b', 'id': 4},
      {'name': 'c', 'id': 5},
      {'name': 'c', 'id': 6}]

groupby_obj = groupby(li, key=lambda x:x['name'])
tee_obj1, tee_obj2 = tee(groupby_obj, 2)

print(id(tee_obj1))
for group, data in tee_obj1:
    print(group)
    print(id(data))
    for i …
Run Code Online (Sandbox Code Playgroud)

python iterator python-itertools

7
推荐指数
1
解决办法
114
查看次数

'-' 是格式为 '%Y-%-m-%-d' 的错误指令-python/django

尝试将 str 转换为日期,例如“2017-8-27”

我的代码:

from datetime import datetime as dt
import datetime, collections

date = dt.strptime('2017-8-27', '%Y-%-m-%-d')
Run Code Online (Sandbox Code Playgroud)

但我看到以下消息:

'-' 是格式为 '%Y-%-m-%-d' 的错误指令

并且不明白什么是不正确的。我该如何解决?

提前致谢,

python

6
推荐指数
1
解决办法
6944
查看次数

函数后的括号是什么意思

有人问我在Python 3编写一个函数为:写一个调用的函数general_poly,这将,例如,评估general_poly([1, 2, 3, 4])(10)12341*10^3 + 2*10^2 + 3*10^1 + 4*10^0.

现在我不明白第二个括号是什么(10)意思.

我的功能如何general_poly知道,将这个值放在自身内部并使用它?

python function python-3.x

6
推荐指数
1
解决办法
131
查看次数

将函数与 iter().map() 一起使用 - 作为命名函数与作为闭包

这两个片段来自 Python,在行为上几乎完全等同。它们都工作并提供相同的输出,尽管它们生成的字节码略有不同。

def lower_case(s):
    return s.lower()

map(lower_case, ["A", "B"])
Run Code Online (Sandbox Code Playgroud)

def lower_case(s):
    return s.lower()

map(lambda s: lower_case(s), ["A", "B"])
Run Code Online (Sandbox Code Playgroud)

学习 Rust,我正在尝试解决以下案例。有一个函数接收字符串并返回第一个字符大写的字符串版本:

pub fn capitalize_first(input: &str) -> String {
    let mut c = input.chars();
    match c.next() {
        None => String::new(),
        Some(first) => first.to_uppercase().collect::<String>() + c.as_str(),
    }
}
Run Code Online (Sandbox Code Playgroud)

用另一个接受字符串向量的函数包装这个函数是有趣的地方:

pub fn capitalize_first(input: &str) -> String {
    let mut c = input.chars();
    match c.next() {
        None => String::new(),
        Some(first) => first.to_uppercase().collect::<String>() + c.as_str(),
    }
}

pub fn capitalize_words(words: Vec<&str>) -> Vec<String> {
    words.iter().map(|w| …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
1323
查看次数