具有多个嵌套循环的函数中只有第一个值
Only first value in function with multiple nested loops
我是 Python 的新手,我正在 运行 解决一个非常基本的问题。
我编写了一个包含多个 for
循环和一个 if
语句的函数。
此代码 when 运行 分别显示我期望的所有值。
但是,当将其放入 def
函数时,它 returns 只有第一个值。
我知道这与缩进和在函数中使用 yield
而不是 return
有关。然而,尝试用这两个选项解决它仍然会返回一个结果。
以下是代码示例:
def generate_body(objectFr, properties):
objFrame = objectFr
data = properties
for obj in objFrame.Object_Naam:
properties = data.loc[data['Objects'] == obj, 'attribuut_naam'].dropna()
# minOccur = data.loc[data['Objects'] == obj, 'minOccurs'].dropna()
for prop in properties:
last = properties.iloc[-1]
first = properties.iloc[0]
jsonbody = []
# bodystring = ''.join(jsonbody)
if prop == first:
jsonbody.append('"' + obj + '",' + ' "type": "object,"' + ' "properties": {' + str(prop) + '"' + ': { "type": "string" }' )
elif prop == last:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" }' )
else:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" },' )
return ''.join(jsonbody)
有人可以帮帮我吗?
三件事:
def
下的缩进不合适。
return 语句必须在 for
循环之外。
将 jsonbody[]
放在正确的位置。
试试这个:
def generate_body(objectFr, properties):
objFrame = objectFr
data = properties
jsonbody = []
for obj in objFrame.Object_Naam:
properties = data.loc[data['Objects'] == obj, 'attribuut_naam'].dropna()
# minOccur = data.loc[data['Objects'] == obj, 'minOccurs'].dropna()
for prop in properties:
last = properties.iloc[-1]
first = properties.iloc[0]
# bodystring = ''.join(jsonbody)
if prop == first:
jsonbody.append('"' + obj + '",' + ' "type": "object,"' + ' "properties": {' + str(prop) + '"' + ': { "type": "string" }' )
elif prop == last:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" }' )
else:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" },' )
return ''.join(jsonbody)
我是 Python 的新手,我正在 运行 解决一个非常基本的问题。
我编写了一个包含多个 for
循环和一个 if
语句的函数。
此代码 when 运行 分别显示我期望的所有值。
但是,当将其放入 def
函数时,它 returns 只有第一个值。
我知道这与缩进和在函数中使用 yield
而不是 return
有关。然而,尝试用这两个选项解决它仍然会返回一个结果。
以下是代码示例:
def generate_body(objectFr, properties):
objFrame = objectFr
data = properties
for obj in objFrame.Object_Naam:
properties = data.loc[data['Objects'] == obj, 'attribuut_naam'].dropna()
# minOccur = data.loc[data['Objects'] == obj, 'minOccurs'].dropna()
for prop in properties:
last = properties.iloc[-1]
first = properties.iloc[0]
jsonbody = []
# bodystring = ''.join(jsonbody)
if prop == first:
jsonbody.append('"' + obj + '",' + ' "type": "object,"' + ' "properties": {' + str(prop) + '"' + ': { "type": "string" }' )
elif prop == last:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" }' )
else:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" },' )
return ''.join(jsonbody)
有人可以帮帮我吗?
三件事:
def
下的缩进不合适。
return 语句必须在 for
循环之外。
将 jsonbody[]
放在正确的位置。
试试这个:
def generate_body(objectFr, properties):
objFrame = objectFr
data = properties
jsonbody = []
for obj in objFrame.Object_Naam:
properties = data.loc[data['Objects'] == obj, 'attribuut_naam'].dropna()
# minOccur = data.loc[data['Objects'] == obj, 'minOccurs'].dropna()
for prop in properties:
last = properties.iloc[-1]
first = properties.iloc[0]
# bodystring = ''.join(jsonbody)
if prop == first:
jsonbody.append('"' + obj + '",' + ' "type": "object,"' + ' "properties": {' + str(prop) + '"' + ': { "type": "string" }' )
elif prop == last:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" }' )
else:
jsonbody.append('"' + str(prop) + '"' + ': { "type": "string" },' )
return ''.join(jsonbody)