可以将字典键映射到作为对可变对象的引用的值,例如列表.可以通过在引用上调用list方法来更改这样的列表对象,并且更改将反映在字典中.这在以下讨论:
我的问题
将字典键映射到可变对象的引用是否是一个好主意,而不是将键映射到未命名的值?
换句话说,最好用以下内容创建字典:
In [74]: x = {'a': somelist}
Run Code Online (Sandbox Code Playgroud)
要么:
In [74]: x = {'a': somelist[:]}
Run Code Online (Sandbox Code Playgroud)
最好通过引用引用该值来更改字典值,例如:
In [77]: somelist.remove('apples')
Run Code Online (Sandbox Code Playgroud)
或者通过它的字典索引:
In [77]: x['a'].remove('apples')
Run Code Online (Sandbox Code Playgroud)
讨论和研究
引用提供了一个很好的句柄,可以提高功能的可读性.然而,据我所知,一旦创建了值,字典值最初绑定到引用的事实就会丢失; 在显示字典时,人们看不到这个事实.
另一方面,我不确定这是否重要,因为引用和值是同一个对象,如果删除引用,则值对象本身仍然存在.
照我看来:
In [73]: somelist = ['apples', 'oranges', 'lemons', 'tangerines']
In [74]: x = {'a': somelist}
In [75]: x
Out[75]: {'a': ['apples', 'oranges', 'lemons', 'tangerines']}
Run Code Online (Sandbox Code Playgroud)
在字典中x,键'a'映射到值somelist,但我没有看到验证该值与引用相关联的方法
somelist.
In [76]: x['a'] is somelist
Out[76]: True
Run Code Online (Sandbox Code Playgroud)
这确认了我看到的值列表与指向的对象相同somelist.
In …Run Code Online (Sandbox Code Playgroud) 如果我在Python或Ipython命令提示符下执行函数,例如'help(dir)':
>>> help(dir)
Help on built-in function dir in module __builtin__:
dir(...)
dir([object]) -> list of strings
If called without an argument, return the names in the current scope.
Run Code Online (Sandbox Code Playgroud)
我想在文件或变量中捕获结果输出,但是
>>> x = help(dir)
>>> help(dir) >file.txt
>>> help(dir) >>file.txt
Run Code Online (Sandbox Code Playgroud)
不工作.我看到一个相关的问题(将输出命令重定向到一个变量或文件?)虽然它非常复杂,很难在运行中记住,并且不清楚它是否适用于此处.
在bash shell中,可以使用>或2>重定向输出.看起来在Python或Ipython shell中应该很容易做类似的事情.
我对Ruby比较陌生,并且发现以下几对示例同样有效:
File.included_modules
File::included_modules
File.stat('mbox') # Returns a '#<File::Stat..>' object
File::stat('mbox')
File.new("foo.txt", "w")
File::new("foo.txt", "w")
"asdf".size # An instance method
"asdf"::size
2 + 3
2::send(:+, 3) # An extreme example
Run Code Online (Sandbox Code Playgroud)
File::new特别是我经常遇到的事情.
我的问题:它会不地道,我以避免以往任何时候都使用::运算符资格的任何东西,但类,模块和常量,取而代之的名字,始终使用仅点语法的所有方法(类方法,模块方法和实例方法)?
需要明确的是:在任何情况下我都想使用除dot语法以外的任何方法来引用方法(无论是在代码中还是在文档中)?
消息来源咨询:
我通过在 Jupyter 笔记本(基于 Web 的 REPL 环境)中执行 SPARQL 查询来记录对 RDF 数据的探索。
我经常通过复制先前的查询进行调整来创建查询。笔记本中充满了 SPARQL 查询,这些查询均以相同的八个 PREFIX 定义(例如PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>)开头。
为了减少混乱,我保持前缀列表较短,但这意味着我必须经常切换窗口来搜索必须添加的其他一些前缀(例如,PREFIX eurovoc: ...)。
有没有办法将 PREFIX 定义保存在文件中,然后只需将这些定义导入到查询中?
另外,由于我目前使用 Apache JENA 命令行实用程序在 Jupyter Notebook 中执行查询arq,因此我很高兴有任何允许将 SPARQL 查询拆分为多个文件的命令行实用程序或其他此类解决方法。
我在网上搜索了这个问题的答案stackoverflow.com,尝试了许多涉及 SPARQL、PREFIX、声明、定义、冗余、导入、重用、重用、命名空间、绑定、单独、文件和多重等词的查询,其中我在这里复制是为了让可能问同样问题的其他人更容易找到这个问题。
As explained by Dropbox, Smart Sync is a feature "that helps you save space on your hard drive. Access every file and folder in your Dropbox account from your computer, using virtually no hard drive space. ... With Smart Sync, content on your computer is available as either online-only, local, or in mixed state folders."
Last night and this morning, I moved a large quantity of files from an external disk into Dropbox folders on my MacBook (MacOS Mojave …
python ×2
apfs ×1
command-line ×1
dictionary ×1
dropbox ×1
ipython ×1
list ×1
macos ×1
macos-mojave ×1
namespaces ×1
prefix ×1
ruby ×1
sparql ×1