параметр в функции, кажется, не влияет? - PullRequest
0 голосов
/ 18 октября 2019

Я использую функцию, которая позволяет мне записывать данные файла в список, но я должен что-то упустить, потому что параметр в моей функции, который определяет список, кажется, не работает, знаете ли вы, в чем проблема? есть моя функция:

filePath = path + "\ONLYIVENOTFIXED.txt"
listObj = []
i = listObj


def writeFileOnAList(pathofThefile, namelist):

    fichierIve = open(pathofThefile, "r")
    namelist = fichierIve.readlines()
    namelist = [x.strip() for x in namelist]
    i = namelist
    i = 0


writeFileOnAList(filePath, listObj)
print(listObj)

она говорит мне, что мои настройки "списка имен" в моей функции не используются, и когда я вызываю свою функцию и пытаюсь распечатать свой список, она печатает пустой список

Есть ли у вас какие-либо решения?

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Ключевая проблема заключается в том, что Python является языком передачи по объектам, а не ссылкой по переменным: т.е. ссылки на объекты передаются по значению. Поэтому назначение списка имен в функции просто меняет значение этой переменной: это не оказывает никакого влияния на listobj, который все еще ссылается на исходный список.

Наиболее Pythonic способ исправить это было бы для списка имен, возвращаемых функцией:

filePath = path + "\ONLYIVENOTFIXED.txt"

def writeFileOnAList(pathofThefile):
    with open(pathofThefile, "r") as ficiherIve:
        namelist = fichierIve.readlines()
        namelist = [x.strip() for x in namelist]
    return namelist

listObj = writeFileOnAList(filePath)
0 голосов
/ 18 октября 2019

В вашем скрипте много ошибок:

filePath = path + "\ONLYIVENOTFIXED.txt"
listObj = []

# You are declaring the variable "i" here but you are never using it
i = listObj


def writeFileOnAList(pathofThefile, namelist):

    fichierIve = open(pathofThefile, "r")

    # You are parsing your listObj as parameter (namelist) but you never use it
    # instead you are just overwriting it
    namelist = fichierIve.readlines()
    namelist = [x.strip() for x in namelist]

    # Here you are overwriting your i variable 2 times in a row and never work with it 
    # after that
    i = namelist
    i = 0


writeFileOnAList(filePath, listObj)
print(listObj)

Я не совсем уверен, что вы хотите сделать, но это моя переработанная версия:

filePath = path + "\ONLYIVENOTFIXED.txt"


def writeFileOnAList(pathofThefile):
    fichierIve = open(pathofThefile, "r")
    namelist = fichierIve.readlines()
    namelist = [x.strip() for x in namelist]

    return namelist


listObj = writeFileOnAList(filePath)
print(listObj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...