Создание функции для изменения переменной - PullRequest
0 голосов
/ 14 января 2020

Я хочу создать функцию, которая проверяет, содержит ли строковая переменная «.pdf» в конце, и, если нет, добавить ее в переменную. Когда я запускаю это, output_name не изменяется. Это прекрасно работает вне функции, но я хочу создать функцию, чтобы не повторяться. Спасибо за помощь!

def check(output_name):
    if ".pdf" not in output_name:
        output_name += ".pdf"
    else:
        return None

output_name = "sample"
check(output_name)
print(output_name)

Ответы [ 4 ]

0 голосов
/ 14 января 2020

Метод 1: на основе вашего кода.

Вы почти нашли решение. Здесь я реорганизую ваш код, чтобы он работал.

def check(output_name):
    if ".pdf" not in output_name:
        output_name += ".pdf"
    return output_name


output_name = "sample"
result = check(output_name)
print(result) # sample.pdf

Метод 2: основывается на строковом методе заканчивается с

Вот простой способ достичь своей цели, используя str метод заканчивается с .

def check(output_name):
    if not output_name.endswith('.pdf'):
        output_name = output_name + ".pdf"
    return output_name

output_name = "sample"
result = check(output_name)
print(result) # sample.pdf
0 голосов
/ 14 января 2020
def check_ext(x):
    return x if x[-4:] == ".pdf" else x+".pdf"

Это также может быть хорошим решением, на которое ссылается @ Chris_Rands

def check_ext1(str):
    return str if str.endswith(".pdf") else str+".pdf"

Вывод

st= "string_variable"
print(check_ext(st))   # string_variable.pdf
print(check_ext1(st))  # string_variable.pdf

Надеюсь, это поможет

0 голосов
/ 14 января 2020

Попробуйте это (редактирование заметки основано на рекомендации из комментария)

def check(output_name):

    if not output_name.endswith(".pdf"): 
        return output_name + ".pdf"

output_name = "sample.pdf"    
print(check(output_name))
print(output_name)

Эта строка (output_name += ".pdf") работает, но вы ничего не получаете, потому что не сказали функции вернуть Это. И вы не можете изменить переменную в функции без дополнительных усилий. Читайте о областях применения.

Если вы действительно не хотите, чтобы функция возвращала что-либо, или вы хотите, чтобы переменная изменялась функцией, сделайте следующее: ПРЕДУПРЕЖДЕНИЕ => Это плохая практика!


output_name = "sample.pdf"

def check():
    global output_name  

    if not output_name.endswith(".pdf"): output_name += ".pdf"


check()
print(output_name)
0 голосов
/ 14 января 2020

Предлагаю следующее решение

def filename_editor():
    global output_name
    if ".pdf" not in output_name:
        output_name += ".pdf"

    global input_name
    if ".pdf" not in input_name:
        input_name += ".pdf"
...