我最近一直在努力创建一个素数查找程序.但是,我注意到一个函数在使用参数时比使用预设值时慢得多.
在3个不同的版本中,很明显变量显着减慢了程序,我想知道原因.
这是原始的(这个问题有点简化)功能:
def version1(n, p):
return ((n*n - 2) & ((1 << p) - 1)) + ((n*n - 2) >> p)
Run Code Online (Sandbox Code Playgroud)
使用timeit模块运行100次时:
timeit.timeit("version1(200, 500000000)", "from __main__ import version1", number=100)
Run Code Online (Sandbox Code Playgroud)
这需要7.5几秒钟.
但是,这是第二个版本,其中没有参数,并且数字直接放在返回值中.该方程与第1版完全相同:
def version2():
return ((200*200 - 2) & ((1 << 500000000) - 1)) + ((200*200 - 2) >> 500000000)
Run Code Online (Sandbox Code Playgroud)
使用timeit模块运行100次时:
timeit.timeit("version2()", "from __main__ import version2", number=100
Run Code Online (Sandbox Code Playgroud)
在这只需要0.00001几秒钟!
最后,为了完整性,我尝试了一个没有参数但仍将其值保存为变量的版本:
def version3():
n …Run Code Online (Sandbox Code Playgroud) 我最近使用 Xcode 12 的 beta 创建了一个新的 SwiftUI 项目。然后我尝试在非 beta Xcode 11 中打开这个项目,在更新代码以使用 SwiftUI 1.0-style AppDelegate 后,我能够构建和运行应用程序。问题是,现在我已经转移到 Xcode 11,该应用程序在一个小框架内呈现,而不是占据整个屏幕。
这是一个简化的示例:
Xcode 12 与 Xcode 11
我的简化视图的代码如下:
struct ContentView: View {
var body: some View {
VStack {
Text("Hello World!")
}
}
}
Run Code Online (Sandbox Code Playgroud)
应用委托:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to …Run Code Online (Sandbox Code Playgroud)