매개 변수가없는 함수를 실행하는 방법을 알고있었습니다. 이 경우 임의의 순서로 매개 변수가있는 함수를 실행하고 싶습니다.Python 3 : 매개 변수가있는 함수를 임의의 순서로 실행하는 방법은 무엇입니까?
결과는 무작위가 아니며 약간의 오류가 있습니다. 제 코드를 수정하는 데 도움주세요. 고마워요 :)
매개 변수가없는 함수를 실행하는 방법을 알고있었습니다. 이 경우 임의의 순서로 매개 변수가있는 함수를 실행하고 싶습니다.Python 3 : 매개 변수가있는 함수를 임의의 순서로 실행하는 방법은 무엇입니까?
결과는 무작위가 아니며 약간의 오류가 있습니다. 제 코드를 수정하는 데 도움주세요. 고마워요 :)
이 줄을 실행 :
functions = [hi('John'),howold('20', 'John'),howmuch('50')]
파이썬이 점에서 다음 3 개 기능 hi()
, howold()
howmuch()
를 호출합니다 주문한 다음 결과를 functions
이라는 목록에 저장하십시오. 따라서 모든 은 그 시점에서 실행됩니다. 그래서 당신이 말했듯이, "결과는 보여 주지만 무작위는 아닙니다"입니다. 모든 함수가 아무 것도 반환하지 않으므로 functions
은 [None, None, None]
과 같습니다.
다음 코드 :
random.shuffle(functions)
for i in functions:
i()
은 (없음을 실행하지하려고합니다). 그러면 "오류가 있습니다"라는 오류 메시지가 표시됩니다.이 오류는 TypeError: 'NoneType' object is not callable
입니다.
해결 방법 : https://docs.python.org/2/library/functools.html#functools.partial 귀하의 기능이 라인에서 직접 호출하는
루프에서 나는 함수이고 문자열이 아니므로, 문자열을 실용적으로 비교하면 다른 것으로 끝납니다.
functions = [(hi, ['John']), (howold, ['20', 'John']), (howmuch, ['50'])]
random.shuffle(functions)
for func, args in functions:
func(*args)
시도의 것을 사용 .
이 같은 인수없이 새로운 기능을 생산하는 람다를 사용할 수 있습니다
functions = [lambda: hi('John'),
lambda: howold('20', 'John'),
lambda: howmuch('50')]
random.shuffle(functions)
for f in functions:
f()
귀하의 functions
목록은 루프에서 이미 평가 기능의 결과를 인수하지 부분적으로 적용 기능 (당신이 i()
그들을 호출 할 수 있도록)가 포함되어 대신 같은 if i.__name__ == 'hi
'기능 = [('요') 안녕하세요, howold ('20 :
여기functools.partial()
공식 문서, 예를 들어 사용 ','John '), howmuch ('50')]'. 메시지를 인쇄하고 None을 반환합니다. 그러면 목록이 [없음, 없음, 없음]이고 None()을 호출하려고 시도하지만 작동하지 않습니다. –
@ S.deMelo 잘 잡으세요. 웬일인지 나는 그 방법을 붙잡지 않았다. 원래 함수가 문자열과 비교되는 것처럼 보였습니다. – idjaw
@ S.deMelo 답변으로 대답 – idjaw