通常,我的工作流程涉及在IPython shell中进行数据清理/修改.自从IPython 5.0版本以及终端界面的所有重大升级以来,这已经变得特别精彩.所以,假设我试图修改一些非结构化数据:
In [11]: for i, (num, header, txt) in enumerate(data):
...: header = [e.strip() for e in header.strip().split('\n')]
...: header[4] = header[4].strip(',').split(',')
...: data[i] = (num, header, txt)
...:
Run Code Online (Sandbox Code Playgroud)
太棒了,它有效!但现在,我真的想在编辑器中将其添加到脚本中.如果我从终端复制并粘贴,我会捕获左边的所有垃圾.我可以在编辑器中轻松地清理它,但如果我可以直接将代码从终端直接复制到我的剪贴板而不触摸鼠标而且不需要抓取额外的东西,这将是很棒的.在IPython中有这样的功能吗?
我正在寻找格式化的字节字符串文字.具体来说,相当于
name = "Hello"
bytes(f"Some format string {name}")
Run Code Online (Sandbox Code Playgroud)
可能是类似的东西fb"Some format string {name}".
这样的事情存在吗?
如果之前有人问过这个问题,但我找不到任何相关的答案,请原谅我。
考虑一个将数字类型作为输入参数的函数:
def foo(a):
return ((a+1)*2)**4;
Run Code Online (Sandbox Code Playgroud)
这适用于整数、浮点数和复数。
是否有基本类型,以便我可以进行类型提示(真实现有类型/基类),例如:
def foo(a: numeric):
return ((a+1)*2)**4;
Run Code Online (Sandbox Code Playgroud)
此外,我需要在集合类型参数中使用它,例如:
from typing import Collection;
def foo(_in: Collection[numeric]):
return ((_in[0]+_in[1])*2)**4;
Run Code Online (Sandbox Code Playgroud) 如何为 Python 3.8 安装 Pip?我将 3.8 设为我的默认 Python 版本。
sudo apt install python3.8-pip给出unable to locate package python3.8-pip
python3.8 -m pip install [package]了no module named pip
我无法运行,sudo apt install python3-pip因为它为 Python 3.6 安装了 pip
人们使用什么?
我使用 field(init= False) 来禁用初始化 self.ref。那么它就是 post 中的一个值。以下代码引发AttributeError: 'Data' object has no attribute 'ref'
from dataclasses import dataclass, field
def make_list(): return [[0] for k in range(9)]
@dataclass
class Data:
rows: list
cols: list
blocks: list
ref: dict = field(init=False)
def __init__(self, slots=None):
self.rows = make_list()
self.cols = make_list()
self.blocks = make_list()
if slots:
for i in range(9):
for j in range(9):
self.cols[j][i] = self.rows[i][j] = slots[i][j]
def __post_init__(self):
print("post-init executed")
self.ref = {"rows": self.rows, "cols": self.cols, "blocks": self.blocks}
test …Run Code Online (Sandbox Code Playgroud) 所以,我正在观看Raymond Hettinger的演讲,将代码转换为美丽的,惯用的Python,并且他提出了iter我从未意识到的这种形式.他的例子如下:
代替:
blocks = []
while True:
block = f.read(32)
if block == '':
break
blocks.append(block)
Run Code Online (Sandbox Code Playgroud)
使用:
blocks = []
read_block = partial(f.read, 32)
for block in iter(read_block, ''):
blocks.append(block)
Run Code Online (Sandbox Code Playgroud)
检查完文档后iter,我发现了一个类似的例子:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
Run Code Online (Sandbox Code Playgroud)
这看起来对我很有用,但我想知道你是否Pythonistas知道这个构造的任何不涉及I/O读取循环的例子?也许在标准库中?
我可以想到非常人为的例子,如下所示:
>>> def f():
... f.count += 1
... return f.count
...
>>> f.count = 0
>>> list(iter(f,20))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …Run Code Online (Sandbox Code Playgroud) 我发现结果有点随机.有时它是副本有时它是一个视图.例如:
df = pd.DataFrame([{'name':'Marry', 'age':21},{'name':'John','age':24}],index=['student1','student2'])
df
age name
student1 21 Marry
student2 24 John
Run Code Online (Sandbox Code Playgroud)
现在,让我尝试稍微修改一下.
df2= df.loc['student1']
df2 [0] = 23
df
age name
student1 21 Marry
student2 24 John
Run Code Online (Sandbox Code Playgroud)
如你所见,没有任何改变.df2是一个副本.但是,如果我将另一名学生添加到数据框中...
df.loc['student3'] = ['old','Tom']
df
age name
student1 21 Marry
student2 24 John
student3 old Tom
Run Code Online (Sandbox Code Playgroud)
尝试再次改变年龄..
df3=df.loc['student1']
df3[0]=33
df
age name
student1 33 Marry
student2 24 John
student3 old Tom
Run Code Online (Sandbox Code Playgroud)
现在df3突然成了一个观点.到底是怎么回事?我想价值'旧'是关键?
为什么下面的代码会出错?
class Foo:
def __new__(cls, *args, **kwargs):
print("Creating Instance")
instance = super(Foo, cls).__new__(cls,*args, **kwargs)
return instance
def __init__(self, a, b):
self.a = a
self.b = b
z= Foo(2,3)
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误
TypeError: object.__new__() takes exactly one argument (the type to instantiate)
Run Code Online (Sandbox Code Playgroud) 我很困惑,这很简单,但我没有立即在StackOverflow上找到答案:
df.set_index('xcol')使列'xcol'成为索引(当它是df列时).
df.reindex(myList)但是,从数据框外部获取索引,例如,从myList我们在其他地方定义的名称列表中获取索引.
我希望这篇文章澄清一下!欢迎增加这篇文章!
def create(ids):
policy = {
'Statement': []
}
for i in range(0, len(ids), 200):
policy['Statement'].append({
'Principal': {
'AWS': list(map(lambda id: f"arn:aws:iam::{id}:root", ids[i:i + 200]))
}
})
return policy
Run Code Online (Sandbox Code Playgroud)
当我对该方法进行函数调用时,create({'1','2'})我在线收到TypeError: 'set' object is not subscriptable错误消息
'AWS': list(map(lambda id: f"arn:aws:iam::{id}:root", ids[i:i + 200]))。来自 java 背景,这与类型转换有某种关系吗?该错误是否意味着我将设置的数据结构传递给列表函数?这怎么可能解决?