diff --git a/python/flatbuffers/reflection/Enum.py b/python/flatbuffers/reflection/Enum.py
index 1136478..1968690 100644
--- a/python/flatbuffers/reflection/Enum.py
+++ b/python/flatbuffers/reflection/Enum.py
@@ -159,7 +159,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateValuesVector(builder, data):
-    EnumCreateValuesVector(builder, data)
+    return EnumCreateValuesVector(builder, data)
 
 def EnumAddIsUnion(builder, isUnion):
     builder.PrependBoolSlot(2, isUnion, 0)
@@ -189,7 +189,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateAttributesVector(builder, data):
-    EnumCreateAttributesVector(builder, data)
+    return EnumCreateAttributesVector(builder, data)
 
 def EnumAddDocumentation(builder, documentation):
     builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -207,7 +207,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateDocumentationVector(builder, data):
-    EnumCreateDocumentationVector(builder, data)
+    return EnumCreateDocumentationVector(builder, data)
 
 def EnumAddDeclarationFile(builder, declarationFile):
     builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)
diff --git a/python/flatbuffers/reflection/EnumVal.py b/python/flatbuffers/reflection/EnumVal.py
index 0b453b7..51ff0df 100644
--- a/python/flatbuffers/reflection/EnumVal.py
+++ b/python/flatbuffers/reflection/EnumVal.py
@@ -138,7 +138,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateDocumentationVector(builder, data):
-    EnumValCreateDocumentationVector(builder, data)
+    return EnumValCreateDocumentationVector(builder, data)
 
 def EnumValAddAttributes(builder, attributes):
     builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0)
@@ -156,7 +156,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateAttributesVector(builder, data):
-    EnumValCreateAttributesVector(builder, data)
+    return EnumValCreateAttributesVector(builder, data)
 
 def EnumValEnd(builder):
     return builder.EndObject()
diff --git a/python/flatbuffers/reflection/Field.py b/python/flatbuffers/reflection/Field.py
index cb79106..d393acf 100644
--- a/python/flatbuffers/reflection/Field.py
+++ b/python/flatbuffers/reflection/Field.py
@@ -239,7 +239,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateAttributesVector(builder, data):
-    FieldCreateAttributesVector(builder, data)
+    return FieldCreateAttributesVector(builder, data)
 
 def FieldAddDocumentation(builder, documentation):
     builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -257,7 +257,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateDocumentationVector(builder, data):
-    FieldCreateDocumentationVector(builder, data)
+    return FieldCreateDocumentationVector(builder, data)
 
 def FieldAddOptional(builder, optional):
     builder.PrependBoolSlot(11, optional, 0)
diff --git a/python/flatbuffers/reflection/Object.py b/python/flatbuffers/reflection/Object.py
index 829e1dd..299dfc9 100644
--- a/python/flatbuffers/reflection/Object.py
+++ b/python/flatbuffers/reflection/Object.py
@@ -162,7 +162,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateFieldsVector(builder, data):
-    ObjectCreateFieldsVector(builder, data)
+    return ObjectCreateFieldsVector(builder, data)
 
 def ObjectAddIsStruct(builder, isStruct):
     builder.PrependBoolSlot(2, isStruct, 0)
@@ -198,7 +198,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateAttributesVector(builder, data):
-    ObjectCreateAttributesVector(builder, data)
+    return ObjectCreateAttributesVector(builder, data)
 
 def ObjectAddDocumentation(builder, documentation):
     builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -216,7 +216,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateDocumentationVector(builder, data):
-    ObjectCreateDocumentationVector(builder, data)
+    return ObjectCreateDocumentationVector(builder, data)
 
 def ObjectAddDeclarationFile(builder, declarationFile):
     builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)
diff --git a/python/flatbuffers/reflection/RPCCall.py b/python/flatbuffers/reflection/RPCCall.py
index 32f9d4e..a65e7ce 100644
--- a/python/flatbuffers/reflection/RPCCall.py
+++ b/python/flatbuffers/reflection/RPCCall.py
@@ -142,7 +142,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateAttributesVector(builder, data):
-    RPCCallCreateAttributesVector(builder, data)
+    return RPCCallCreateAttributesVector(builder, data)
 
 def RPCCallAddDocumentation(builder, documentation):
     builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -160,7 +160,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateDocumentationVector(builder, data):
-    RPCCallCreateDocumentationVector(builder, data)
+    return RPCCallCreateDocumentationVector(builder, data)
 
 def RPCCallEnd(builder):
     return builder.EndObject()
diff --git a/python/flatbuffers/reflection/Schema.py b/python/flatbuffers/reflection/Schema.py
index c37d320..1965d53 100644
--- a/python/flatbuffers/reflection/Schema.py
+++ b/python/flatbuffers/reflection/Schema.py
@@ -184,7 +184,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateObjectsVector(builder, data):
-    SchemaCreateObjectsVector(builder, data)
+    return SchemaCreateObjectsVector(builder, data)
 
 def SchemaAddEnums(builder, enums):
     builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(enums), 0)
@@ -202,7 +202,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateEnumsVector(builder, data):
-    SchemaCreateEnumsVector(builder, data)
+    return SchemaCreateEnumsVector(builder, data)
 
 def SchemaAddFileIdent(builder, fileIdent):
     builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(fileIdent), 0)
@@ -238,7 +238,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateServicesVector(builder, data):
-    SchemaCreateServicesVector(builder, data)
+    return SchemaCreateServicesVector(builder, data)
 
 def SchemaAddAdvancedFeatures(builder, advancedFeatures):
     builder.PrependUint64Slot(6, advancedFeatures, 0)
@@ -262,7 +262,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateFbsFilesVector(builder, data):
-    SchemaCreateFbsFilesVector(builder, data)
+    return SchemaCreateFbsFilesVector(builder, data)
 
 def SchemaEnd(builder):
     return builder.EndObject()
diff --git a/python/flatbuffers/reflection/SchemaFile.py b/python/flatbuffers/reflection/SchemaFile.py
index f4d655d..aafc393 100644
--- a/python/flatbuffers/reflection/SchemaFile.py
+++ b/python/flatbuffers/reflection/SchemaFile.py
@@ -88,7 +88,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateIncludedFilenamesVector(builder, data):
-    SchemaFileCreateIncludedFilenamesVector(builder, data)
+    return SchemaFileCreateIncludedFilenamesVector(builder, data)
 
 def SchemaFileEnd(builder):
     return builder.EndObject()
diff --git a/python/flatbuffers/reflection/Service.py b/python/flatbuffers/reflection/Service.py
index 7b954b1..f1c33d6 100644
--- a/python/flatbuffers/reflection/Service.py
+++ b/python/flatbuffers/reflection/Service.py
@@ -141,7 +141,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateCallsVector(builder, data):
-    ServiceCreateCallsVector(builder, data)
+    return ServiceCreateCallsVector(builder, data)
 
 def ServiceAddAttributes(builder, attributes):
     builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0)
@@ -159,7 +159,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateAttributesVector(builder, data):
-    ServiceCreateAttributesVector(builder, data)
+    return ServiceCreateAttributesVector(builder, data)
 
 def ServiceAddDocumentation(builder, documentation):
     builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)
@@ -177,7 +177,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateDocumentationVector(builder, data):
-    ServiceCreateDocumentationVector(builder, data)
+    return ServiceCreateDocumentationVector(builder, data)
 
 def ServiceAddDeclarationFile(builder, declarationFile):
     builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)
diff --git a/src/idl_gen_python.cpp b/src/idl_gen_python.cpp
index 21304e2..cd96081 100644
--- a/src/idl_gen_python.cpp
+++ b/src/idl_gen_python.cpp
@@ -1528,7 +1528,7 @@
       } else {
         code += "def Create" + field_method + "Vector(builder, data):\n";
       }
-      code += Indent + helper_name + "(builder, data)\n\n";
+      code += Indent + "return " + helper_name + "(builder, data)\n\n";
     }
   }
 
diff --git a/tests/MyGame/Example/Monster.py b/tests/MyGame/Example/Monster.py
index 3814efe..d26dbae 100644
--- a/tests/MyGame/Example/Monster.py
+++ b/tests/MyGame/Example/Monster.py
@@ -922,7 +922,7 @@
     return builder.EndVector()
 
 def CreateInventoryVector(builder, data):
-    MonsterCreateInventoryVector(builder, data)
+    return MonsterCreateInventoryVector(builder, data)
 
 def MonsterAddColor(builder, color):
     builder.PrependUint8Slot(6, color, 8)
@@ -962,7 +962,7 @@
     return builder.EndVector()
 
 def CreateTest4Vector(builder, data):
-    MonsterCreateTest4Vector(builder, data)
+    return MonsterCreateTest4Vector(builder, data)
 
 def MonsterAddTestarrayofstring(builder, testarrayofstring):
     builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofstring), 0)
@@ -980,7 +980,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateTestarrayofstringVector(builder, data):
-    MonsterCreateTestarrayofstringVector(builder, data)
+    return MonsterCreateTestarrayofstringVector(builder, data)
 
 def MonsterAddTestarrayoftables(builder, testarrayoftables):
     builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayoftables), 0)
@@ -998,7 +998,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateTestarrayoftablesVector(builder, data):
-    MonsterCreateTestarrayoftablesVector(builder, data)
+    return MonsterCreateTestarrayoftablesVector(builder, data)
 
 def MonsterAddEnemy(builder, enemy):
     builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(enemy), 0)
@@ -1026,7 +1026,7 @@
     return builder.EndVector()
 
 def CreateTestnestedflatbufferVector(builder, data):
-    MonsterCreateTestnestedflatbufferVector(builder, data)
+    return MonsterCreateTestnestedflatbufferVector(builder, data)
 
 def MonsterMakeTestnestedflatbufferVectorFromBytes(builder, bytes):
     builder.StartVector(1, len(bytes), 1)
@@ -1115,7 +1115,7 @@
     return builder.EndVector()
 
 def CreateTestarrayofboolsVector(builder, data):
-    MonsterCreateTestarrayofboolsVector(builder, data)
+    return MonsterCreateTestarrayofboolsVector(builder, data)
 
 def MonsterAddTestf(builder, testf):
     builder.PrependFloat32Slot(25, testf, 3.14159)
@@ -1151,7 +1151,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateTestarrayofstring2Vector(builder, data):
-    MonsterCreateTestarrayofstring2Vector(builder, data)
+    return MonsterCreateTestarrayofstring2Vector(builder, data)
 
 def MonsterAddTestarrayofsortedstruct(builder, testarrayofsortedstruct):
     builder.PrependUOffsetTRelativeSlot(29, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofsortedstruct), 0)
@@ -1173,7 +1173,7 @@
     return builder.EndVector()
 
 def CreateTestarrayofsortedstructVector(builder, data):
-    MonsterCreateTestarrayofsortedstructVector(builder, data)
+    return MonsterCreateTestarrayofsortedstructVector(builder, data)
 
 def MonsterAddFlex(builder, flex):
     builder.PrependUOffsetTRelativeSlot(30, flatbuffers.number_types.UOffsetTFlags.py_type(flex), 0)
@@ -1195,7 +1195,7 @@
     return builder.EndVector()
 
 def CreateFlexVector(builder, data):
-    MonsterCreateFlexVector(builder, data)
+    return MonsterCreateFlexVector(builder, data)
 
 def MonsterAddTest5(builder, test5):
     builder.PrependUOffsetTRelativeSlot(31, flatbuffers.number_types.UOffsetTFlags.py_type(test5), 0)
@@ -1217,7 +1217,7 @@
     return builder.EndVector()
 
 def CreateTest5Vector(builder, data):
-    MonsterCreateTest5Vector(builder, data)
+    return MonsterCreateTest5Vector(builder, data)
 
 def MonsterAddVectorOfLongs(builder, vectorOfLongs):
     builder.PrependUOffsetTRelativeSlot(32, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfLongs), 0)
@@ -1239,7 +1239,7 @@
     return builder.EndVector()
 
 def CreateVectorOfLongsVector(builder, data):
-    MonsterCreateVectorOfLongsVector(builder, data)
+    return MonsterCreateVectorOfLongsVector(builder, data)
 
 def MonsterAddVectorOfDoubles(builder, vectorOfDoubles):
     builder.PrependUOffsetTRelativeSlot(33, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfDoubles), 0)
@@ -1261,7 +1261,7 @@
     return builder.EndVector()
 
 def CreateVectorOfDoublesVector(builder, data):
-    MonsterCreateVectorOfDoublesVector(builder, data)
+    return MonsterCreateVectorOfDoublesVector(builder, data)
 
 def MonsterAddParentNamespaceTest(builder, parentNamespaceTest):
     builder.PrependUOffsetTRelativeSlot(34, flatbuffers.number_types.UOffsetTFlags.py_type(parentNamespaceTest), 0)
@@ -1285,7 +1285,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateVectorOfReferrablesVector(builder, data):
-    MonsterCreateVectorOfReferrablesVector(builder, data)
+    return MonsterCreateVectorOfReferrablesVector(builder, data)
 
 def MonsterAddSingleWeakReference(builder, singleWeakReference):
     builder.PrependUint64Slot(36, singleWeakReference, 0)
@@ -1313,7 +1313,7 @@
     return builder.EndVector()
 
 def CreateVectorOfWeakReferencesVector(builder, data):
-    MonsterCreateVectorOfWeakReferencesVector(builder, data)
+    return MonsterCreateVectorOfWeakReferencesVector(builder, data)
 
 def MonsterAddVectorOfStrongReferrables(builder, vectorOfStrongReferrables):
     builder.PrependUOffsetTRelativeSlot(38, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfStrongReferrables), 0)
@@ -1331,7 +1331,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateVectorOfStrongReferrablesVector(builder, data):
-    MonsterCreateVectorOfStrongReferrablesVector(builder, data)
+    return MonsterCreateVectorOfStrongReferrablesVector(builder, data)
 
 def MonsterAddCoOwningReference(builder, coOwningReference):
     builder.PrependUint64Slot(39, coOwningReference, 0)
@@ -1359,7 +1359,7 @@
     return builder.EndVector()
 
 def CreateVectorOfCoOwningReferencesVector(builder, data):
-    MonsterCreateVectorOfCoOwningReferencesVector(builder, data)
+    return MonsterCreateVectorOfCoOwningReferencesVector(builder, data)
 
 def MonsterAddNonOwningReference(builder, nonOwningReference):
     builder.PrependUint64Slot(41, nonOwningReference, 0)
@@ -1387,7 +1387,7 @@
     return builder.EndVector()
 
 def CreateVectorOfNonOwningReferencesVector(builder, data):
-    MonsterCreateVectorOfNonOwningReferencesVector(builder, data)
+    return MonsterCreateVectorOfNonOwningReferencesVector(builder, data)
 
 def MonsterAddAnyUniqueType(builder, anyUniqueType):
     builder.PrependUint8Slot(43, anyUniqueType, 0)
@@ -1433,7 +1433,7 @@
     return builder.EndVector()
 
 def CreateVectorOfEnumsVector(builder, data):
-    MonsterCreateVectorOfEnumsVector(builder, data)
+    return MonsterCreateVectorOfEnumsVector(builder, data)
 
 def MonsterAddSignedEnum(builder, signedEnum):
     builder.PrependInt8Slot(48, signedEnum, -1)
@@ -1461,7 +1461,7 @@
     return builder.EndVector()
 
 def CreateTestrequirednestedflatbufferVector(builder, data):
-    MonsterCreateTestrequirednestedflatbufferVector(builder, data)
+    return MonsterCreateTestrequirednestedflatbufferVector(builder, data)
 
 def MonsterMakeTestrequirednestedflatbufferVectorFromBytes(builder, bytes):
     builder.StartVector(1, len(bytes), 1)
@@ -1486,7 +1486,7 @@
     return builder.CreateVectorOfTables(data)
 
 def CreateScalarKeySortedTablesVector(builder, data):
-    MonsterCreateScalarKeySortedTablesVector(builder, data)
+    return MonsterCreateScalarKeySortedTablesVector(builder, data)
 
 def MonsterAddNativeInline(builder, nativeInline):
     builder.PrependStructSlot(51, flatbuffers.number_types.UOffsetTFlags.py_type(nativeInline), 0)
diff --git a/tests/MyGame/Example/TypeAliases.py b/tests/MyGame/Example/TypeAliases.py
index 2b7e6e4..048a9b1 100644
--- a/tests/MyGame/Example/TypeAliases.py
+++ b/tests/MyGame/Example/TypeAliases.py
@@ -238,7 +238,7 @@
     return builder.EndVector()
 
 def CreateV8Vector(builder, data):
-    TypeAliasesCreateV8Vector(builder, data)
+    return TypeAliasesCreateV8Vector(builder, data)
 
 def TypeAliasesAddVf64(builder, vf64):
     builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(vf64), 0)
@@ -260,7 +260,7 @@
     return builder.EndVector()
 
 def CreateVf64Vector(builder, data):
-    TypeAliasesCreateVf64Vector(builder, data)
+    return TypeAliasesCreateVf64Vector(builder, data)
 
 def TypeAliasesEnd(builder):
     return builder.EndObject()
diff --git a/tests/MyGame/MonsterExtra.py b/tests/MyGame/MonsterExtra.py
index 5db2980..4992aba 100644
--- a/tests/MyGame/MonsterExtra.py
+++ b/tests/MyGame/MonsterExtra.py
@@ -214,7 +214,7 @@
     return builder.EndVector()
 
 def CreateDvecVector(builder: flatbuffers.Builder, data: Iterable[Any]) -> int:
-    MonsterExtraCreateDvecVector(builder, data)
+    return MonsterExtraCreateDvecVector(builder, data)
 
 def MonsterExtraAddFvec(builder: flatbuffers.Builder, fvec: int):
     builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(fvec), 0)
@@ -236,7 +236,7 @@
     return builder.EndVector()
 
 def CreateFvecVector(builder: flatbuffers.Builder, data: Iterable[Any]) -> int:
-    MonsterExtraCreateFvecVector(builder, data)
+    return MonsterExtraCreateFvecVector(builder, data)
 
 def MonsterExtraEnd(builder: flatbuffers.Builder) -> int:
     return builder.EndObject()
