小编Inf*_*ity的帖子

为什么 Python 为 [0xfor x in (1, 2, 3)] 返回 [15]?

运行以下行时:

>>> [0xfor x in (1, 2, 3)]
Run Code Online (Sandbox Code Playgroud)

我希望 Python 返回一个错误。

相反,REPL 返回:

[15]

可能是什么原因?

python operator-precedence short-circuiting python-3.x

64
推荐指数
3
解决办法
8189
查看次数

在应用函数后,在DataFrame中更改系列

我正在尝试pandas使用简单的函数来就地更改我的一个列.

在阅读完整个Dataframe之后,我尝试在一个Serie上应用函数:

wanted_data.age.apply(lambda x: x+1)
Run Code Online (Sandbox Code Playgroud)

它工作得很好.当我尝试将其放回我的DataFrame时,唯一的问题是:

wanted_data.age = wanted_data.age.apply(lambda x: x+1)
Run Code Online (Sandbox Code Playgroud)

要么:

wanted_data['age'] = wanted_data.age.apply(lambda x: x+1)
Run Code Online (Sandbox Code Playgroud)

抛出以下警告:

> C:\Anaconda\lib\site-packages\pandas\core\generic.py:1974:
> SettingWithCopyWarning: A value is trying to be set on a copy of a
> slice from a DataFrame. Try using .loc[row_indexer,col_indexer] =
> value instead
> 
> See the the caveats in the documentation:
> http://pandas.pydata.org/pandas-docs/stable
> /indexing.html#indexing-view-versus-copy   self[name] = value
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用以下的长形式设置DataFrame:

wanted_data.loc[:, 'age'] = wanted_data.age.apply(lambda x: x+1)
Run Code Online (Sandbox Code Playgroud)

但是,没有其他更容易和更语法更好的方法吗?

谢谢!

python pandas

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

为什么在文本模式下编辑时不应该使用os.linesep?

Python 2.7文档(以及Python 3文档)包含有关该os.linepath函数的以下行:

在编写以文本模式打开的文件时,不要将os.linesep用作行终止符(默认值);

这是为什么?它与在二进制模式下使用它有何不同?

python

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

Python - 追加VS扩展效率

这是我用Python编写的一些代码:

from math import sqrt
abundant_list = []

for i in range(12,28123+1):
    dividor_list = [1]
    for j in range(2, int(sqrt(i))+1):
        if i%j == 0:
            dividor_list.extend([i/j,j])
    if sum(dividor_list) > i:
        abundant_list.append(i)

print abundant_list
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,代码实际上是尽可能地提高效率.

如果我使用list.append两次,或list.extend只使用一次,有什么区别吗?我知道这可能是微小的差异,但我真的很想知道:)

python performance

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

aiohttp + sqlalchemy:在回滚无效事务之前无法重新连接

我使用的是aiohttpsqlalchemy,和我创建了一个单身,帮助我,当我需要的SQLAlchemy(代码如下)的实例连接.不幸的是,每隔一段时间我就会收到以下错误(我通过重启服务器"解决"):

12月11日09:35:29 ip-xxx-xxx-xxx-xxx gunicorn [16513]:sqlalchemy.exc.StatementError:(sqlalchemy.exc.InvalidRequestError)在无效事务回滚之前无法重新连接[SQL:'.. .\nFROM ... \nWHERE ... =%(username_1)s \n LIMIT%(param_1)s'] [参数:[{}]]```

有没有办法修复当前的代码?谢谢 :)

CONNECTION_DETAILS = {
    'driver': 'pymysql',
    'dialect': 'mysql',
    'host': os.environ.get('HOST'),
    'port': 3306,
    'user': 'master',
    'password': os.environ.get('PASSWORD'),
    'database': 'ourdb',
    'charset': 'utf8'
}

_instance = None

def __new__(cls, *args, **kwargs):
    if not cls._instance:
        con_str = '{dialect}+{driver}://{user}:{password}@' \
                  '{host}:{port}/{database}?charset={charset}'\
            .format(**cls.CONNECTION_DETAILS)
        try:
            engine = sqlalchemy.create_engine(con_str)

            Session = scoped_session(sessionmaker(bind=engine))
            session = Session()  # Create the ORM handle
        except sqlalchemy.exc.OperationalError:
            logger.exception('Establishing database connection error.')

        cls._instance = super().__new__(cls)
        logger.debug("Returning …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy python-3.x pymysql aiohttp

12
推荐指数
2
解决办法
7647
查看次数

在 Python 类型注释中排除类型

我写了以下函数:

def _clean_dict(d):
    return {k: v for k, v in d.items() if v is not None}
Run Code Online (Sandbox Code Playgroud)

我想为函数添加类型注释:

def _clean_dict(d: Dict[Any, Any]) -> Dict[Any, Any]:                           
    return {k: v for k, v in d.items() if v is not None}
Run Code Online (Sandbox Code Playgroud)

但是,我想明确定义返回的字典中的值不能为 None。

有没有办法说“Any类型,除了NoneType”或“每个可能的值但是None”?

python type-hinting python-3.x mypy python-typing

11
推荐指数
2
解决办法
1683
查看次数

动态属性设置时绕过 mypy 的“模块没有属性”

我有以下代码a.py

class Tags(enum.Flag):
    NONE = 0

    A = enum.auto()
    B = enum.auto()
    C = enum.auto()

# Allow using tags.A instead of tags.Tags.A
globals().update(Tags.__members__)
Run Code Online (Sandbox Code Playgroud)

但是当我在其他文件上使用它时, mypy (正确地)无法识别属性:

import tags
print(tags.A)  # Module has no attribute "A"
Run Code Online (Sandbox Code Playgroud)

Python 3.6 有没有可能绕过这个问题?

已知的解决方案(对于我的情况来说不够好):

  • # type: ignore每次使用时都使用tags.A
  • 使用tags.Tags.A
  • __getitem__在模块级别使用(仅适用于 Python 3.7)

python python-3.x python-3.6 mypy python-typing

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

使用Pandas使用特定列的权重对DataFrame进行采样

我有一个DataFrame,它看起来像:

  index  name   city
  0      Yam    Hadera
  1      Meow   Hadera
  2      Don    Hadera
  3      Jazz   Hadera
  4      Bond   Tel Aviv
  5      James  Tel Aviv
Run Code Online (Sandbox Code Playgroud)

我希望Pandas随机选择值,使用city列中的外观数量(使用类型:) df.city.value_counts(),所以我的魔术函数的结果,假设:

df.magic_sample(3, weight_column='city')
Run Code Online (Sandbox Code Playgroud)

可能看起来像:

  0     Yam      Hadera
  1     Meow     Hadera
  2     Bond     Tel Aviv
Run Code Online (Sandbox Code Playgroud)

谢谢!:)

python statistics dataframe pandas

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

mypy:无法推断“map”的类型参数 1

当尝试使用 mypy 检查以下代码时:

import itertools
from typing import Sequence, Union, List
        
DigitsSequence = Union[str, Sequence[Union[str, int]]]


def normalize_input(digits: DigitsSequence) -> List[str]:
    try:
        new_digits = list(map(str, digits))  # <- Line 17
        if not all(map(str.isdecimal, new_digits)):
            raise TypeError
    except TypeError:
        print("Digits must be an iterable containing strings.")
        return []
    return new_digits
Run Code Online (Sandbox Code Playgroud)

mypy 抛出以下错误:

calculate.py:17: 错误:无法推断“map”的类型参数 1

为什么会出现这个错误?我该如何修复它?

谢谢 :)

编辑:这实际上是 mypy 中的一个错误,现在已修复。

python python-3.x type-annotation python-3.6 mypy

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

Union 赋值中的不兼容类型

Mypy 向我打印以下消息:

x.py:74: 错误:赋值中的类型不兼容(表达式的类型为“Union[str, Dict[str, str]]”,变量的类型为“str”)

是不是很奇怪?str是其一部分Union[str, Dict[str, str]]

代码如下:

def get_multiple(fields: List[str], config_data) -> Dict[str, str]:
    config_results = {k: v for k, v in config_data.items() if k in fields}
    log_missing_fields(fields, config_results)
    return config_results


def get_single(field: List[str], config_data) -> str:
    result = config_data.get(field)
    if result is None:
        log.warning('The following fields are missing: %s', field)
    return result


def get(fields: Union[str, List[str]]) -> Union[str, Dict[str, str]]:
    log.debug('Retrieving values %s from config', str(fields))
    config_data = read_config()
    get_data = get_multiple if …
Run Code Online (Sandbox Code Playgroud)

python types python-3.x python-3.5 mypy

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