我正在使用 .NET 6 中的新顶级语句来创建一个简单的控制台应用程序,但我不了解使用“通用主机”的优点/缺点。你可以解释吗?
我的通用主机代码:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
Console.WriteLine("Hello, World!");
using var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{
services.AddTransient<ITestInterface, TestClass>();
})
.Build();
Test();
Console.ReadKey();
void Test()
{
var testClass = host.Services.GetRequiredService<ITestInterface>();
testClass.TestMethod();
}
Run Code Online (Sandbox Code Playgroud)
相对
using Microsoft.Extensions.DependencyInjection;
Console.WriteLine("Hello, World!");
var services = new ServiceCollection();
services.AddTransient<ITestInterface, TestClass>();
var servicesProvider = services.BuildServiceProvider();
Test();
Console.ReadKey();
void Test()
{
var testClass = servicesProvider.GetRequiredService<ITestInterface>();
testClass.TestMethod();
}
Run Code Online (Sandbox Code Playgroud) 我们的项目已经使用git一个星期左右了,而且我们都非常享受它(在紧密的协作组中,它变成了一个完全不同的git体验).为了使事情尽可能简单,我们不会进行任何变基或历史修改.但我们确实在第一周犯了一些错误.做了一些不应该做的提交,我们设法将一个功能分支合并到错误的集成分支(1.1而不是1.0).在他们长期进入我们的历史之前,我们没有发现这些事情.
现在我看到很多关于重写历史的警告,但我不确定我是否理解所涉及的危险.我们使用共享的裸存储库,并将所有分支推送到那里进行备份.
我希望如果你重写历史记录(比如删除一个提交),后续提交的完整列表将"丢失"该提交(并且可能不会编译/工作).我也希望如果发生这种情况,我实际上可以选择在历史的顶部解决这个问题(并将这部分历史留作非编译).
任何关于这个主题的文章/教程的参考也会非常好.
在Python,find和index非常相似的方法,用于查找值序列类型.find用于字符串,而index用于列表和元组.它们都返回找到所提供参数的最低索引(最左边的索引).
例如,以下两个都将返回1:
"abc".find("b")
[1,2,3].index(2)
Run Code Online (Sandbox Code Playgroud)
然而,我有点困惑的一点是,即使这两种方法非常相似,并且几乎完全相同的角色,只是针对不同的数据类型,它们对于尝试查找不在序列中的某些内容有非常不同的反应.
"abc".find("d")
Run Code Online (Sandbox Code Playgroud)
返回-1,表示"未找到",而
[1,2,3].index(4)
Run Code Online (Sandbox Code Playgroud)
提出异常.
基本上,为什么他们有不同的行为?有没有特别的原因,或者只是一个奇怪的不一致而没有特别的原因?
现在,我不是在问这个问题 - 很明显,try/ exceptblock或条件in语句都可行.我只想问一下,在这种特殊情况下使行为不同的理由是什么.对我来说,为了保持一致性,有一个特定的行为说没有找到会更有意义.
另外,我不是在问这个理由是否是一个好理由的意见 - 我只是好奇原因是什么.
编辑:有些人已经指出字符串也有一个index方法,就像index列表的方法一样,我承认我不知道,但这只是让我想知道为什么,如果字符串都有,列表只有index.
我现在在几个程序上都遇到了这个错误。我尝试升级 pytube、重新安装它、尝试一些修复、更改 URL 和代码,但似乎没有任何效果。
from pytube import YouTube
#ask for the link from user
link = input("Enter the link of YouTube video you want to download: ")
yt = YouTube(link)
#Showing details
print("Title: ",yt.title)
print("Number of views: ",yt.views)
print("Length of video: ",yt.length)
print("Rating of video: ",yt.rating)
#Getting the highest resolution possible
ys = yt.streams.get_highest_resolution()
#Starting download
print("Downloading...")
ys.download()
print("Download completed!!")
Run Code Online (Sandbox Code Playgroud)
这是错误代码:
from pytube import YouTube
#ask for the link from user
link = input("Enter the link of YouTube video you …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码.
std::vector<result_data> do_processing()
{
pqxx::result input_data = get_data_from_database();
return process_data(input_data);
}
std::vector<result_data> process_data(pqxx::result const & input_data)
{
std::vector<result_data> ret;
pqxx::result::const_iterator row;
for (row = input_data.begin(); row != inpupt_data.end(); ++row)
{
// somehow populate output vector
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
当我在考虑是否可以期待返回值优化(RVO)时,我发现Jerry Coffin的这个答案 [强调我的]:
至少IMO,这通常是一个糟糕的主意,但不是出于效率原因.这是一个糟糕的主意,因为有问题的函数通常应该写成通过迭代器生成输出的通用算法.几乎任何接受或返回容器而不是在迭代器上运行的代码都应该被认为是可疑的.
不要误解我的意思:有时候传递类似于集合的对象(例如字符串)是有意义的,但对于引用的例子,我会考虑传递或返回向量一个糟糕的想法.
有一些Python背景,我非常喜欢Generators.实际上,如果它是Python,我会把上面的函数写成一个Generator,即避免在其他任何事情发生之前处理整个数据的必要性.例如这样:
def process_data(input_data):
for item in input_data:
# somehow process items
yield result_data
Run Code Online (Sandbox Code Playgroud)
如果我正确地解释了Jerry Coffins的说法,这就是他的建议,不是吗?如果是这样,我如何在C++中实现它?
import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'info.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatefulWidget {\n @override\n State<StatefulWidget> createState() => MyAppState();\n}\n\nclass MyAppState extends State<MyApp> {\n List<info> li = [\n info(name: 'text1', length: 170, date: DateTime.now()),\n info(name: 'text2', length: 175, date: DateTime.now()),\n info(name: 'text3', length: 180, date: DateTime.now()),\n info(name: 'text4', length: 180, date: DateTime.now()),\n info(name: 'text5', length: 180, date: DateTime.now()),\n info(name: 'text6', length: 180, date: DateTime.now()),\n info(name: 'text7', length: 180, date: DateTime.now()),\n info(name: 'text8', length: 180, date: DateTime.now()),\n info(name: 'text9', length: 180, date: DateTime.now()),\n ];\n\n void …Run Code Online (Sandbox Code Playgroud) Python的setuptool有两种方法可以将命令行脚本添加到Python包中:script和entry_point.
本教程概述了以下方法:
scripts将Python脚本(funniest-joke)添加到包树,并将其路径添加到setup.py:
setup(
...
scripts=['bin/funniest-joke'],
...
)
Run Code Online (Sandbox Code Playgroud)
将Python脚本(funniest-joke)添加到包树.添加一个main()函数,并添加command_line.py运行最有趣的子模块main():
command_line.py:import funniest
def main():
print funniest.joke()
Run Code Online (Sandbox Code Playgroud)
setup.pysetup(
...
entry_points = {
'console_scripts': ['funniest-joke=funniest.command_line:main'],
}
...
)
Run Code Online (Sandbox Code Playgroud)
每种方法有哪些优缺点?
我最近正在检查类型提示,在阅读了一些理论后,我尝试了一个简单的例子:
def myfun(num1: int, num2: int) -> int:
return str(num1) + num2
a = myfun(1, 'abc')
print(a)
# output -> 1abc
Run Code Online (Sandbox Code Playgroud)
在这里您可以看到我已经定义了num1intnum2类型,即使在将num2值作为字符串传递之后,它也不会生成任何错误。
此外,该函数应该期望返回int类型值,但它不会抱怨返回字符串类型值。
有人可以解释一下这里出了什么问题吗?
我正在学习如何根据教程(https://packaging.python.org/en/latest/tutorials/packaging-projects/)为 PyPI 打包 Python 项目。对于示例项目,他们使用文件夹结构:
\npackaging_tutorial/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 LICENSE\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 example_package_YOUR_USERNAME_HERE/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 example.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests/\nRun Code Online (Sandbox Code Playgroud)\n我只是想知道为什么src/需要该文件夹?它有特定的目的吗?可以直接将包包含在顶部文件夹中吗?例如会
packaging_tutorial/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 LICENSE\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example_package_YOUR_USERNAME_HERE/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 example.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests/\nRun Code Online (Sandbox Code Playgroud)\n有什么缺点或引起并发症吗?
\n例如我有一个列表A:
A = [100, 200, 300, 200, 400, 500, 600, 400, 700, 200, 500, 800]
Run Code Online (Sandbox Code Playgroud)
我有清单B:
B = [100, 200, 200, 500, 600, 200, 500]
Run Code Online (Sandbox Code Playgroud)
我需要确定元素的索引B与A
我试过了:
list_index = [A.index(i) for i in B]
Run Code Online (Sandbox Code Playgroud)
它返回:
[0, 1, 1, 5, 6, 1, 5]
Run Code Online (Sandbox Code Playgroud)
但我需要的是:
[0, 1, 3, 5, 6, 9, 10]
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
python ×6
python-3.x ×2
.net-core ×1
c# ×1
c++ ×1
consistency ×1
coroutine ×1
dart ×1
find ×1
flutter ×1
generator ×1
git ×1
git-rebase ×1
http ×1
http-error ×1
indexing ×1
iterator ×1
methods ×1
packaging ×1
pypi ×1
pytube ×1
scripting ×1
setup.py ×1
setuptools ×1
type-hinting ×1