Как вы пишете функцию с несколькими строками в формате строки? - PullRequest
1 голос
/ 24 апреля 2019

Я хочу написать функцию, чтобы ее можно было читать как строку при использовании compile(), но функция имеет более одной строки, поэтому я не знаю, как ее написать.

это то, что я хочу попробовать написать

def function():
    string = "string"
    print(string)

new_func = "def function(): string = 'strung' # I don't know how to include the other line here "

new_code = compile(new_func,"",'exec')

eval(new_code)

function()

Я бы хотел написать функцию в одну строку (или любым другим способом отформатировать ее, используя eval() и compile()

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Похоже, вы хотите использовать многострочную строку.Попробуйте тройные кавычки в начале и конце строки:

def function():
    string = "string"
    print(string)

new_func = """
def do_stuff():
    string = 'strung' #one line
    print(string) #two lines

"""


new_code = compile(new_func,"",'exec')

eval(new_code)

function()
do_stuff()

См. Этот ответ для других доступных стилей многострочных строк: Pythonic способ создания длинной многострочной строки

Веселись.

1 голос
/ 24 апреля 2019

Вы можете использовать Python Multi-Line, как это было предложено Эндрю.Если вместо этого вам нужна однострочная , просто не забудьте использовать \n и \t в строке функции, чтобы не испортить отступ.Например:

# normal function definition
#
def function():
    string = "string"
    print(string)


# multi-line    
#
new_func = """
def do_stuff(): 
    string = 'strung' # I don't know how to include the other line here
    print(string)"""

# single line, note the presence of \n AND \t
#
new_func2 = "def do_stuff2():\n\tstring = 'strong'\n\tprint(string)\n"

new_code = compile(new_func, "", 'exec')
new_code2 = compile(new_func2, "", 'exec')

eval(new_code)
eval(new_code2)

function()
do_stuff()
do_stuff2()
...