python 실행 함수의 9가지 방법
방법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 집행 함수의 방법에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.