python 실행 함수의 9가지 방법

4598 단어 python실행함수

방법1: 함수 실행 직접 호출


이런 게 가장 간단하고 직관적인 방법이에요.

def task():
    print("running task")

task()
만약 종류 중에도 마찬가지다

class Task:
    def task(self):
        print("running task")

Task().task()

방법2: 편함수를 사용하여 집행


functools 이 내장 라이브러리에는 편함수를 만드는 데 전문적으로 사용되는partial 방법이 있습니다.

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

from functools import partial

power_2=partial(power, n=2)
power_2(2)  # output: 4
power_2(3)  # output: 9

방법 3: eval 동적 실행 사용하기


동적 실행 함수가 필요하다면, eval + 문자열을 사용하여 함수를 실행할 수 있습니다.

import sys

def pre_task():
    print("running pre_task")

def task():
    print("running task")

def post_task():
    print("running post_task")

argvs = sys.argv[1:]

for action in argvs:
    eval(action)()
실행 효과는 다음과 같습니다.

$ python demo.py pre_task task post_task
running pre_task
running task
running post_task

방법 4: getattr를 사용하여 동적 실행 가져오기


모든 함수를 클래스에 넣고 정적 방법으로 정의하면 eval을 사용할 필요가 없습니다. 이어서 getattr를 사용하여 가져오고 호출합니다.

import sys

class Task:
    @staticmethod
    def pre_task():
        print("running pre_task")

    @staticmethod
    def task():
        print("running task")

    @staticmethod
    def post_task():
        print("running post_task")

argvs = sys.argv[1:]

task = Task()

for action in argvs:
    func = getattr(task, action)
    func()

방법 5: 클래스 자체의 사전을 사용한다


우리는 모두 객체에 __가 있다는 것을 안다dict__()의 마법 방법, 모든 대상의 속성 및 방법을 저장합니다.
여기까지 생각해 보세요. 만약에 위의 코드가 있다면, 제가 직접 실례를 취하는 __dict__() 함수를 찾을 수 있습니까?
나는 많은 사람들이 틀릴 것이라고 믿는다.
위에서 우리가 정의한 것은 정적 방법이다. 정적 방법은 실례와 귀속되지 않았기 때문에 정적 방법은 종류에 속하지만 실례에 속하지 않는다. 실례는 사용권(호출 가능)이 있지만 소유권이 없다.
그래서 __를 통과하려면dict__ 함수를 가져오려면 클래스 자체Task를 통해 추출해야 합니다. 호출 방법은 평소와 다르기 때문에 __func__ 가져와야 호출할 수 있습니다.

import sys

class Task:
    @staticmethod
    def pre_task():
        print("running pre_task")

func = Task.__dict__.get("pre_task")
func.__func__()

방법 6: global () 을 사용하여 실행 얻기


위에 클래스에 넣는 것은 getattr를 사용하기 편리하도록 하는 방법일 뿐, 사실 클래스에 넣지 않아도 된다.이 때 글로벌스 () 또는locals () 를 빌려야 합니다. 본질적으로 사전입니다. 함수를 얻을 수 있는 것은 바로 get입니다.

import sys

def pre_task():
    print("running pre_task")

def task():
    print("running task")

def post_task():
    print("running post_task")

argvs = sys.argv[1:]

for action in argvs:
    globals().get(action)()

방법 7: 텍스트에서 컴파일하여 실행


먼저 문자열을 정의합니다. 내용은 함수의 내용입니다. 예를 들어 위의pre_task,compile 함수를 통해 컴파일링을 하고 바이트 코드로 전환한 다음 exec를 사용하여 실행합니다.

pre_task = """
print("running pre_task")
"""
exec(compile(pre_task, '<string>', 'exec'))
만약 당신의 코드가 txt 텍스트에 놓여 있다면, 직접 가져와서 실행할 수는 없지만, 오픈을 통해 읽을 수 있으며, 마지막으로compile 함수로 컴파일해서 실행할 수 있습니다.

with open('source.txt') as f:
    source = f.read()
    exec(compile(source, 'source.txt', 'exec'))

방법 8:attrgetter를 사용하여 실행 얻기


operator 이 내장 라이브러리에attrgetter라는 속성을 가져오는 방법이 있습니다. 함수를 가져오면 실행합니다.

from operator import attrgetter

class People:
    def speak(self, dest):
        print("Hello, %s" %dest)

p = People()
caller = attrgetter("speak")
caller(p)(" ")

방법 9: methodcaller를 사용하여 실행


마찬가지로operator라는 내장 라이브러리는methodcaller 방법이 있습니다. 이를 사용하면 동적 호출 실례 방법의 효과도 얻을 수 있습니다.

from operator import methodcaller

class People:
    def speak(self, dest):
        print("Hello, %s" %dest)

caller = methodcaller("speak", " ")
p = People()
caller(p)
이상은 제가 정리한 함수 집행의 10가지 방법입니다. 많은 방법이 있습니다. 여러분도 아시겠지만 몇 가지 방법이 있습니다. 거의 볼 수 없는 것입니다. 특히 뒤에operator 라이브러리를 사용하는 두 가지 방법이 있습니다.
이상은python 집행 함수의 9가지 방법에 대한 상세한 내용입니다.python 집행 함수의 방법에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기