我很惊讶c ++允许将解除引用的指针递增到一个常量数据,它不应该允许通过指向const数据的指针.考虑一下代码:
#include<iostream>
#include<climits>
using namespace std;
int main(){
int x = 2;
const int *xPtr2 = &x;
*xPtr2++;
cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是x的值仍然是2.这意味着*xPtr2实际上没有增加.我也试过*xPtr2 = 3,但这次它显示了编译错误.为什么会这样?
def test_stats(team, *args):
if not args:
[do some stuff]
else:
team_fixtures = (Fixtures.objects.filter(home_team=team_details.id) | Fixtures.objects.filter(away_team=team_details.id))/
.filter(fixture_datetime__lt=datetime.now()).filter(fixture_datetime__year=args[0])
Run Code Online (Sandbox Code Playgroud)
为了参考起见 - args是:
date_year = datetime.now().year
Run Code Online (Sandbox Code Playgroud)
为了使这个查询工作,我需要引用args为
.filter(fixture_datetime__year=args[0])
Run Code Online (Sandbox Code Playgroud)
因为如果我使用
.filter(fixture_datetime__year=args)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
int()参数必须是字符串,类似字节的对象或数字,而不是'元组'
我知道它认为它是一个元组,即使它只是一个值,但是当我在终端中执行以下操作时
type(date_year)
Run Code Online (Sandbox Code Playgroud)
我上课了.
当它看起来只有一个值返回时,为什么我必须在这里引用位置?
(我不确定这个问题是属于这里还是CS论坛.我把它保留在这里因为它有特定于Python的代码.如果需要请迁移!)我现在正在研究算法,使用Python作为我的首选工具.今天,我想绘制一个简单问题的三种变体的运行时间:计算给定序列(列表)的前缀平均值.
以下是三种变体:
import timeit
seq = [20, 45, 45, 40, 12, 48, 67, 90, 0, 56, 12, 45, 67, 45, 34, 32, 20]
# Quadratic running time
def quad (S):
n = len(S)
A = [0] * n
for j in range(n):
total = 0
for i in range(j+1):
total += S[i]
A[j] = total / (j+1)
return A
# Use prev result
def prev (S):
n = len(S)
A = [0] * n
for j in range(n):
if j …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Python中创建可用端口列表.我正在学习本教程,但不是打印开放端口,而是将它们添加到列表中.
最初,我有类似以下内容:
available_ports = []
try:
for port in range(1,8081):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((remoteServerIP, port))
if result == 0:
available_ports.append(port)
sock.close()
# ...
Run Code Online (Sandbox Code Playgroud)
这显然工作正常,但众所周知,理解比循环更快,所以我现在有:
try:
available_ports = [port for port in range(1, 8081) if not socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((remoteServerIP, port))]
# ...
Run Code Online (Sandbox Code Playgroud)
我假设套接字不会关闭,但我测试了以下内容:
try:
available_ports = [port for port in range(1, 8081) if not socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((remoteServerIP, port))]
for port in range(1,8081):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((remoteServerIP, port))
if result == 0:
print("Port {}: …Run Code Online (Sandbox Code Playgroud) 我的目标是使主视图(/)成为登录页面。用户登录后,将根据其角色呈现另一个页面。登录(/auth)时,我看到正确输入了用户名和密码。然后它尝试渲染/,告诉我我的用户没有经过身份验证并渲染/login。以下是描述此内容的视图:
@app.route("/login")
def login():
return flask.render_template('login.html')
@app.route("/", methods=["GET"])
def home():
if current_user.is_authenticated:
if current_user.is_admin():
return flask.render_template('admin_index.html')
return flask.render_template('user_index.html')
logger.info("Not authenticated. Going back to login.")
return flask.render_template('login.html')
@app.route("/auth", methods=["POST"])
def auth():
username = request.form['username']
password = request.form['password']
user = db.session.query(User).filter(User.username == username).first()
logger.info(user)
logger.info("{0}: {1}".format(username, password))
print("user exists? {0}".format(str(user != None)))
print("password is correct? " + str(user.check_password(password)))
if user and user.check_password(password):
user.is_authenticated = True
login_user(user)
return flask.redirect(url_for('home'))
return flask.redirect(url_for('login'))
Run Code Online (Sandbox Code Playgroud)
问题是我尝试登录后,flask-login current_user.is_authenticated总是返回 …
可以说我有这样的功能:
void processElement() {
doSomething(someArray[lastProcessedElement + 1]);
}
Run Code Online (Sandbox Code Playgroud)
问题是,每次调用此函数时,我都需要存储我调用doSomething的最后一个元素.所以在这里我有两个选择:
我可以创建一个名为lastProcessedElement的私有类变量,并在每次调用该函数时递增它的值.这种方法似乎最常见.所以代码可以是这样的:
class Foo {
int lastProcessedElement = 0;
public:
void processElement() {
doSomething(someArray[++lastProcessedElement]);
}
}
Run Code Online (Sandbox Code Playgroud)作为第二个选项,我可以在函数中创建一个静态变量并每次递增它:
// Class is not important here, so the function is:
void processElement() {
static int lastProcessedElement = 0;
doSomething(someArray[++lastProcessedElement]);
}
Run Code Online (Sandbox Code Playgroud)第一个解决方案增加了一些我不想要的复杂性.我喜欢把东西放在原地.
我知道第二个解决方案只有在该类只有一个实例时才有效.
那么使用静态变量法是一个很好的解决方案?是否有多实例类的在线解决方案?(可以有一个解决这个特定的数组元素索引的东西,但我刚刚做了,我说的是为函数的下一次调用存储一些值)
>> from nltk.stem import WordNetLemmatizer as lm1
>> from nltk import WordNetLemmatizer as lm2
>> from nltk.stem.wordnet import WordNetLemmatizer as lm3
Run Code Online (Sandbox Code Playgroud)
对我来说,这三个作品都是以同样的方式,但只是为了确认,它们是否提供了不同的东西?
我有以下Subscriber抽象基类:
abstract class Subscriber(topics: Seq[String]) extends Actor with ActorLogging {
import DistributedPubSubMediator.{ Subscribe, SubscribeAck }
val mediator = DistributedPubSub(context.system).mediator
// subscribe to each topic
topics.foreach{mediator ! Subscribe(_, self)}
def receive = {
case SubscribeAck(Subscribe(name, None, `self`)) ?
log.info(s"Subscribing to $name")
}
}
Run Code Online (Sandbox Code Playgroud)
我想测试它是否接收发布到子类订阅的主题的消息.一些简单的伪代码表明如下:
val topic = "foo"
class FooSubscriber extends Subscriber(Seq(topic))
val fooSubActor = system.actorOf(Props[FooSubscriber])
val mediator = DistributedPubSub(system).mediator
val msg = "This is a string"
// Publish the msg to the "foo" topic.
mediator ! Publish(topic, msg) …Run Code Online (Sandbox Code Playgroud) 我有一个与HTTP GET请求对应的空案例类:
case class GetFoo() extends MyQueryRequest {
// ...
}
Run Code Online (Sandbox Code Playgroud)
每个消息都有一个伴随对象,描述了它的隐式JSON编写器和阅读器:
object GetFoo extends MyImplicitJsonProvider[GetFoo] {
implicit val write = Json.writes[GetFoo]
implicit val read = Json.reads[GetFoo]
}
Run Code Online (Sandbox Code Playgroud)
但是,因为GetFoo没有参数,所以没有办法(de)序列化它:
Unapply of object
GetFoo没有参数.你在使用空的案例类吗?
将伪布尔变量注入构造函数的解决方法GetFoo,但这是一个kludge.我想将GetFoo(de)serializable作为一个空的JSON对象.我怎样才能做到这一点?
由于GET请求不发送数据,因此如果读取器/写入器被使用则抛出异常会更好,因为请求不应该被写入或读取,但是扩展类需要.
我的设计依赖于GetX类扩展MyQueryRequest和扩展的GetX伴随对象MyImplicitJsonProvider[GetX].
我有一些代码可以在 UNIX 系统上正常运行,但不能在 Windows 上运行。我想让它跨平台,但我的头撞在墙上。最小重现如下:
文件一:foo.py
import os
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger('foo')
def main(dir):
logger.addHandler(logging.FileHandler(
os.path.join(dir, 'temporary.log')
))
logger.info("Hello, world!")
Run Code Online (Sandbox Code Playgroud)
文件2:main.py
from foo import main
import tempfile
if __name__ == "__main__":
with tempfile.TemporaryDirectory("test") as tmp:
main(tmp)
Run Code Online (Sandbox Code Playgroud)
我期望的是,将创建临时目录,在其中创建一个文件,向其发出日志,然后在tmp超出范围时将清除这两个文件。
相反,Windows 提供了一个错误:
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: '...'
Run Code Online (Sandbox Code Playgroud)
我尝试过更改FileHandler远离追加模式的模式,我尝试过手动清理文件和目录,我尝试过延迟文件的创建,直到其记录并提高日志级别,并且我'我什至尝试在内部实例化记录器,foo.main希望不会保留对处理程序的引用 - 不管怎样,我仍然看到这个错误。
我怎样才能解决这个问题?
python ×5
c++ ×2
scala ×2
akka ×1
akka-cluster ×1
algorithm ×1
args ×1
case-class ×1
flask ×1
flask-login ×1
logging ×1
nlp ×1
nltk ×1
play-json ×1
pointers ×1
python-3.x ×1
sockets ×1
unit-testing ×1
windows ×1