尝试学习在 Python 中输入提示。鉴于这两个函数:
from typing import Union, TextIO
def myfunc_ok(file: TextIO):
mydump = file.read()
print(mydump)
def myfunc_error(file: Union[str, TextIO]):
mydump = file.read()
print(mydump)
Run Code Online (Sandbox Code Playgroud)
第一个对 mypy 没问题,但它抱怨第二个有错误
Item "str" of "Union[str, TextIO]" has no attribute "read"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我是否错误地使用了类型提示?(使用 python3.7 和 mypy 0.610,也用 py3.6 测试)
我正在使用需要要求用户输入的代码,使用 tkinter 窗口(我没有在代码的其他部分使用 tkinter)。
我的问题是,我只需要使用 tkinter 窗口在按下表单上的“确定”按钮后返回一个值,这也会关闭表单。到目前为止,我可以让它工作的唯一方法是使用全局变量。我已经搜索了其他解决方案,但它们要么不返回值(它们只是打印它),要么不允许传递提示文本。
如果您能提供帮助,请先致谢。
from tkinter import *
def input_text(prompt):
def ok():
global ret
ret = entry.get()
master.destroy()
master = Tk()
lbl = Label(master, text=prompt)
lbl.pack()
entry = Entry(master)
entry.pack()
entry.focus_set()
butt = Button(master, text = "OK", width = 10, command = ok)
butt.pack()
mainloop()
print("I am here!")
ret=""
input_text("Enter something")
print("ret is:", ret)
Run Code Online (Sandbox Code Playgroud) 如何使用 sqlalchemy 生成此 SQL
SELECT SUM(click) / SUM(impression) as my_indicator
FROM stats;
Run Code Online (Sandbox Code Playgroud)
session.query(
func.sum(table.click).label("click"),
func.sum(table.impression).label("impression"),
# ??? sum(click) / sum(impression) ???
).group_by(table.type)
Run Code Online (Sandbox Code Playgroud) 尝试对 PostgreSQL > 9.5 的值数组执行 UPSERT。
尝试像SQLALchemy文档中那样构建语句,但没有解释如何为数组而不是单行执行此操作。insert 语句构建正确,所以我想可以使用 on_conflict_do_update 函数来做到这一点。
有这个代码:
stock_table = Table("stock_history", metadata,
Column('date', sqlalchemy.types.NVARCHAR(length=255), primary_key=True),
Column('product_id', sqlalchemy.types.INTEGER(), primary_key=True),
Column('product_sku', sqlalchemy.types.NVARCHAR(length=255)),
Column('on_hand_qty', sqlalchemy.dialects.postgresql.DOUBLE_PRECISION()),
Column('available_qty', sqlalchemy.dialects.postgresql.DOUBLE_PRECISION()),
Column('output_qty', sqlalchemy.dialects.postgresql.DOUBLE_PRECISION())
)
stock_today = pandas.read_sql_query(queryStock, odoo_engine)
insert_stmt = sqlalchemy.dialects.postgresql.insert(stock_table).values(stock_today)
upser_stmt = insert_stmt.on_conflict_do_update(
index_elements=['date', 'product_id'],
set_=stock_today.to_dict(orient='dict')
)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
AttributeError: 'StrSQLCompiler' 对象没有属性 'visit_on_conflict_do_update'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "pompeiiETL.py", line 15, in <module>
pompeiiJobs.runStockJob(dwh_engine, odoo_prod_engine)
File "/Users/alex/Development/DataLab/pompeii-datalab/pompeiiETL/jobs.py", line 54, in runStockJob
print(upser_stmt) …Run Code Online (Sandbox Code Playgroud) 我有一个数据框df,看起来像这样:
CustomerId Age
1 25
2 18
3 45
4 57
5 34
Run Code Online (Sandbox Code Playgroud)
我有一个名为“价格”的列表,看起来像这样:
Price = [123,345,1212,11,677]
Run Code Online (Sandbox Code Playgroud)
我想将该列表添加到数据框。这是我的代码:
df['Price'] = Price
Run Code Online (Sandbox Code Playgroud)
似乎可行,但是当我打印数据框时,名为“ Price”的字段包含所有元数据信息,例如Name,Type ...以及Price的值。
如何创建一个仅包含“价格”列表值的“价格”列,以便数据框如下所示:
CustomerId Age Price
1 25 123
2 18 345
3 45 1212
4 57 11
5 34 677
Run Code Online (Sandbox Code Playgroud) 我是 Python 的初学者,试图制作一个函数,该函数将使用偶数索引大写所有值,并使用奇数索引小写所有值。
我一直在为只给我第一个值的循环而苦苦挣扎。我也尝试过 while 循环。但是我很好奇是否有办法让它与 for 循环一起工作(我需要在某处使用 '+=1' 吗?)
def func1(x):
for (a,b) in enumerate (x):
if a%2 == 0:
return b.upper()
else:
return b.lower()
func1('Testing Testing')
>>>'T'
Run Code Online (Sandbox Code Playgroud) 我正在研究 Jupyter Notebook,并希望通过使用 Google GPU 使其运行得更快。我已经进行了一些研究并找到了解决方案,但它对我不起作用。
解决方案是:
“最简单的方法是使用连接到本地运行时,然后选择硬件加速器作为 GPU,如Google Colab 免费 GPU 教程中所示。”
我确实设法将 googe colab 连接到 jupyter,但是当我尝试将硬件加速器切换到 GPU 时,我与 jupyter 笔记本断开了连接......在教程中,他似乎能够连接到 jupyter 并且仍然使用 GPU,但我不能。
有谁知道如何解决这个问题?
我提出了这个想法如何制作跨模块变量?在 python3 中运行。并且懒得使用变量__builtins__而不是模块builtins。这应该没有区别,因为:
# file spam.py:
import builtins
print (builtins is __builtins__)
print (id(builtins))
print (id(__builtins__))
Run Code Online (Sandbox Code Playgroud)
这是它变得有趣的时候:builtins不是__builtins__在导入时:
$ python3 spam.py
True
140598001743336
140598001743336
$ python3 -c 'import spam'
False
139755426543080
139755426520904
Run Code Online (Sandbox Code Playgroud)
有谁知道会发生什么?
(给定页面上的评论提到“__builtins__是 CPython 的特性,你真的不应该使用它”,但我很好奇......)
我想制作一个带有定义标签的数据框。不知道如何告诉熊猫从列表中获取标签。希望有人能帮忙
import numpy as np
import pandas as pd
df = []
thislist = []
thislist = ["A","D"]
thisdict = {
"A": [1, 2, 3],
"B": [4, 5, 6],
"C": [7, 8, 9],
"D": [7, 8, 9]
}
df = pd.DataFrame(data= thisdict[thislist]) # <- here is my problem
Run Code Online (Sandbox Code Playgroud)
我想得到这个:
df = A D
1 7
2 8
3 9
Run Code Online (Sandbox Code Playgroud) 我可以将 python 类转换为 numpy 吗array?
from dataclasses import dataclass
import numpy as np
@dataclass
class X:
x: float = 0
y: float = 0
x = X()
x_array = np.array(x) # would like to get an numpy array np.array([X.x,X.y])
Run Code Online (Sandbox Code Playgroud)
在最后一步中,我想获得一个数组np.array([X.x, X.y])。相反,我得到了array(X(x=0, y=0), dtype=object)。
我可以提供 的方法,dataclass以便根据需要进行转换(或重载 的现有方法之一dataclass)吗?
python ×8
python-3.x ×6
dataframe ×2
pandas ×2
sqlalchemy ×2
enumerate ×1
gpu ×1
list ×1
loops ×1
metadata ×1
mypy ×1
numpy ×1
postgresql ×1
tkinter ×1
type-hinting ×1