运行以下行时:
>>> [0xfor x in (1, 2, 3)]
Run Code Online (Sandbox Code Playgroud)
我希望 Python 返回一个错误。
相反,REPL 返回:
[15]
可能是什么原因?
我正在尝试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 2.7文档(以及Python 3文档)包含有关该os.linepath
函数的以下行:
在编写以文本模式打开的文件时,不要将os.linesep用作行终止符(默认值);
这是为什么?它与在二进制模式下使用它有何不同?
这是我用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
只使用一次,有什么区别吗?我知道这可能是微小的差异,但我真的很想知道:)
我使用的是aiohttp
和sqlalchemy
,和我创建了一个单身,帮助我,当我需要的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) 我写了以下函数:
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
”?
我有以下代码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)我有一个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)
谢谢!:)
当尝试使用 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 中的一个错误,现在已修复。
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 ×10
python-3.x ×6
mypy ×4
pandas ×2
python-3.6 ×2
aiohttp ×1
dataframe ×1
performance ×1
pymysql ×1
python-3.5 ×1
sqlalchemy ×1
statistics ×1
type-hinting ×1
types ×1