我将一个列表传递给一个函数并查看输出。当列表被硬编码时,我就得到了预期的输出。但是,当我从字符串构建列表,并将具有相同内容的列表传递给函数时,我没有预期的输出。在
tech = [ "Django", "Zend", "SQLite", "foo" ]
for tech_item in tech:
print( test_main( tech_item ) )
因此,输入看起来是相同的,但是输出是不同的。在
当我比较两个列表的内容(将第二个列表重命名为tech2)时,我有:
print( tech[0], tech2[0] ) #Django Django
print( tech[0] == tech2[0] ) #True
print( type(tech[0]), type(tech2[0]) ) #<class 'str'> <class 'str'>
print( len(tech[0]), len(tech2[0]) ) #6 6
我错过了什么? 你对如何找到/解决这个问题有什么线索吗?在
第一个案例的输出:
frameworks
frameworks
SQL
None
第二种情况的输出:
None
None
None
None
我给你test_main函数,但恐怕会把你搞糊涂。 所以每次“寻找”都是一样的。但“tmp”在这两种情况下是不同的。在
def test_main( looking_for ):
global tmp
tmp = None
get_recursively( languages_tech, looking_for )
return tmp
def get_recursively( data, looking_for, last_key="" ):
if not isinstance( data, (list, dict) ):
if data is looking_for: #item
global tmp
tmp = last_key
else:
if isinstance( data, dict ): #Dictionaries
for key, value in data.items():
get_recursively( value, looking_for, key )
else:
for item in data: #list
get_recursively( item, looking_for, last_key )
languages = { "languages": [
"Ruby", "Python", "JavaScript", "ASP.NET", "Java", "C", "C++", "C#", "Swift", "PHP", "Visual Basic", "Bash" ] }
frameworks = { "frameworks" : [
"Django", "Flask", "React", "React Native", "Vue", "Ember", "Meteor", "AngularJS", "Express" , "Laravel", "Symfony", "Zend", "Ruby on Rails" ] }
databases = { "databases" : [
{ "SQL": ["MariaDB", "MySQL", "SQLite", "PostgreSQL", "Oracle", "MSSQL Server"] },
{ "NoSQL": ["Cassandra", "CouchDB", "MongoDB", "Neo4j", "OrientDB", "Redis", "Elasticsearch"] },
{ "ORM Framework": [ "SQLAlchemy", "Django ORM" ] } ] }
languages_tech = { "languages_tech": [ languages, frameworks, databases ] }
简短回答
您的
get_recursively()
函数中的以下行是错误的用这个代替
^{pr2}$回答
仅当}具有相同的}。也就是说
a
和{id
时,a is b
将计算为{默认情况下,字符串文本被分配相同的id。例如
注意,
id
都是4416391792
。这也包含到list
s中(即使列表不是同一个对象,因此没有相同的id
)。在请注意,
4416391792
与上一个示例中的数字完全相同。这将显示字符串如何指向同一对象。在但是当你引入
str.split()
函数时。。。在id(b[0])
仍然是4416391792
,我们以前见过。但是现在,请注意,str.split()
创建了一个新的字符串对象,列表中有id = 4416392240
!!!在这是
data is looking_for
计算结果为false的原理的基础。当然,}是很重要的。比较字符串、列表或元组等值的文字时,使用
is
也有它的优点。例如,我们做a is None
,而不是a == None
(read more)。但区分何时使用is
和何时使用{==
。在进一步阅读:
Why does comparing strings in Python using either '==' or 'is' sometimes produce a different result?
Another example where variables can have congruent string literals but different ^{}s.
相关问题 更多 >
编程相关推荐