如何使用println!打印已命名参数的子项目?

问题描述

我了解了有关在打印时使用命名参数的信息,

import gi
gi.require_version('Gtk','3.0')
gi.require_version('WebKit','3.0')
from gi.repository import Gtk,WebKit

class Main:
    def __init__(self):
        self.win = Gtk.Window()
        self.win.set_position(Gtk.WindowPosition.CENTER)
        self.win.set_title('window')
        self.win.set_default_size(1200,800)

        self.btn_grid = Gtk.Grid()

        self.btn_grid.set_column_spacing(10)
        self.reload_button = Gtk.Button('Reload')
        self.reload_button.connect('clicked',self.reload_window)
        self.btn_grid.attach(self.reload_button,1,1)

        self.url_entry = Gtk.Entry()
        self.url_entry.set_hexpand(True)
        self.url_entry.connect('activate',self.display_url)
        self.btn_grid.attach(self.url_entry,1)

        self.go_btn = Gtk.Button('Go')
        self.go_btn.connect('clicked',self.display_url)
        self.btn_grid.attach(self.go_btn,2,1)

        self.main_Box = Gtk.VBox()
        self.main_Box.pack_start(self.btn_grid,False,0)
        self.win.add(self.main_Box)

        self.webview = WebKit.WebView()
        self.webview.connect('title-changed',self.title_update)
        self.webview.load_uri("https://google.com")


        self.scroll_area = Gtk.ScrolledWindow()
        self.scroll_area.add(self.webview)
        self.main_Box.pack_start(self.scroll_area,True,0)
        self.win.connect('destroy',Gtk.main_quit)

    def title_update(self,webview,frame,title):
        self.win.set_title(f'window - {title}')

    def display_url(self,event):
        url = self.url_entry.get_text()
        if url == '':
            pass
        else:
            if "://" not in url:
                url = f'https://{url}'
            self.webview.load_uri(url)
            self.webview.grab_focus()

    def reload_window(self):
        self.webview.reload()


    def w_open(self):
        self.win.show_all()

main_window = Main()
main_window.w_open()
Gtk.main()

我不知道如何输出“ Roberto”而不是“ Clemente”。有什么方法可以访问子项?说:

fn main() {
    println!("{nombre} le gusta el {actividad}",nombre= {"Clemente";"Roberto"},actividad= "futbol");
}

解决方法

{"Clemente";"Roberto"}block expression,不是任何对象或值。这意味着打开和关闭的小卷发之间的所有内容都被视为独立的statement。与

相同
fn main() {
    let s = {
        "Clemente";
        "Roberto" // the return value
    }; // s is set to "Roberto"

    println!("{nombre} le gusta el {actividad}",nombre=s,actividad= "futbol");
}

因此,当println!计算格式参数时,它仅接收返回的"Roberto",因此将被打印。除非对该外部作用域的值进行了突变,否则该块中的所有其他内容都会丢失。

如果您打算将两个名称存储在collection中,并使用索引打印一个或另一个,则需要定义一个集合和索引:["Clemente","Roberto"][0]。您无法在格式设置字符串(例如println!({nombre[0]} ...)中为命名参数编制索引,因为它实际上只是一个被关联值替换的名称。

fn main() {
    println!("{nombre} le gusta el {actividad}",nombre=["Clemente","Roberto"][0],actividad="futbol");
}

更好的是,在println!之前定义集合,以便以后阅读和维护!这不仅是一个建议,而且通常被认为是最佳实践。

fn main() {
    let nombres = ["Clemente","Roberto"]];

    println!("{nombre} le gusta el {actividad}",nombre=nombres[0],actividad="futbol");
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...